原生js实现红球碰撞篮球效果
1. 屏幕中随机产生n个蓝色大小不一的气泡,坐标随机
2. 红色气泡跟随鼠标移动
3. 当红色气泡会与蓝色气泡发生碰撞效果(类似桌球)
4. 红色气泡会被屏幕边缘阻挡
5. 蓝色气泡左右屏上下屏互通
6. 蓝色气泡的运动及互动行为请自由发挥
HTML部分:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上机</title><link rel="stylesheet" href="./css/index.css">
</head>
<body><div class="container"><img class = "redBall" src="./images/1.png" alt="红球" width="100px" height="100px"><img class = "blueBall" src="./images/2.png" alt="篮球"></div><script src = "./js/index.js"></script>
</body>
</html>
CSS部分:
*{margin:0;padding: 0;
}
.container{width: 800px;height: 400px;position: relative;margin: 0 auto;border: 1px solid #ddd;overflow: hidden;
}
.blueBall{width: 80px;height: 80px;position: absolute;z-index: 1;transition: top 2s,left 2s;
}
.redBall{position: absolute;z-index: 2;
}
js部分:
var blueBall = document.getElementsByClassName("blueBall");
var container = document.getElementsByClassName("container");
var redBall = document.getElementsByClassName("redBall")[0];//创建篮球DOM
var blueimg = document.createElement("img");
blueimg.setAttribute("src","./images/2.png");
blueimg.setAttribute("alt","篮球");
blueimg.setAttribute("class","blueBall");//蓝色球数量最少8个最多16个;
var ballNum = Math.ceil(Math.random() * 8 + 8);for (var i = ballNum - 1; i >= 0; i--) {let oi = blueimg.cloneNode(true);container[0].appendChild(oi);
}/*
*设置球的大小
*/
for (var i = 0; i < blueBall.length; i++) {let ballSize = hwsize();blueBall[i].style.width = ballSize + "px";blueBall[i].style.height = ballSize + "px";
}/*
*随机排序蓝球
*/
for (var i = 0; i < blueBall.length; i++) {blueBall[i].style.top = Math.ceil(Math.random() * 400) + "px";blueBall[i].style.left = Math.ceil(Math.random() * 800) + "px";
}//获取篮球大小范围为50-100
function hwsize() { return Math.ceil(Math.random() * 50) + 50;
}/*
*红球随鼠标移动
*code start
*/
container[0].addEventListener("mousemove",function(e){var redYX = redPositionX(e);redBall.style.left =redYX.x + "px";redBall.style.top = redYX.y + "px";for (let i = blueBall.length - 1; i >= 0; i--) {blueBoom(i);}
});function redPositionX(e) {var redXY = {x: 0,y: 0 };var ok = e.clientX - container[0].offsetLeft - redBall.width/2;var yes = e.clientY - container[0].offsetTop - redBall.height/2;console.log(yes);if(ok < 0){redXY.x = 0;}else{if(ok > (800 - redBall.width)){redXY.x = 800 - redBall.width;}else{redXY.x = ok;}}if(yes < 0){redXY.y = 0;}else{if(yes > (400 - redBall.height)){redXY.y = 400 - redBall.height;}else{redXY.y = yes;}}return redXY;
}
/*
*code end
*//*
*实现蓝色小球的碰撞
*code start
*/
function blueBoom(i){//获取篮球相对浏览器的位置var blueX = blueBall[i].offsetLeft;var blueY = blueBall[i].offsetTop;//获取红球相对浏览器的位置var redX = redBall.offsetLeft;var redY = redBall.offsetTop;sizeX = redX - blueX;sizeY = redY - blueY;if(sizeX < 0){var absX = Math.abs(sizeX);if(absX < redBall.width){if(sizeY < 0 ){var absY = Math.abs(sizeY);if(absY < redBall.width){//code 小球移动blueBall[i].style.top = 50 + "px";blueBall[i].style.left = 50 + "px";}return;}else{if(absY < blueBall[i].width){//code 小球移动}return;} }return;}else{if(absX < blueBall[i].width){if(sizeY < 0 ){var absY = Math.abs(sizeY);if(absY < redBall.width){//code 小球移动}return;}else{if(absY < blueBall[i].width){//code 小球移动}return;}}return;}}
代码并为完成,但是大致思路就是这样,只需要在我写注释的地方规定篮球的移动轨迹即可。红篮球图片奉上
![](/assets/blank.gif)
![](/assets/blank.gif)
原生js实现红球碰撞篮球效果相关推荐
- html原生js实现图片轮播,原生JS实现图片轮播切换效果
原生JS实现图片轮播切换效果 2019-01-06 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了原生JS实现图片轮播切换效果,编程之家小编觉得挺不错的,现在分 ...
- 原生js实现文字循环向上滚动效果
原生js实现文字循环向上滚动效果 css样式 (最外层的div的高度不要太高,也不要正好包含内容区域的高度,最好比内容区域高度低点,产生滚动条) #scrollArea {width: 400px; ...
- php侧边栏导航效果,原生js实现电商侧边导航效果
知识要点 实现原理: 1.点击楼层跳相应楼层,用的是锚点定位 电梯:2F 个护家清 列表title: 这个没什么好说的 2.当点击楼层跳到相应楼层时,该楼层高亮显示 我们的脚本主要就是实现这个功能. ...
- 单机按钮来图片轮播_原生js如何实现轮播图效果?
第一种: 这个是之前写的,比较草率,没有注释,如果这个看不懂就去看第二个,比较仔细,主要是了解他,后面都会有一些插件来使用,很方便,只要几行代码就可写出各种各样的代码,所以,不懂的话,不要太在意, 第 ...
- 原生js 弹出框;弹出效果 定时关闭
关于原生js的弹出框样式 淡出淡入效果; <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ...
- 【html+css+原生js实现炫酷照片展开效果-----女友相册的正确打开方式(详细)】
1.先看效果.有动画效果,截图效果不大明显.copy代码运行可以展示完整效果. 2.html页面 <!DOCTYPE html> <html><head><m ...
- html js 动画效果,原生js html5 canvas 3D云动画效果
特效描述:原生js html5canvas 3D云动画效果.3D云效果,叼炸天!可用鼠标控制方向!本地要localhost才能正常演示 代码结构 1. 引入JS 2. HTML代码 varying v ...
- 原生js代码实现图片放大境效果
hello 大家好! 这是我的第一篇博客文章,感谢大家前来阅读,希望我们都能在这个平台上相互交流.共同进步.查漏补缺. 今天我给大家分享一下自己用js写的一个图片放大器效果,我做了两种效果的放大,其实 ...
- 分享原生js代码实现图片放大境效果
<p>今天我给大家分享一下自己用js写的一个图片放大器效果,我在内涵图网<a target=_blank href="http://www.neipic.com" ...
最新文章
- h2 mysql 兼容性_H2内存数据库对sql语句的支持问题 sql放到mysql数据库中能跑
- CSS 外边距(margin)重叠及防止方法
- 【技术综述】如何Finetune一个小网络到移动端(时空性能分析篇)
- sqlserver清除缓存(转载)
- java B锁_Java中15种锁的介绍
- 使用SAP UI5 Web Components开发React应用
- mysql kill hup_kill -HUP pid
- python读取与写入配置文件
- 剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)
- open cv+C++错误及经验总结(五)
- java中的i++和++i
- 思科2960g端口限速配置
- pyspark env: ‘python’: No such file or directory
- 企鹅号怎么赚钱,企鹅号怎么运营,企鹅号怎么写爆文
- Zeppelin安装(Docker版)
- WebForm水印照片
- spring bean的init、destory的几种方法及生命周期
- gitlab创建merge requests
- 看完《三体》,我顿悟了5个最残酷的职场生存法则
- 【技术】uniapp之聊天室 demo