效果(源码在最后):

在这里插入图片描述

实现:

1.定义标签:

 <h1>北极光之夜</h1>
 <canvas id="draw" style=" position: fixed; display: block;">  
			当前浏览器不支持Canvas,请更换浏览器后再试
 </canvas>

2. 文字的基本样式:

h1{
   position: absolute;
   top: 50%;
   left: 50%;
   transform: translate(-50%,-50%);
   font-size: 5em;
   font-family: 'fangsong';
   color: rgb(38, 205, 247);
  }

top: 50%;
left: 50%;
transform: translate(-50%,-50%); 居中对齐
3. js部分,详细看注释 :

<script>
  /* 首先获取canvas画布 */
  var canvas = document.querySelector("#draw");
  var yuan = canvas.getContext("2d");  
  /* 绑定窗口大小发生改变事件,让canvas随时铺满浏览器可视区 */
   window.onresize=resizeCanvas;
  function resizeCanvas(){
   canvas.width=window.innerWidth;
   canvas.height=window.innerHeight;
  }
  resizeCanvas(); 

  /* 定义数组,存下面触发移动事件时产生的小圆 */
  var arr = [];
  
  /* 绘制小圆形的方法,x与y是初始位置,r是圆半径 */
  function circle (x,y,r){
   this.x=x;
   this.y=y;
   this.r=r;
   /* 得一个随机颜色 */
   this.color = `rgb(${255*Math.random()},${255*Math.random()},${255*Math.random()})`
   /* 圆的移动方向,random函数为随机返回一个0.0到1.0的数,x可得随机正负数,y为随机正数 */
   this.xZou = parseInt(Math.random()*10-5);
   this.yZou = parseInt(Math.random()*10);  
   /* 向arr数组末尾添加这个元素 */ 
   arr.push(this);
  }

  /* 更新圆形的方法 */
   circle.prototype.updated = function() {
    /* x和y增加,呈现圆形一直走 */
   this.x = this.x   this.xZou ;
   this.y = this.y   this.yZou ;
   /* 半径慢慢减少 */
   this.r = this.r - 0.1 ;
   /* 当半径小于1清除这个圆 */
   if(this.r<0){
    this.remove();
   }
   }
   /* 删除小圆的函数 */
   circle.prototype.remove = function (){
    /* 遍历数组,找到和调用这个函数相同的圆后用splice函数删除 */
   for(let i=0;i<arr.length;i  ){
     if(this==arr[i])
     {
      arr.splice(i,1);
     }
   }
  }
   /* 渲染小圆 */
   circle.prototype.render = function(){

   yuan.beginPath();
   yuan.arc(this.x,this.y,this.r,0,2*3.14,false);
   yuan.fillStyle = this.color;
   yuan.fill();
   }
   /* 给画布绑定鼠标经过事件 */  
   canvas.addEventListener('mousemove',function(e){
    /* 传入x,y,r。offsetX距离左侧距离,.., */
   new circle(e.offsetX,e.offsetY,Math.random()*15); 
   })

    /* 定时器渲染小圆,开始动画 ,30毫秒一次 */
   setInterval(function(){
     /* 清屏 */
    yuan.clearRect(0,0,canvas.width,canvas.height);
    /* 循环数组,给每个小圆更新和渲染 */
    for(let i=0;i<arr.length;i  ){
     /* 更新 */
     arr[i].updated();
     /* 如果浏览器支持,则渲染 */
     if(arr[i].render()){
      arr[i].render();
     }
     
    }

   },30)

 </script>

canvas链接
splice()方法链接
random()方法链接
push()方法链接
resize事件链接

完整源码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <style>
  *{
   margin: 0;
   padding: 0;
   box-sizing: border-box;
  }
  
  body{
   background-color: rgb(72, 75, 122);
  }
  
  h1{
   position: absolute;
   top: 50%;
   left: 50%;
   transform: translate(-50%,-50%);
   font-size: 5em;
   font-family: 'fangsong';
   color: rgb(38, 205, 247);
  }
  
 </style>
