首页前端开发HTML网站点击散开特效

网站点击散开特效

时间2023-04-21 22:54:01发布访客分类HTML浏览1413
导读:给你的网站添加鼠标点击散开特效效果代码将代码添加在您网站的 html 页面的 body 标签中任意位置即可<canvas id="fireworks" style="position: fixed; left: 0px; top: 0...

给你的网站添加鼠标点击散开特效

效果

代码

将代码添加在您网站的 html 页面的 body 标签中任意位置即可

canvas id="fireworks" style="position: fixed;
     left: 0px;
     top: 0px;
     pointer-events: none;
     z-index: 2147483647;
     width: 1920px;
     height: 151px;
    " width="3840" height="302">
    /canvas>
    
script type="text/javascript" src="https://cdn.jsdelivr.net/npm/animejs@3.0.1/lib/anime.min.js">
    /script>
    
script type="text/javascript">

    function updateCoords(e) {

        pointerX = (e.clientX || e.touches[0].clientX) - canvasEl.getBoundingClientRect().left,
            pointerY = e.clientY || e.touches[0].clientY - canvasEl.getBoundingClientRect().top
    }


    function setParticuleDirection(e) {
    
        var t = anime.random(0, 360) * Math.PI / 180,
            a = anime.random(50, 180),
            n = [-1, 1][anime.random(0, 1)] * a;

        return {

            x: e.x + n * Math.cos(t),
            y: e.y + n * Math.sin(t)
        }

    }


    function createParticule(e, t) {

        var a = {
}
    ;

        return a.x = e,
            a.y = t,
            a.color = colors[anime.random(0, colors.length - 1)],
            a.radius = anime.random(16, 32),
            a.endPos = setParticuleDirection(a),
            a.draw = function() {

                ctx.beginPath(),
                    ctx.arc(a.x, a.y, a.radius, 0, 2 * Math.PI, !0),
                    ctx.fillStyle = a.color,
                    ctx.fill()
            }
,
            a
    }


    function createCircle(e, t) {

        var a = {
}
    ;

        return a.x = e,
            a.y = t,
            a.color = "#F00",
            a.radius = .1,
            a.alpha = .5,
            a.lineWidth = 6,
            a.draw = function() {

                ctx.globalAlpha = a.alpha,
                    ctx.beginPath(),
                    ctx.arc(a.x, a.y, a.radius, 0, 2 * Math.PI, !0),
                    ctx.lineWidth = a.lineWidth,
                    ctx.strokeStyle = a.color,
                    ctx.stroke(),
                    ctx.globalAlpha = 1
            }
,
            a
    }


    function renderParticule(e) {
    
        for (var t = 0;
     t  e.animatables.length;
 t++)
            e.animatables[t].target.draw()
    }


    function animateParticules(e, t) {
    
        for (var a = createCircle(e, t), n = [], i = 0;
     i  numberOfParticules;
     i++)
            n.push(createParticule(e, t));

        anime.timeline().add({

            targets: n,
            x: function(e) {

                return e.endPos.x
            }
,
            y: function(e) {

                return e.endPos.y
            }
,
            radius: .1,
            duration: anime.random(1200, 1800),
            easing: "easeOutExpo",
            update: renderParticule
        }
).add({

            targets: a,
            radius: anime.random(80, 160),
            lineWidth: 0,
            alpha: {

                value: 0,
                easing: "linear",
                duration: anime.random(600, 800)
            }
,
            duration: anime.random(1200, 1800),
            easing: "easeOutExpo",
            update: renderParticule,
            offset: 0
        }
)
    }


    function debounce(fn, delay) {

        var timer
        return function() {

            var context = this
            var args = arguments
            clearTimeout(timer)
            timer = setTimeout(function() {

                fn.apply(context, args)
            }
, delay)
        }

    }
    

    var canvasEl = document.querySelector("#fireworks");

    if (canvasEl) {

        var ctx = canvasEl.getContext("2d"),
            numberOfParticules = 30,
            pointerX = 0,
            pointerY = 0,
            tap = "mousedown",
            colors = ["#FF1461", "#18FF92", "#5A87FF", "#FBF38C"],
            setCanvasSize = debounce(function() {

                canvasEl.width = 2 * window.innerWidth,
                    canvasEl.height = 2 * window.innerHeight,
                    canvasEl.style.width = window.innerWidth + "px",
                    canvasEl.style.height = window.innerHeight + "px",
                    canvasEl.getContext("2d").scale(2, 2)
            }
, 500),
            render = anime({

                duration: 1 / 0,
                update: function() {

                    ctx.clearRect(0, 0, canvasEl.width, canvasEl.height)
                }

            }
    );

        document.addEventListener(tap, function(e) {
    
                "sidebar" !== e.target.id &
    &
     "toggle-sidebar" !== e.target.id &
    &
     "A" !== e.target.nodeName &
    &
     "IMG" !== e.target.nodeName &
    &
 (render.play(),
                    updateCoords(e),
                    animateParticules(pointerX, pointerY))
            }
, !1),
            setCanvasSize(),

            window.addEventListener("resize", setCanvasSize, !1)
    }
    
/script>
    

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

html网站特效

若转载请注明出处: 网站点击散开特效
本文地址: https://pptw.com/jishu/4782.html
一图读懂 PHP 中 array_merge、array_replace 和 + 操作符之间的区别 PHP 关联数组操作太麻烦,试试这几个 WPJAM Basic 内置的数组处理函数

游客 回复需填写必要信息