系列文章
canvas实战之酷炫背景动画(一)
canvas实战之酷炫背景动画(二)
canvas实战之酷炫背景动画(三)
canvas实战之酷炫背景动画(四)
canvas实战之酷炫背景动画(五)
canvas实战之酷炫背景动画(六)
canvas实战之酷炫背景动画(七)

接下来添加鼠标移动时间。 当鼠标与圆点距离达到固定距离1时,圆点会被瞬间吸到距离鼠标的另一个固定距离2(可视为出现线条的最大距离),然后继续向当前鼠标与圆点方向运动到鼠标的另一边。 当鼠标快速移动使鼠标与圆点距离大于固定距离1时,圆点脱离。

<script type="text/javascript">
class FwhfPointLine{constructor(pointNum,pointR,pointColor,pointSpeed,lineMaxLength,lineColor,eMaxLength,eState){this.pointNum = pointNum;this.pointR = pointR;this.pointColor = pointColor;this.pointColorLength = pointColor.length;this.pointSpeed = pointSpeed;this.lineMaxLength = Math.pow(lineMaxLength,2);this.lineColor = lineColor;this.eMaxLength = eMaxLength;this.eCoefficient = lineMaxLength/eMaxLength;this.eState = eState;this.width = window.innerWidth;this.height = window.innerHeight;this.pointArr = [];this.timer = null;this.canvas = '';this.context = '';this.x = '';this.y = ''; this.flag = false;this.init();}init(){document.body.innerHTML += "<canvas id='fwhfCanvas'></canvas>";this.canvas = document.getElementById('fwhfCanvas');this.canvas.width = this.width;this.canvas.height = this.height;this.canvas.style.position = "fixed";this.canvas.style.top = 0;this.canvas.style.left = 0;this.canvas.style.pointerEvents = 'none';this.context = this.canvas.getContext('2d');for(var i = 0 ; i < this.pointNum ; i++){this.pointArr[i] = [this.rand(this.pointR[1],this.width-this.pointR[1]),this.rand(this.pointR[1],this.height-this.pointR[1]),this.rand(this.pointR[0],this.pointR[1]),this.rand(0,this.pointColorLength-1),this.rand(this.pointSpeed[0],this.pointSpeed[1]),this.rand(this.pointSpeed[0],this.pointSpeed[1]),this.eState];}window.onmousemove = (e)=>{var e = e || event;this.x = e.clientX;this.y = e.clientY;if(!this.flag && this.x > 3 && this.x < this.width-3 && this.y > 3 && this.y < this.height-3){this.flag = !this.flag;}if(this.flag && (this.x <= 3 || this.x >= this.width-3 || this.y <= 3 || this.y >= this.height-3)){this.flag = !this.flag;for(var i = 0 ; i < this.pointNum ; i++){this.pointArr[i][6] = false;}}}this.Repaint();}drawPoint(){for(var i = 0 ; i < this.pointNum ; i++){if(this.flag){var showELineeCoefficient = Math.pow(this.x-this.pointArr[i][0],2)+Math.pow(this.y-this.pointArr[i][1],2);var showELine = showELineeCoefficient/Math.pow(this.eMaxLength,2);if(showELine < 1){this.pointArr[i][6] = true;this.pointArr[i][0] = this.x-Math.sqrt(this.lineMaxLength)*(this.x-this.pointArr[i][0])/Math.sqrt(showELineeCoefficient);this.pointArr[i][1] = this.y-Math.sqrt(this.lineMaxLength)*(this.y-this.pointArr[i][1])/Math.sqrt(showELineeCoefficient);}else{this.pointArr[i][6] = false;}}this.context.beginPath();this.context.fillStyle = this.pointColor[this.pointArr[i][3]];this.context.arc(this.pointArr[i][0],this.pointArr[i][1],this.pointArr[i][2],0,2*Math.PI);this.context.fill();this.context.closePath();if(!this.pointArr[i][6]){if(this.pointArr[i][0] + this.pointArr[i][4] >= this.canvas.width){this.pointArr[i][0] = this.canvas.width;this.pointArr[i][4] *= -1;}else if(this.pointArr[i][0] + this.pointArr[i][4] <= 0){this.pointArr[i][0] = 0;this.pointArr[i][4] *= -1;}else{this.pointArr[i][0] += this.pointArr[i][4];}if(this.pointArr[i][1] + this.pointArr[i][5] >= this.canvas.height){this.pointArr[i][1] = this.canvas.height;this.pointArr[i][5] *= -1;}else if(this.pointArr[i][1] + this.pointArr[i][5] <= 0){this.pointArr[i][1] = 0;this.pointArr[i][5] *= -1;}else{this.pointArr[i][1] += this.pointArr[i][5];}}}}drawLine(){var drawLineNum = 0;for(var i = 0 ; i < this.pointNum ; i++){if(!this.pointArr[i][6]){for(var j = 0 ; j < i-1 ; j++){var showIndex = ((Math.pow(this.pointArr[i][0]-this.pointArr[j][0],2)+ Math.pow(this.pointArr[i][1]-this.pointArr[j][1],2))/this.lineMaxLength).toFixed(1);if(showIndex < 1){this.context.beginPath();this.context.strokeStyle = "rgba("+this.lineColor[0]+","+this.lineColor[1]+","+this.lineColor[2]+","+(1-showIndex)+")";this.context.moveTo(this.pointArr[i][0],this.pointArr[i][1]);this.context.lineTo(this.pointArr[j][0],this.pointArr[j][1]);this.context.stroke();this.context.closePath();}}}else{drawLineNum++;this.context.beginPath();this.context.strokeStyle = "rgba("+this.lineColor[0]+","+this.lineColor[1]+","+this.lineColor[2]+",0.2)";this.context.moveTo(this.x,this.y);this.context.lineTo(this.pointArr[i][0],this.pointArr[i][1]);this.context.stroke();if(drawLineNum >= 2){for(var k = 0 ; k < this.pointNum ; k++){if(this.pointArr[k][6] && Math.pow((this.pointArr[i][0]-this.pointArr[k][0]),2)+Math.pow((this.pointArr[i][1]-this.pointArr[k][1]),2)<600){this.context.moveTo(this.pointArr[i][0],this.pointArr[i][1]);this.context.lineTo(this.pointArr[k][0],this.pointArr[k][1]);this.context.stroke();}}}this.context.closePath();}}}Repaint(){this.timer = setInterval(()=>{this.context.clearRect(0,0,this.width,this.height);this.drawPoint();this.drawLine();},30)}rand(min,max){var c = max - min + 1;return Math.floor(Math.random() * c + min);}
}
/*
*pointeNum 随机的点的个数 number
*pointR 点的半径 array [minR,maxR] 推荐[0.5,1]
*pointColor 点的颜色 array [color1,color2,...]
*pointSpeed 点的速度 array [speedX,speedY]
*lineMaxLength 线条出现的最大长度 number
*lineColor 线条的颜色 array [0-255,0-255,0-255]
*eMaxLength 鼠标与圆之间的最大距离 number
*eState 当鼠标与圆点之间出现连线时不出现圆点间的连线 number 默认值false
*/
new FwhfPointLine(50,[0.5,1],['rgb(200,0,0)','rgb(0,200,0)','rgb(0,0,200)'],[-3,3],100,[222,116,159],150,false);
</script>