</head>
<body>
 
  <h1>北极光之夜</h1>

 <canvas id="draw" style=" position: fixed; display: block;">  
			当前浏览器不支持Canvas,请更换浏览器后再试
 </canvas>

 <script>
  /* 首先获取canvas画布 */
  var canvas = document.querySelector("#draw");
  var yuan = canvas.getContext("2d");  
  /* 绑定窗口大小发生改变事件,让canvas随时铺满浏览器可视区 */
   window.onresize=resizeCanvas;
  function resizeCanvas(){
   canvas.width=window.innerWidth;
   canvas.height=window.innerHeight;
  }
  resizeCanvas(); 

  /* 定义数组,存下面触发移动事件时产生的小圆 */
  var arr = [];
  
  /* 绘制小圆形的方法,x与y是初始位置,r是圆半径 */
  function circle (x,y,r){
   this.x=x;
   this.y=y;
   this.r=r;
   /* 得一个随机颜色 */
   this.color = `rgb(${255*Math.random()},${255*Math.random()},${255*Math.random()})`
   /* 圆的移动方向,random函数为随机返回一个0.0到1.0的数,x可得随机正负数,y为随机正数 */
   this.xZou = parseInt(Math.random()*10-5);
   this.yZou = parseInt(Math.random()*10);  
   /* 向arr数组末尾添加这个元素 */ 
   arr.push(this);
  }

  /* 更新圆形的方法 */
   circle.prototype.updated = function() {
    /* x和y增加,呈现圆形一直走 */
   this.x = this.x   this.xZou ;
   this.y = this.y   this.yZou ;
   /* 半径慢慢减少 */
   this.r = this.r - 0.1 ;
   /* 当半径小于1清除这个圆 */
   if(this.r<0){
    this.remove();
   }
   }
   /* 删除小圆的函数 */
   circle.prototype.remove = function (){
    /* 遍历数组,找到和调用这个函数相同的圆后用splice函数删除 */
   for(let i=0;i<arr.length;i  ){
     if(this==arr[i])
     {
      arr.splice(i,1);
     }
   }
  }
   /* 渲染小圆 */
   circle.prototype.render = function(){

   yuan.beginPath();
   yuan.arc(this.x,this.y,this.r,0,2*3.14,false);
   yuan.fillStyle = this.color;
   yuan.fill();
   }
   /* 给画布绑定鼠标经过事件 */  
   canvas.addEventListener('mousemove',function(e){
    /* 传入x,y,r。offsetX距离左侧距离,.., */
   new circle(e.offsetX,e.offsetY,Math.random()*15); 
   })

    /* 定时器渲染小圆,开始动画 ,30毫秒一次 */
   setInterval(function(){
     /* 清屏 */
    yuan.clearRect(0,0,canvas.width,canvas.height);
    /* 循环数组,给每个小圆更新和渲染 */
    for(let i=0;i<arr.length;i  ){
     /* 更新 */
     arr[i].updated();
     /* 如果浏览器支持,则渲染 */
     if(arr[i].render()){
      arr[i].render();
     }
     
    }

   },30)

 </script>
</body>
</html>

其它:

今日三省吾身:安逸的生活没意思,充满挑战,取得胜利,才是生命真谛。

到此这篇关于html css js实现canvas跟随鼠标的小圆特效源码的文章就介绍到这了,更多相关canvas跟随鼠标的小圆内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

html+css+js实现canvas跟随鼠标的小圆特效源码的更多相关文章

  1. 微信小程序canvas实现水平、垂直居中效果

    这篇文章主要介绍了小程序中canvas实现水平、垂直居中效果,本文图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. H5最强接口之canvas实现动态图形功能

    这篇文章主要介绍了H5最强接口之canvas实现动态图形功能,需要的朋友可以参考下

  3. Canvas高级路径操作之拖拽对象的实现

    这篇文章主要介绍了Canvas高级路径操作之拖拽对象的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. canvas像素点操作之视频绿幕抠图

    这篇文章主要介绍了canvas像素点操作之视频绿幕抠图的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. html5利用canvas实现颜色容差抠图功能

    这篇文章主要介绍了html5利用canvas实现颜色容差抠图功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  6. canvas绘制视频封面的方法

    这篇文章主要介绍了canvas绘制视频封面的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. HTML实现代码雨源码及效果示例

    这篇文章主要介绍了HTML实现代码雨源码及效果示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  8. 详解使用双缓存解决Canvas clearRect引起的闪屏问题

    这篇文章主要介绍了详解使用双缓存解决Canvas clearRect引起的闪屏问题的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. canvas实现按住鼠标移动绘制出轨迹的示例代码

    本篇文章主要介绍了canvas实现按住鼠标移动绘制出轨迹的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. 用canvas做一个DVD待机动画的实现代码

    这篇文章主要介绍了用canvas做一个DVD待机动画的实现代码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部