使用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 相关文章推荐
扩展javascript的Date方法实现代码(prototype)
Nov 20 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
May 26 Javascript
ext中store.load跟store.reload的区别示例介绍
Jun 17 Javascript
js日期范围初始化得到前一个月日期的方法
May 05 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
Jan 19 Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
Aug 17 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
Dec 07 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
Jul 02 Javascript
js通过Date对象实现倒计时动画效果
Oct 27 Javascript
JS简单数组排序操作示例【sort方法】
May 17 Javascript
原生js实现trigger方法示例代码
May 22 Javascript
vue穿梭框实现上下移动
Jan 29 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
Python入门篇之字典
2014/10/17 Python
Python Socket编程详细介绍
2017/03/23 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
numpy中三维数组中加入元素后的位置详解
2019/11/28 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
料理师求职信
2014/01/30 职场文书
全神贯注教学反思
2014/02/03 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
售后前台接待岗位职责
2015/04/03 职场文书
市场督导岗位职责
2015/04/10 职场文书
安全主题班会教案
2015/08/12 职场文书
详解Vue3使用axios的配置教程
2022/04/29 Vue.js