canvas实战之酷炫背景动画(五)相关推荐

  1. canvas实战之酷炫背景动画(二)

    系列文章 canvas实战之酷炫背景动画(一) canvas实战之酷炫背景动画(二) canvas实战之酷炫背景动画(三) canvas实战之酷炫背景动画(四) canvas实战之酷炫背景动画(五) ...

  2. canvas实战之酷炫背景动画(三)

    系列文章 canvas实战之酷炫背景动画(一) canvas实战之酷炫背景动画(二) canvas实战之酷炫背景动画(三) canvas实战之酷炫背景动画(四) canvas实战之酷炫背景动画(五) ...

  3. canvas实战之酷炫背景动画(一)

    系列文章 canvas实战之酷炫背景动画(一) canvas实战之酷炫背景动画(二) canvas实战之酷炫背景动画(三) canvas实战之酷炫背景动画(四) canvas实战之酷炫背景动画(五) ...

  4. canvas实战之酷炫背景动画(七)

    系列文章 canvas实战之酷炫背景动画(一) canvas实战之酷炫背景动画(二) canvas实战之酷炫背景动画(三) canvas实战之酷炫背景动画(四) canvas实战之酷炫背景动画(五) ...

  5. canvas实战之酷炫背景动画(四)

    系列文章 canvas实战之酷炫背景动画(一) canvas实战之酷炫背景动画(二) canvas实战之酷炫背景动画(三) canvas实战之酷炫背景动画(四) canvas实战之酷炫背景动画(五) ...

  6. canvas实战之酷炫背景动画(六)

    系列文章 canvas实战之酷炫背景动画(一) canvas实战之酷炫背景动画(二) canvas实战之酷炫背景动画(三) canvas实战之酷炫背景动画(四) canvas实战之酷炫背景动画(五) ...

  7. 便利贴--12{酷炫背景,小球随鼠标移动,可自由设置小球属性}

    便利贴--12{酷炫背景,小球随鼠标移动,可自由设置小球属性} html 资源下载 0积分 html 之前做的 拿出来分享下 <!DOCTYPE html> <html>< ...

  8. 一个精美的跳动小球—手把手教你用贝塞尔曲线实现一个酷炫跳动动画。

    一个精美的跳动小球-手把手教你用贝塞尔曲线实现一个酷炫跳动动画. 2017-08-07 BraveJoy 终端研发部 前言介绍 手把手教你用贝塞尔曲线实现一个精美的跳动的小球. 正文 效果展示: 说点 ...

  9. 直播App中Android酷炫礼物动画如何通过直播程序源码实现方案

    直播App中Android酷炫礼物动画如何通过直播程序源码实现方案 这个动画,如果输出成GIF的话,要3MB,尺寸是750*750.在上一篇文章中已经介绍过几种被否掉的方法,这里再稍作补充说明,如果使 ...

