美文网首页
仿知乎粒子动画背景

仿知乎粒子动画背景

作者: 眠九 | 来源:发表于2018-01-17 09:33 被阅读0次
image.png

在项目中,遇见的一个功能是做搜索任务,页面初始全局仅一个搜索框在正中间,才想到要用粒子光效背景来稍微点缀一下,在网上找到的其他方法,再融合一下。

全局代码如下:
html

<canvas id="bg"></canvas>

js

<script>
    initBg();
    function initBg(){
        var WIDTH = window.innerWidth,HEIGHT = window.innerHeight,POINT = 35;//界面上点的个数
        var canvas = document.getElementById("bg");
        canvas.width = WIDTH;
        canvas.height = HEIGHT;
        var context = canvas.getContext("2d");
        context.strokeStyle = "rgba(33,133,208,0.8)";
        context.strokeWidth = 1;
        context.fillStyle = "rgba(33,133,208,0.2)";
        var circleArr = [];
        var Line = function(x,y,_x,_y,o){
            this.beginX = x;
            this.beginY = y;
            this.closeX = _x;
            this.closeY = _y;
            this.o = o;
        };
        var Circle = function(x,y,r,moveX,moveY){
            this.x = x;
            this.y = y;
            this.r = r;
            this.moveX = moveX;
            this.moveY = moveY;
        };
        var num = function(max,_min){
            var min = arguments[1]||0;
            return Math.floor(Math.random()*(max-min+1)+min);
        };
        var drawCircle = function(ctx,x,y,r,moveX,moveY){
            var circle = new Circle(x,y,r,moveX,moveY);
            ctx.beginPath();
            ctx.arc(circle.x,circle.y,circle.r,0,2*Math.PI);
            ctx.closePath();
            ctx.fill();
            return circle;
        };
        var drawLine = function(ctx,x,y,_x,_y,o){
            var line = new Line(x,y,_x,_y,o);
            ctx.beginPath();
            ctx.strokeStyle = "rgba(33,133,208,"+o+")";
            ctx.moveTo(line.beginX,line.beginY);
            ctx.lineTo(line.closeX,line.closeY);
            ctx.closePath();
            ctx.stroke();
        };
        var draw = function(){
            context.clearRect(0,0,canvas.width,canvas.height);
            for(var i = 0;i < POINT;i++){
                drawCircle(context,circleArr[i].x,circleArr[i].y,circleArr[i].r);
            }
            for(var i = 0;i <  POINT;i++){
                for(var j = 0;j < POINT;j++){
                    if(i + j < POINT){
                        var A = Math.abs(circleArr[i+j].x - circleArr[i].x);
                        var B = Math.abs(circleArr[i+j].y - circleArr[i].y);
                        var lineLength = Math.sqrt(A*A + B*B);
                        var C = 1/lineLength*7-0.009;
                        var lineOpacity = C > 0.3?0.3:C;
                        if(lineOpacity > 0){
                            drawLine(context,circleArr[i].x,circleArr[i].y,circleArr[i+j].x,circleArr[i+j].y,lineOpacity);
                        }
                    }
                }
            }
        };
        var init = function(){
            circleArr = [];
            for(var i = 0;i < POINT;i++){
                circleArr.push(drawCircle(context,num(WIDTH),num(HEIGHT),num(15,2),num(10,-10)/40,num(10,-10)/40));
            }
            draw();
        };
        init();
        var interval = setInterval(function(){
            for(var i = 0;i < POINT;i++){
                var cir = circleArr[i];
                cir.x += cir.moveX;
                cir.y += cir.moveY;
                if(cir.x > WIDTH) cir.x = 0;
                else if(cir.x < 0) cir.x = WIDTH;
                if(cir.y > HEIGHT) cir.y = 0;
                else if(cir.y < 0) cir.y = HEIGHT;
            }
            draw();
        });
    }
</script>

相关文章

  • 仿知乎粒子动画背景

    在项目中,遇见的一个功能是做搜索任务,页面初始全局仅一个搜索框在正中间,才想到要用粒子光效背景来稍微点缀一下,在网...

  • 粒子动画背景实现

    在线Demo:http://isweety.me/particle-bg/ 效果 :) 不带连线效果: 带连线的效...

  • Flutter入门实战—高仿知乎日报

    Flutter版高仿知乎日报 高仿知乎日报,UI基本和Android端的知乎日报一致。新手小白的练习demo,代码...

  • Swift仿知乎tabBar隐藏显示动画

    给UIViewController单独的写了个类扩展 使用示例 GitHub下载demo

  • ToolBar仿知乎

    需要做一个类似于知乎的效果,真的是踩了无数坑。 xml中 Activity中private Toolbar tbT...

  • 仿知乎广告

    仿知乎的广告栏学习 思路自定义View 继承自imgView然后通过canvas 对图片进行局部绘制进行局部的绘制...

  • Android 仿知乎创意广告 广告还能这么玩?

    Android 仿知乎创意广告 广告还能这么玩?

  • 网站特效

    特效一 网站背景粒子动画 实现方法很简单引入js 即可 github地址:https://github.com/h...

  • 仿知乎广告效果

    这篇文章介绍一个仿知乎广告效果。 先上效果图 具体表现在一个recycleView中的某一个item插入一张自己的...

  • 仿知乎裁剪头像

    最近刚做了一个新的app,里面有裁剪头像的需求,于是仿照这知乎的效果自己写了一个裁剪图片的控制器,支持设置裁剪区域...

网友评论

      本文标题:仿知乎粒子动画背景

      本文链接:https://www.haomeiwen.com/subject/hleyoxtx.html