使用JS实现气泡跟随鼠标移动的动画效果


Posted in Javascript onSeptember 16, 2017

气泡跟随鼠标移动,并在每次点击时产生不同的变化

效果如下

使用JS实现气泡跟随鼠标移动的动画效果

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>
简单的气泡效果
</title>
 <style type="text/css">
 body{background-color:#000000;margin:0px;overflow:hidden}
 </style>
 </head>
 <body>
 </body>
</html>
<script>
 var canvas = document.createElement('canvas'),
 context = canvas.getContext('2d'),
 windowW = window.screen.width ,
 windowH = window.screen.height ,
 Mx,
 My,
 paused = true;
 suzu = [];
 booms = [];
 boomks = [];
 start();
 canvas.onmousemove = function(e) {
 var loc = canvasMove(e.clientX, e.clientY);
 Mx = loc.x;
 My = loc.y
 };
 canvas.onmousedown = function() {
 creatarry(Mx, My);
 paused = !paused
 };
 function creatarry(a, b) {
 for (var i = 0; i < 40; ++i) {
 booms[i] = {
 x: a,
 y: b,
 gravity: 0.3,
 speedX: Math.random() * 20 - 10,
 speedY: Math.random() * 15 - 7,
 radius: Math.random() * 15,
 color: Math.random() * 360,
 apc: 0.6
 };
 boomks.push(booms[i]);
 if (boomks.length > 300) {
 boomks.shift()
 };
 console.log(boomks)
 }
 };
 function loop1() {
 boomks.forEach(function(circle) {
 context.beginPath();
 context.arc(circle.x, circle.y, circle.radius, 0, Math.PI * 2, false);
 context.fillStyle = 'hsla(' + circle.color + ',100%,60%,' + circle.apc + ')';
 context.fill();
 movecircles(circle)
 })
 }
 function movecircles(circle) {
 circle.x += circle.speedX;
 circle.speedY += circle.gravity;
 circle.y += circle.speedY;
 circle.apc -= 0.008
 }
 function canvasMove(x, y) {
 var bbox = canvas.getBoundingClientRect();
 return {
 x: x - bbox.left * (canvas.width / bbox.width),
 y: y - bbox.top * (canvas.height / bbox.height)
 }
 };
 function start() {
 document.body.appendChild(canvas);
 canvas.width = windowW;
 canvas.height = windowH;
 setInterval(fang, 25)
 }
 function fang() {
 context.clearRect(0, 0, canvas.width, canvas.height);
 loop1();
 loop()
 }
 function loop() {
 var circle = new createCircle(Mx, My);
 suzu.push(circle);
 for (i = 0; i < suzu.length; i++) {
 var ss = suzu[i];
 ss.render(context);
 ss.update()
 }
 if (suzu.length > 1000) {
 suzu.shift()
 }
 }
 function createCircle(x, y) {
 this.x = x;
 this.y = y;
 this.color = Math.random() * 360;
 this.radius = Math.random() * 25;
 this.xVel = Math.random() * 5 - 2;
 this.apc = 0.6;
 this.gravity = 0.07;
 this.yVel = Math.random() * 10 - 3;
 this.render = function(c) {
 c.beginPath();
 c.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
 c.fillStyle = 'hsla(' + this.color + ',100%,60%,' + this.apc + ')';
 c.fill()
 };
 this.update = function() {
 if (!paused) {
 this.yVel += this.gravity;
 this.y += this.yVel
 } else {
 this.y -= 5
 }
 this.x += this.xVel;
 this.apc -= 0.01;
 if (this.radius > 1) {
 this.radius -= 0.4
 }
 } }
 </script>

总结

以上所述是小编给大家带来了使用JS实现气泡跟随鼠标移动的动画效果 ,希望对大家有所帮助!

Javascript 相关文章推荐
js中根据字数截取字符串,不能截断url
Jan 12 Javascript
js抽奖实现随机抽奖代码效果
Dec 02 Javascript
ExtJS的拖拽效果示例
Dec 09 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
Feb 05 Javascript
Javascript中this关键字的一些小知识
Mar 15 Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 Javascript
聊一聊JS中this的指向问题
Jun 17 Javascript
AngularJS中一般函数参数传递用法分析
Nov 22 Javascript
详解JS获取HTML DOM元素的8种方法
Jun 17 Javascript
JS实现的新闻列表自动滚动效果示例
Jan 30 Javascript
微信小程序:数据存储、传值、取值详解
May 07 Javascript
Vue 3.x+axios跨域方案的踩坑指南
Jul 04 Javascript
EasyUI创建人员树的实例代码
Sep 15 #Javascript
webpack构建react多页面应用详解
Sep 15 #Javascript
详解Vue中一种简易路由传参办法
Sep 15 #Javascript
JavaScript实现换肤功能
Sep 15 #Javascript
jQuery实现火车票买票城市选择切换功能
Sep 15 #jQuery
详解Vue.js Mixins 混入使用
Sep 15 #Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
Sep 15 #Javascript
You might like
php导出word格式数据的代码实例
2013/11/25 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
浅析Python3 pip换源问题
2020/01/06 Python
迪拜航空官方网站:flydubai
2017/04/20 全球购物
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
班组长岗位职责
2014/03/03 职场文书
毕业生找工作求职信
2014/08/05 职场文书
住房租房协议书
2014/08/20 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
养成教育工作总结
2015/08/13 职场文书