使用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 相关文章推荐
jQuery.validate 常用方法及需要注意的问题
Mar 20 Javascript
JavaScript操纵窗口的方法小结
Jun 28 Javascript
使用闭包对setTimeout进行简单封装避免出错
Jul 10 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
Jun 30 Javascript
js中实现字符串和数组的相互转化详解
Jan 24 Javascript
有关jquery与DOM节点操作方法和属性记录
Apr 15 Javascript
jquery自定义插件开发之window的实现过程
May 06 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
Jun 01 Javascript
vue-router单页面路由
Jun 17 Javascript
Javascript实现找不同色块的游戏
Jul 17 Javascript
angularJs select绑定的model取不到值的解决方法
Oct 08 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(8) php 数组
2010/03/05 PHP
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
你知道setTimeout是如何运行的吗?
2016/08/16 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
安装Python的教程-Windows
2017/07/22 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
应届实习生的自我评价范文
2014/01/05 职场文书
《燕子专列》教学反思
2014/02/21 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
员工旷工检讨书
2015/08/15 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android