zoukankan      html  css  js  c++  java
  • JS实现粒子拖拽吸附特效-sunziren

      特效的效果就如同本页面的背景一样,有粒子随机移动、连结,甚至是吸附到你的鼠标周围。


      代码如下,只要引入JQuery和一小段JS代码就可以了。本质上用到了Html5的canvas

    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script>
        $(function(){
          function n(n,e,t){
             return n.getAttribute(e)||t
           }
           function e(n){
             return document.getElementsByTagName(n)
           }
           function t(){
             var t=e("script"),o=t.length,i=t[o-1];
              return{l:o,z:n(i,"zIndex",-1),o:n(i,"opacity",.6),c:n(i,"color","46,139,87"),n:n(i,"count",150)}
           }
           function o(){
             a=m.width=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,
              c=m.height=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight
           }
           function i(){
             r.clearRect(0,0,a,c);
              var n,e,t,o,m,l;
              s.forEach(function(i,x){
                for(i.x+=i.xa,i.y+=i.ya,i.xa*=i.x>a||i.x<0?-1:1,i.ya*=i.y>c||i.y<0?-1:1,r.fillRect(i.x-.5,i.y-.5,1,1),e=x+1;e<u.length;e++)n=u[e],
                   null!==n.x&&null!==n.y&&(o=i.x-n.x,m=i.y-n.y,
                   l=o*o+m*m,l<n.max&&(n===y&&l>=n.max/2&&(i.x-=.03*o,i.y-=.03*m),
                    t=(n.max-l)/n.max,r.beginPath(),r.lineWidth=t/2,r.strokeStyle="rgba("+d.c+","+(t+.2)+")",r.moveTo(i.x,i.y),r.lineTo(n.x,n.y),r.stroke()))
              }),
              x(i)
        }
        var a,c,u,m=document.createElement("canvas"),d=t(),l="c_n"+d.l,r=m.getContext("2d"),
           x=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||
        function(n){
          window.setTimeout(n,1e3/45)
        },
        w=Math.random,y={x:null,y:null,max:2e4};m.id=l,m.style.cssText="position:fixed;top:0;left:0;z-index:"+d.z+";opacity:"+d.o,e("body")[0].appendChild(m),o(),window.onresize=o,
        window.onmousemove=function(n){
          n=n||window.event,y.x=n.clientX,y.y=n.clientY
        },
        window.onmouseout=function(){
          y.x=null,y.y=null
        };
          for(var s=[],f=0;d.n>f;f++){
              var h=w()*a,g=w()*c,v=2*w()-1,p=2*w()-1;s.push({x:h,y:g,xa:v,ya:p,max:6e3})
           }
          u=s.concat([y]),
          setTimeout(function(){i()},100)
        });
    </script>       

      在这里我声明一下,内容非原创,这个也是我看到效果非常有意思,自己在百度上找的。因为百度上太多,已经不知道第一个是谁写的了。

      所以转载本文可以不用注明出处。

  • 相关阅读:
    hdu 5101 Select
    hdu 5100 Chessboard
    cf B. I.O.U.
    cf C. Inna and Dima
    cf B. Inna and Nine
    cf C. Counting Kangaroos is Fun
    Radar Installation 贪心
    spfa模板
    Sequence
    棋盘问题
  • 原文地址:https://www.cnblogs.com/sunziren/p/10287969.html
Copyright © 2011-2022 走看看