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. h2 mysql 兼容性_H2内存数据库对sql语句的支持问题 sql放到mysql数据库中能跑
  2. CSS 外边距(margin)重叠及防止方法
  3. 【技术综述】如何Finetune一个小网络到移动端(时空性能分析篇)
  4. sqlserver清除缓存(转载)
  5. java B锁_Java中15种锁的介绍
  6. 使用SAP UI5 Web Components开发React应用
  7. mysql kill hup_kill -HUP pid
  8. python读取与写入配置文件
  9. 剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)
  10. open cv+C++错误及经验总结(五)
  11. java中的i++和++i
  12. 思科2960g端口限速配置
  13. pyspark env: ‘python’: No such file or directory
  14. 企鹅号怎么赚钱,企鹅号怎么运营,企鹅号怎么写爆文
  15. Zeppelin安装(Docker版)
  16. WebForm水印照片
  17. spring bean的init、destory的几种方法及生命周期
  18. gitlab创建merge requests
  19. 看完《三体》,我顿悟了5个最残酷的职场生存法则
  20. 【技术】uniapp之聊天室 demo

热门文章

  1. 宾语从句it做形式主语的句子
  2. cocos creater ios端 字库不生效
  3. 新版超简单的PDF阅读器
  4. Linux中_Ubuntu上_命令_使用小技巧记录
  5. 苹果7硬件测试的软件吗,iphone7跑分
  6. 超强实时跟踪系统PP-Tracking学习记录
  7. Jquery 上传文件(不通过form表单提交)
  8. 大纲笔记转换为思维导图的,不仅仅只有幕布才能实现
  9. python 提取出所有学生的序号,姓名,成绩(简单易懂,代码可以直接运行,非正则表达式)
  10. 微信小程序百度地图API移动选点