最新文章

  1. ORACLE 11g 数据库 java jdk版本匹配
  2. ip数据报首部校验和的计算
  3. 验证软件需求正确性的四个角度
  4. ASP进阶教程Ⅷ:数据库版本的留言簿
  5. 如何将MID音乐转换成MP3
  6. 密码编码学与网络安全讲的是什么
  7. 云计算机ppt模板,云服务云技术云计算PPT模板
  8. python数据分析模型建立_一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码)...
  9. C语言算法题:一只小蜜蜂...
  10. 如何制作一个自己的四足机器人
  11. 各大IT公司 技术博客汇总
  12. Java多态练习宠物喂食
  13. mysql不等于null和等于null的写法
  14. 平稳/非平稳信号举例
  15. inurl .php sid=,兄弟们现在还有那些好用的发外链的网站啊? - 搜外SEO问答
  16. linux里vnc如何使用,linux下vnc的使用
  17. (附源码)计算机毕业设计ssm超市会员积分管理系统
  18. 俄罗斯方块的生成方块
  19. 网络安全(黑客)常见术语
  20. wps怎么将字体嵌入文件_WPS文档技巧—自由给文档嵌入字体

热门文章

  1. linux切换主副屏,ubuntu设置主屏和副屏
  2. 国内外量子计算软件和量子计算语言
  3. 对于初学PS的你来说一定要注意的13个坏习惯!!
  4. 国际版ngrok出错的解决方法
  5. 阿里巴巴2020届秋招最后一班车 企业智能事业部 企业大脑技术部 2020届秋招 Java 开发工程师
  6. heic转换jpg软件有什么 怎么打开heic文件
  7. java的表白小程序
  8. UG 建模中任意截面三维剖视图的创建
  9. Tom Siebel 技术类书籍推荐
  10. 有号距离场(SDF)