使用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 Map 和 List 的简单实现代码
Jul 08 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
Mar 10 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
Apr 07 Javascript
Bootstrap所支持的表单控件实例详解
May 16 Javascript
Bootstrap carousel轮转图的使用实例详解
May 17 Javascript
xtemplate node.js 的使用方法实例解析
Aug 22 Javascript
Vue.js每天必学之数据双向绑定
Sep 05 Javascript
详解Vue2.0里过滤器容易踩到的坑
Jun 01 Javascript
AngularJS实现自定义指令及指令配置项的方法
Nov 20 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
Aug 20 Javascript
Vue表单控件数据绑定方法详解
Feb 05 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
Jan 19 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
php实现mysql数据库备份类
2008/03/20 PHP
常用的PHP数据库操作方法(MYSQL版)
2011/06/08 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
JavaScript中的Window窗口对象
2008/01/16 Javascript
javascript indexOf函数使用说明
2008/07/03 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
jQuery实现的多滑动门,多选项卡效果代码
2016/03/28 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
H5实现仿flash效果的实现代码
2017/09/29 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
2019/11/07 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
Python3 Random模块代码详解
2017/12/04 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
十一酒店活动方案
2014/02/20 职场文书
大学军训感言200字
2014/02/26 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
学校远程教育工作总结
2015/08/11 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python