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;}}

代码并为完成,但是大致思路就是这样,只需要在我写注释的地方规定篮球的移动轨迹即可。红篮球图片奉上

原生js实现红球碰撞篮球效果相关推荐

  1. html原生js实现图片轮播,原生JS实现图片轮播切换效果

    原生JS实现图片轮播切换效果 2019-01-06 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了原生JS实现图片轮播切换效果,编程之家小编觉得挺不错的,现在分 ...

  2. 原生js实现文字循环向上滚动效果

    原生js实现文字循环向上滚动效果 css样式 (最外层的div的高度不要太高,也不要正好包含内容区域的高度,最好比内容区域高度低点,产生滚动条) #scrollArea {width: 400px; ...

  3. php侧边栏导航效果,原生js实现电商侧边导航效果

    知识要点 实现原理: 1.点击楼层跳相应楼层,用的是锚点定位 电梯:2F 个护家清 列表title: 这个没什么好说的 2.当点击楼层跳到相应楼层时,该楼层高亮显示 我们的脚本主要就是实现这个功能. ...

  4. 单机按钮来图片轮播_原生js如何实现轮播图效果?

    第一种: 这个是之前写的,比较草率,没有注释,如果这个看不懂就去看第二个,比较仔细,主要是了解他,后面都会有一些插件来使用,很方便,只要几行代码就可写出各种各样的代码,所以,不懂的话,不要太在意, 第 ...

  5. 原生js 弹出框;弹出效果 定时关闭

    关于原生js的弹出框样式 淡出淡入效果; <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ...

  6. 【html+css+原生js实现炫酷照片展开效果-----女友相册的正确打开方式(详细)】

    1.先看效果.有动画效果,截图效果不大明显.copy代码运行可以展示完整效果. 2.html页面 <!DOCTYPE html> <html><head><m ...

  7. html js 动画效果,原生js html5 canvas 3D云动画效果

    特效描述:原生js html5canvas 3D云动画效果.3D云效果,叼炸天!可用鼠标控制方向!本地要localhost才能正常演示 代码结构 1. 引入JS 2. HTML代码 varying v ...

  8. 原生js代码实现图片放大境效果

    hello 大家好! 这是我的第一篇博客文章,感谢大家前来阅读,希望我们都能在这个平台上相互交流.共同进步.查漏补缺. 今天我给大家分享一下自己用js写的一个图片放大器效果,我做了两种效果的放大,其实 ...

  9. 分享原生js代码实现图片放大境效果

    <p>今天我给大家分享一下自己用js写的一个图片放大器效果,我在内涵图网<a target=_blank href="http://www.neipic.com" ...

最新文章

  1. shell实例第23讲:每天定时备份nginx日志
  2. aspnet_merge.exe”已退出,代码为1的错误的解决方法
  3. Centos7下安装Python3.5
  4. php汽车找车位,遭遇到车多车位少 教你如何快速找到停车位
  5. php根据浏览器调用支付_Android通过外部浏览器调用微信H5支付,Android+PHP详解
  6. ad如何选中当前层上的器件_82条AD转换设计经验总结!
  7. 外星人颜色python练习_在知乎上学Python爬虫
  8. Linux下Qt使用QAudio相关类进行音频采集,使用Windows下的Matlab软件播放
  9. 通过saltapi接口安装实例(modules)
  10. 汇编语言第2版---笔记(第一章基础知识)
  11. 8086/8088 CPU的段寻址方式,段地址和偏移地址
  12. 程序员52个堪称神器的学习网站,每天坚持一小时,让你受益一生
  13. android7.0 root教程,小米4S(全网通 安卓7.0)一键ROOT详解教程,看教程ROOT
  14. winxp笔记本和有线路由器通过网线连接情况下的设置方法
  15. Java程序员面试宝典笔记记录(终)-第9章海量数据部分笔记
  16. 3D场景搭建的隐秘功能——时间轴
  17. ..NET程序破解仅需三步
  18. 干草的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 新手上路必备的 DAX 函数(下)
  20. pixhawk2.4.8飞控相关资料

热门文章

  1. c语言成绩管理系统完整vc6,学生成绩管理系统源代码
  2. 循环神经网络(RNN)与长短期记忆网络(LSTM)讲解
  3. deepmind dnc 是干什么的 下面是转载的介绍文章
  4. 创建cmd桌面快捷方式
  5. 保时捷遇最强对手?玛莎拉蒂发布全新SUV;比亚迪壳牌计划合资在深圳运营一万个电动汽车充电终端 | 美通社头条...
  6. TMC控制平面详解 - VMware Tanzu显露王者风范 (3)
  7. 微信小程序wx:for中的item什么意思以及wx:for-item的意思
  8. Teradata上新Vantage Customer Experience和Vantage Analyst,都是啥?
  9. php前端计算合计,js统计表格指定列的合计
  10. 《分销商开发、维护与管理》--王越老师