为你的网站添加点击散开特效

为你的网站添加点击散开特效插图

将下面的代码插入你的网页js内,即可实现鼠标点击出现散开效果~不哔哔啦,show code~~~


<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>

 

郑重声明:帖子标题写有 【亲测】即能正常运行,帖子标题有 【原版】字样即原始版本自带有加密文件版本 限于标题长度字数限制问题,部分资源未注明开源情况均为原版文件(原版文件未做解密处理,但不影响使用)爱集码不会自己加密代码文件,源码仅供研究学习之用,请勿用于商业运营,商业运营请支持作者,购买正版,谢谢 特别提醒:本站所有下载资源均不包含技术支持和安装服务! 如需技术支持联系客服有偿解决,终身会员视情况而定,一般小问题免费解决。 重要提示:本站对于 Safari浏览器兼容不好,如出现下载按钮消失请换360或者QQ等第三方浏览器访问或下载。 免责申明:本站仅提供学习的平台,所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,并不承担任何法律责任,如果对您的版权或者利益造成损害,请提供相应的资质证明,我们将于3个工作日内予以删除。
资源猫 » 为你的网站添加点击散开特效

提供最优质的资源集合

资源猫 立即查看