(星星)跟随鼠标移动的效果.html(网上收集3)

<!DOCTYPE html>
<html lang="en">

<head>

</head>

<body>
<span class="js-cursor-container"></span>
<script>
    (function fairyDustCursor() {

        var possibleColors = ["#D61C59", "#E7D84B", "#1B8798"]
        var width = window.innerWidth;
        var height = window.innerHeight;
        var cursor = { x: width / 2, y: width / 2 };
        var particles = [];

        function init() {
            bindEvents();
            loop();
        }

        // Bind events that are needed
        function bindEvents() {
            document.addEventListener('mousemove', onMouseMove);
            window.addEventListener('resize', onWindowResize);
        }

        function onWindowResize(e) {
            width = window.innerWidth;
            height = window.innerHeight;
        }

        function onMouseMove(e) {
            cursor.x = e.clientX;
            cursor.y = e.clientY;

            addParticle(cursor.x, cursor.y, possibleColors[Math.floor(Math.random() * possibleColors.length)]);
        }

        function addParticle(x, y, color) {
            var particle = new Particle();
            particle.init(x, y, color);
            particles.push(particle);
        }

        function updateParticles() {

            // Updated
            for (var i = 0; i < particles.length; i++) {
                particles[i].update();
            }

            // Remove dead particles
            for (var i = particles.length - 1; i >= 0; i--) {
                if (particles[i].lifeSpan < 0) {
                    particles[i].die();
                    particles.splice(i, 1);
                }
            }

        }

        function loop() {
            requestAnimationFrame(loop);
            updateParticles();
        }

        /**
         * Particles
         */

        function Particle() {

            this.character = "*";
            this.lifeSpan = 120; //ms
            this.initialStyles = {
                "position": "fixed",
                "display": "inline-block",
                "top": "0px",
                "left": "0px",
                "pointerEvents": "none",
                "touch-action": "none",
                "z-index": "10000000",
                "fontSize": "25px",
                "will-change": "transform"
            };

            // Init, and set properties
            this.init = function (x, y, color) {

                this.velocity = {
                    x: (Math.random() < 0.5 ? -1 : 1) * (Math.random() / 2),
                    y: 1
                };

                this.position = { x: x + 10, y: y + 10 };
                this.initialStyles.color = color;

                this.element = document.createElement('span');
                this.element.innerHTML = this.character;
                applyProperties(this.element, this.initialStyles);
                this.update();

                document.querySelector('.js-cursor-container').appendChild(this.element);
            };

            this.update = function () {
                this.position.x += this.velocity.x;
                this.position.y += this.velocity.y;
                this.lifeSpan--;

                this.element.style.transform = "translate3d(" + this.position.x + "px," + this.position.y + "px, 0) scale(" + (this.lifeSpan / 120) + ")";
            }

            this.die = function () {
                this.element.parentNode.removeChild(this.element);
            }

        }

        /**
         * Utils
         */

        // Applies css `properties` to an element.
        function applyProperties(target, properties) {
            for (var key in properties) {
                target.style[key] = properties[key];
            }
        }

        if (!('ontouchstart' in window || navigator.msMaxTouchPoints)) init();
    })();
</script>
</body>

</html>

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>粒子随心动画</title>
    <script src="http://cdn.sucai8.cn/cdn/jquery/jquery-1.10.2.js"></script>
    <style>
        body {
            overflow: hidden;
            margin: 0;
        }

        .twitter:hover a {
            transform: rotate(-45deg) scale(1.05);
        }
        .twitter:hover i {
            color: #21c2ff;
        }
        .twitter a {
            bottom: -40px;
            right: -75px;
            transform: rotate(-45deg);
        }
        .twitter i {
            bottom: 7px;
            right: 7px;
            color: #00aced;
        }

        .social-icon a {
            position: absolute;
            background: white;
            color: white;
            box-shadow: -1px -1px 20px 0px rgba(0, 0, 0, 0.3);
            display: inline-block;
            width: 150px;
            height: 80px;
            transform-origin: 50% 50%;
            transition: 0.15s ease-out;
        }
        .social-icon i {
            position: absolute;
            pointer-events: none;
            z-index: 1000;
            transition: 0.15s ease-out;
        }

        .youtube:hover a {
            transform: rotate(45deg) scale(1.05);
        }
        .youtube:hover i {
            color: #ec4c44;
        }
        .youtube a {
            bottom: -40px;
            left: -75px;
            transform: rotate(45deg);
        }
        .youtube i {
            bottom: 7px;
            left: 7px;
            color: #e62117;
        }
    </style>
</head>
<body>
<canvas></canvas>

