原生js实现弹跳小球
更新时间:2021年9月12日 16:00 点击:1655
突发奇想,写了个小球来回弹跳的案例,供大家参考,具体内容如下
主要就是利用了margin-left / top 值进行位移,当然,也可以使用定位去做。
本案例所用到的有:
- DOM元素获取
- DOM样式操作
- .offsetWidth 获取元素宽度
- .offsetHeight 获取元素高度
- setInterval() 定时器
上代码
整体使用原生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循环去循环调用。
抛个砖:
for(var i = 1 ; i<=10;i++){ collMove(box,cirs[i],i); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
上一篇: vue项目中禁用浏览器缓存配置案例
下一篇: JavaScript实现一个输入框组件
相关文章
- 这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
- 本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
- 这篇文章主要给大家介绍了关于Nest.js参数校验和自定义返回数据格式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-28
- 这篇文章主要介绍了js实现调用网络摄像头及常见错误处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-07
- 这篇文章主要为大家详细介绍了JS实现随机生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
- 这篇文章主要介绍了JS实现响应鼠标点击动画渐变弹出层效果代码,具有非常自然流畅的动画过度效果,涉及JavaScript针对鼠标事件的响应及页面元素样式的动态操作相关技巧,需要的朋友可以参考下...2016-03-28
- 这篇文章主要介绍了基于JavaScript实现文字超出部分隐藏 的相关资料,需要的朋友可以参考下...2016-03-01
- 本文给大家介绍的是nodejs实现使用阿里大鱼短信API发送消息的方法和代码,有需要的小伙伴可以参考下。...2016-01-20
- 系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter。如果对smarty比较熟悉的话,学习angularjs会比较容易一点,这篇文章给大家介绍angularjs filter用法详解,感兴趣的朋友一起学习吧...2015-12-29
- 这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod...2017-07-06
- 这篇文章主要为大家详细介绍了js实现列表按字母排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-11
- 使用require('crypto')调用加密模块。加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。该模块还提供了一套针对OpenSSL的hash(哈希),hmac(密钥哈希),cipher...2014-06-07
- 这篇文章主要教大家如何利用Bootstrap3制作图片轮播效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-05-14
- 这篇文章主要为大家分享了Bootstrap教程JS插件滚动监听学习笔记,内容很详细,感兴趣的小伙伴们可以参考一下...2016-05-20
- 这篇文章主要为大家详细介绍了JS实现纸牌发牌动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-01-19
- 本篇文章主要介绍了Nodejs中使用captchapng模块实现图片验证码,非常具有实用价值,需要的朋友可以参考下 ...2017-05-22
- 为了网站的安全性,很多朋友都把密码设的比较复杂,但是如何密码不能明显示,不知道输的是对是错,为了安全起见可以把密码显示的,那么基于js代码如何实现的呢?下面通过本文给大家介绍JavaScript实现表单密码的隐藏和显示,需要的朋友参考下...2016-03-03
- AngularJS 通过路由支持多视图应用, 可以根据路由动态加载所需的视图, 在 AngularJS 的文档中有详细的介绍, 网上也有不少教程, 就不用介绍了!随着视图的不断增加,js文件会越来越多,而 AngularJS 默认需要把全部的js都一次性...2015-10-21
- v-for标签可以用来遍历数组,将数组的每一个值绑定到相应的视图元素中去,下面这篇文章主要给大家介绍了关于在Vue.js中轻松解决v-for执行出错的三个方案,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。...2017-06-15
安装使用Mongoose配合Node.js操作MongoDB的基础教程
这篇文章主要介绍了安装使用Mongoose来让Node.js操作MongoDB的基础教程,前端js+后端node+js操作MongoDB正是所谓最流行的一种JavaScript全栈开发方案,需要的朋友可以参考下...2016-03-03