在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
突发奇想,写了个小球来回弹跳的案例,供大家参考,具体内容如下 主要就是利用了margin-left / top 值进行位移,当然,也可以使用定位去做。 本案例所用到的有:
上代码 整体使用原生js <style> //style样式 * { margin: 0; padding: 0; } #box { width: 500px; height: 600px; background-color: #eee; box-shadow: 0 0 10px 0 #000; margin: auto; overflow: hidden; position: relative; margin-top: 50px; } #box div { width: 50px; height: 50px; border-radius: 50%; background-color: #fff; position: absolute; } </style> <body> <div id="box"> <div id="cir"></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div> </body> <script> var box = document.getElementById("box"); var cir = document.getElementById("cir") var cirs = box.querySelectorAll("div"); collMove(box, cir, 6); collMove(box, cirs[1], 7); collMove(box, cirs[2], 8); collMove(box, cirs[3], 9); collMove(box, cirs[4], 10); collMove(box, cirs[5], 10); collMove(box, cirs[6], 11); /** * 元素遇边界弹开 * 弹开的同时改变元素颜色 * @param {容器获取} box * @param {容器内弹跳元素获取} cir * @param {弹跳速度} speed */ function collMove(box, cir, speed) {//方法封装 var oDiv = box; //获取容器 var oCir = cir; //获取容器内元素 var xMax = oDiv.offsetWidth - oCir.offsetWidth; //容器最大X轴边界 var yMax = oDiv.offsetHeight - oCir.offsetHeight; //容器最大Y轴边界 var motionX = 0; //元素X轴坐标初始化 var motionY = 0; //元素y轴坐标初始化 (() => { var speedX = speed; //x轴偏移量 var speedY = speed; //y轴偏移量 setInterval(() => { motionX += speedX; //进行X轴偏移 motionY += speedY; //进行y轴偏移 if (motionX >= xMax) { //检测是否碰到X轴右边界 motionX = xMax; //碰到边界将X轴坐标设为x轴最大右边界 speedX = -speedX; //x轴偏移量反转 randColor(oCir); //改变颜色 } else if (motionX <= 0) { //检测是否碰到X左边界 motionX = 0; //碰到边界将X轴坐标设为 0 即左边界初始位置 speedX = -speedX; //再次反转X轴偏移量 randColor(oCir); //下方上下边界检测同理 } if (motionY >= yMax) { motionY = yMax; speedY = -speedY randColor(oCir); } else if (motionY <= 0) { motionY = 0; speedY = -speedY; randColor(oCir); } oCir.style.marginLeft = motionX + "px"; //设置元素X轴坐标 oCir.style.marginTop = motionY + "px"; //设置元素Y轴坐标 }, 10); })(); function randColor(obj) { //封装一个随机色彩,改变颜色直接调用 var op = Math.random() * 7 + 3; function color() { return Math.floor(Math.random() * 256); } return obj.style.backgroundColor = `rgba(${color()},${color()},${color()},${op})`; } } </script> 整个方法中,最主要的就是理解元素位置与容器边界的检测与判断,这一部分搞懂,剩下的就很简单了。 抛个砖: for(var i = 1 ; i<=10;i++){ collMove(box,cirs[i],i); } 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
请发表评论