<script>
    "use strict";

    // Initial Setup
    var canvas = document.querySelector("canvas");
    var c = canvas.getContext("2d");

    canvas.width = innerWidth;
    canvas.height = innerHeight;

    // Variables
    var mouse = {
        x: innerWidth / 2,
        y: innerHeight / 2 - 80,
    };

    var colors = ["#00bdff", "#4d39ce", "#088eff"];

    // Event Listeners
    addEventListener("mousemove", function (event) {
        mouse.x = event.clientX;
        mouse.y = event.clientY;
    });

    addEventListener("resize", function () {
        canvas.width = innerWidth;
        canvas.height = innerHeight;

        init();
    });

    // Utility Functions
    function randomIntFromRange(min, max) {
        return Math.floor(Math.random() * (max - min + 1) + min);
    }

    function randomColor(colors) {
        return colors[Math.floor(Math.random() * colors.length)];
    }

    // Objects
    function Particle(x, y, radius, color) {
        var _this = this;

        var distance = randomIntFromRange(50, 120);
        this.x = x;
        this.y = y;
        this.radius = radius;
        this.color = color;
        this.radians = Math.random() * Math.PI * 2;
        this.velocity = 0.05;
        this.distanceFromCenter = {
            x: distance,
            y: distance,
        };
        this.prevDistanceFromCenter = {
            x: distance,
            y: distance,
        };
        this.lastMouse = { x: x, y: y };

        this.update = function () {
            var lastPoint = { x: _this.x, y: _this.y };
            // Move points over time
            _this.radians += _this.velocity;

            // Drag effect
            _this.lastMouse.x += (mouse.x - _this.lastMouse.x) * 0.05;
            _this.lastMouse.y += (mouse.y - _this.lastMouse.y) * 0.05;

            // Circular Motion
            _this.distanceFromCenter.x =
                _this.prevDistanceFromCenter.x + Math.sin(_this.radians) * 100;
            _this.distanceFromCenter.y =
                _this.prevDistanceFromCenter.x + Math.sin(_this.radians) * 100;

            _this.x =
                _this.lastMouse.x +
                Math.cos(_this.radians) * _this.distanceFromCenter.x;
            _this.y =
                _this.lastMouse.y +
                Math.sin(_this.radians) * _this.distanceFromCenter.y;

            _this.draw(lastPoint);
        };

        this.draw = function (lastPoint) {
            c.beginPath();
            c.strokeStyle = _this.color;
            c.lineWidth = _this.radius;
            c.moveTo(lastPoint.x, lastPoint.y);
            c.lineTo(_this.x, _this.y);
            c.stroke();
            c.closePath();
        };
    }

    // Implementation
    var particles = undefined;
    function init() {
        particles = [];

        for (var i = 0; i < 50; i++) {
            var radius = Math.random() * 2 + 1;
            particles.push(
                new Particle(
                    canvas.width / 2,
                    canvas.height / 2,
                    radius,
                    randomColor(colors)
                )
            );
        }
    }

    // Animation Loop
    function animate() {
        requestAnimationFrame(animate);
        c.fillStyle = "rgba(255, 255, 255, 0.05)";
        c.fillRect(0, 0, canvas.width, canvas.height);

        particles.forEach(function (particle) {
            particle.update();
        });
    }

    init();
    animate();
</script>
</body>
</html>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
    <title>star</title>
    <script type="text/javascript">
        window.onload = function () {
            C = Math.cos; // cache Math objects
            S = Math.sin;
            U = 0;
            w = window;
            j = document;
            d = j.getElementById("c");
            c = d.getContext("2d");
            W = d.width = w.innerWidth;
            H = d.height = w.innerHeight;
            c.fillRect(0, 0, W, H); // resize <canvas> and draw black rect (default)
            c.globalCompositeOperation = "lighter";  // switch to additive color application
            c.lineWidth = 0.2;
            c.lineCap = "round";
            var bool = 0,
                t = 0; // theta
            d.onmousemove = function (e) {
                if(window.T) {
                    if(D==9) { D=Math.random()*15; f(1); }
                    clearTimeout(T);
                }
                X = e.pageX; // grab mouse pixel coords
                Y = e.pageY;
                a=0; // previous coord.x
                b=0; // previous coord.y
                A = X, // original coord.x
                    B = Y; // original coord.y
                R=(e.pageX/W * 999>>0)/999;
                r=(e.pageY/H * 999>>0)/999;
                U=e.pageX/H * 360 >>0;
                D=9;
                g = 360 * Math.PI / 180;
                T = setInterval(f = function (e) { // start looping spectrum
                    c.save();
                    c.globalCompositeOperation = "source-over"; // switch to additive color application
                    if(e!=1) {
                        c.fillStyle = "rgba(0,0,0,0.02)";
                        c.fillRect(0, 0, W, H); // resize <canvas> and draw black rect (default)
                    }
                    c.restore();
                    i = 25; while(i --) {
                        c.beginPath();
                        if(D > 450 || bool) { // decrease diameter
                            if(!bool) { // has hit maximum
                                bool = 1;
                            }
                            if(D < 0.1) { // has hit minimum
                                bool = 0;
                            }
                            t -= g; // decrease theta
                            D -= 0.1; // decrease size
                        }
                        if(!bool) {
                            t += g; // increase theta
                            D += 0.1; // increase size
                        }
                        q = (R / r - 1) * t; // create hypotrochoid from current mouse position, and setup variables (see: http://en.wikipedia.org/wiki/Hypotrochoid)
                        x = (R - r) * C(t) + D * C(q) + (A + (X - A) * (i / 25)) + (r - R); // center on xy coords
                        y = (R - r) * S(t) - D * S(q) + (B + (Y - B) * (i / 25));
                        if (a) { // draw once two points are set
                            c.moveTo(a, b);
                            c.lineTo(x, y)
                        }
                        c.strokeStyle = "hsla(" + (U % 360) + ",100%,50%,0.75)"; // draw rainbow hypotrochoid
                        c.stroke();
                        a = x; // set previous coord.x
                        b = y; // set previous coord.y
                    }
                    U -= 0.5; // increment hue
                    A = X; // set original coord.x
                    B = Y; // set original coord.y
                }, 16);
            }
            j.onkeydown = function(e) { a=b=0; R += 0.05 }
            d.onmousemove({pageX:300, pageY:290})
        }


    </script>
</head>

<body style="margin:0px;padding:0px;width:100%;height:100%;overflow:hidden;">
<canvas id="c"></canvas>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一百减一是零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值