使用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 textlimit 显示用户输入的字符数 限制用户输入的字符数
May 14 Javascript
js 表单提交后按钮变灰的实例代码
Aug 16 Javascript
js清空表单数据的两种方式(遍历+reset)
Jul 18 Javascript
AngularJS 使用 UI Router 实现表单向导
Jan 29 Javascript
JS代码实现table数据分页效果
May 26 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
Jan 05 Javascript
vue中各组件之间传递数据的方法示例
Jul 27 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
Dec 20 Javascript
vue使用 better-scroll的参数和方法详解
Jan 25 Javascript
vue 实现剪裁图片并上传服务器功能
Mar 01 Javascript
浅谈vue父子组件怎么传值
Jul 21 Javascript
vue 使用class创建和清除水印的示例代码
Dec 25 Vue.js
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
中国的第一台收音机
2021/03/01 无线电
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
Symfony核心类概述
2016/03/17 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
微信小程序实现顶部导航特效
2019/01/28 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
详解Python发送email的三种方式
2018/10/18 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
python不同版本的_new_不同点总结
2020/12/09 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
应届大学生的推荐信
2013/11/20 职场文书
管理部部长岗位职责
2013/12/05 职场文书
房地产融资计划书
2014/01/10 职场文书
2015年护士节活动总结
2015/02/10 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
详解python网络进程
2021/06/15 Python
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android
Python PIL按比例裁剪图片
2022/05/11 Python