Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
css
html, body { height: 100%;overflow: hidden } canvas { width: 100%; height: 100%; background: black; }
JavaScript
// setup let store = { /** * p - 高度百分比,a - 振幅 * CHANGE THESE VALUES to have fun! * you can change the img src also ;-) */ from: { p: 55, a: 6 }, to: { p: 100, a: 1 }, wavelength: Math.PI * 32 }; let phase = 0; const wi = Math.max( document.documentElement["clientWidth"], document.body["scrollWidth"], document.documentElement["scrollWidth"], document.body["offsetWidth"], document.documentElement["offsetWidth"] ), hi = Math.max( document.documentElement["clientHeight"], document.body["scrollHeight"], document.documentElement["scrollHeight"], document.body["offsetHeight"], document.documentElement["offsetHeight"] ); // create canvas const canvas = document.createElement("canvas"); canvas.width = wi; canvas.height = hi; document.body.appendChild(canvas); const ctx = canvas.getContext("2d"); ctx.imageSmoothingEnabled = false; const buffer = document.createElement("canvas"); buffer.width = wi; buffer.height = 1; // load image const img = new Image(); img.crossOrigin = "anonymous"; img.onload = () => { store.scale = Math.max(canvas.width / img.width, canvas.height / img.height); store.x = canvas.width / 2 - (img.width / 2) * store.scale; store.y = canvas.height / 2 - (img.height / 2) * store.scale; // store row values in store store.from.row = Math.round(store.from.p * 0.01 * canvas.height); store.to.row = Math.round(store.to.p * 0.01 * canvas.height); store.offset = store.wavelength / (store.to.row - store.from.row); tick(); }; img.src = "https://images.unsplash.com/photo-1622084923370-70813c683e2f?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1470&q=80"; // animation const tick = () => { window.requestAnimationFrame(tick.bind(this)); // draw image ctx.drawImage( img, store.x, store.y, img.width * store.scale, img.height * store.scale ); // amplitude animation for (let rowData, row = store.from.row; row <= store.to.row; row++) { rowData = ctx.getImageData(0, row, canvas.width, 1); ctx.putImageData( rowData, Math.sin(phase + row * store.offset) * map(row, store.from.row, store.to.row, store.from.a, store.to.a), row ); } phase += 0.1; }; const normalize = (value, minimum, maximum) => { return (value - minimum) / (maximum - minimum); }; const interpolate = (normValue, minimum, maximum) => { return minimum + (maximum - minimum) * normValue; }; const map = (value, min1, max1, min2, max2) => { return interpolate(normalize(value, min1, max1), min2, max2); };
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>js水波动画-jq22.com</title> <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script> <style>
</style> </head> <body>
<script>
</script>
</body> </html>
2012-2021 jQuery插件库版权所有
jquery插件
|
jq22工具库
|
网页技术
|
广告合作
|
在线反馈
|
版权声明
沪ICP备13043785号-1
浙公网安备 33041102000314号