zoukankan      html  css  js  c++  java
  • 网页飘雪js特效

    网页飘雪js特效

    非常棒的一个特效,让网页看起更加漂亮,美化网页必备

    1. 在页面中加入css,为了测试有效果,设置了body的css样式
    		body {
                 100%;
                height: 100%;
                background-color: #5569ae;
                overflow: hidden;
            }
            .snow-container {
                position: fixed;
                top: 0;
                left: 0;
                 100%;
                height: 100%;
                pointer-events: none;
                z-index: 100001;
            }
    
    1. 网页加上如下class的div
    <div class="snow-container"></div>
    
    1. 加入js
    <script src="js/jquery-2.1.1.min.js"></script>
    <script type="text/javascript" src="js/three.js"></script>
    <script type="text/javascript">
        function randomRange(t, i) {
            return Math.random() * (i - t) + t
        }
        Particle3D = function (t) {
            THREE.Particle.call(this, t), this.velocity = new THREE.Vector3(0, -2, 0), this.velocity.rotateX(randomRange(-45, 45)), this.velocity.rotateY(randomRange(0, 360)), this.gravity = new THREE.Vector3(0, 0, 0), this.drag = 1
        }, Particle3D.prototype = new THREE.Particle, Particle3D.prototype.constructor = Particle3D, Particle3D.prototype.updatePhysics = function () {
            this.velocity.multiplyScalar(this.drag), this.velocity.addSelf(this.gravity), this.position.addSelf(this.velocity)
        };
        var TO_RADIANS = Math.PI / 180;
        THREE.Vector3.prototype.rotateY = function (t) {
            cosRY = Math.cos(t * TO_RADIANS), sinRY = Math.sin(t * TO_RADIANS);
            var i = this.z, o = this.x;
            this.x = o * cosRY + i * sinRY, this.z = o * -sinRY + i * cosRY
        }, THREE.Vector3.prototype.rotateX = function (t) {
            cosRY = Math.cos(t * TO_RADIANS), sinRY = Math.sin(t * TO_RADIANS);
            var i = this.z, o = this.y;
            this.y = o * cosRY + i * sinRY, this.z = o * -sinRY + i * cosRY
        }, THREE.Vector3.prototype.rotateZ = function (t) {
            cosRY = Math.cos(t * TO_RADIANS), sinRY = Math.sin(t * TO_RADIANS);
            var i = this.x, o = this.y;
            this.y = o * cosRY + i * sinRY, this.x = o * -sinRY + i * cosRY
        };
        $(function () {
            var container = document.querySelector(".snow-container");
            if (/MSIE 6|MSIE 7|MSIE 8/.test(navigator.userAgent)) {
                return
            } else {
                if (/MSIE 9|MSIE 10/.test(navigator.userAgent)) {
                    $(container).css("height", $(window).height()).bind("click", function () {
                        $(this).fadeOut(1000, function () {
                            $(this).remove()
                        })
                    })
                }
            }
            var containerWidth = $(container).width();
            var containerHeight = $(container).height();
            var particle;
            var camera;
            var scene;
            var renderer;
            var mouseX = 0;
            var mouseY = 0;
            var windowHalfX = window.innerWidth / 2;
            var windowHalfY = window.innerHeight / 2;
            var particles = [];
            var particleImage = new Image();
            particleImage.src = "img/snow.png";
            var snowNum = 500;
    
            function init() {
                camera = new THREE.PerspectiveCamera(75, containerWidth / containerHeight, 1, 10000);
                camera.position.z = 1000;
                scene = new THREE.Scene();
                scene.add(camera);
                renderer = new THREE.CanvasRenderer();
                renderer.setSize(containerWidth, containerHeight);
                var material = new THREE.ParticleBasicMaterial({map: new THREE.Texture(particleImage)});
                for (var i = 0; i < snowNum; i++) {
                    particle = new Particle3D(material);
                    particle.position.x = Math.random() * 2000 - 1000;
                    particle.position.y = Math.random() * 2000 - 1000;
                    particle.position.z = Math.random() * 2000 - 1000;
                    particle.scale.x = particle.scale.y = 1;
                    scene.add(particle);
                    particles.push(particle)
                }
                container.appendChild(renderer.domElement);
                document.addEventListener("mousemove", onDocumentMouseMove, false);
                document.addEventListener("touchstart", onDocumentTouchStart, false);
                document.addEventListener("touchmove", onDocumentTouchMove, false);
                setInterval(loop, 1000 / 40)
            }
    
            function onDocumentMouseMove(event) {
                mouseX = event.clientX - windowHalfX;
                mouseY = event.clientY - windowHalfY
            }
    
            function onDocumentTouchStart(event) {
                if (event.touches.length == 1) {
                    event.preventDefault();
                    mouseX = event.touches[0].pageX - windowHalfX;
                    mouseY = event.touches[0].pageY - windowHalfY
                }
            }
    
            function onDocumentTouchMove(event) {
                if (event.touches.length == 1) {
                    event.preventDefault();
                    mouseX = event.touches[0].pageX - windowHalfX;
                    mouseY = event.touches[0].pageY - windowHalfY
                }
            }
    
            function loop() {
                for (var i = 0; i < particles.length; i++) {
                    var particle = particles[i];
                    particle.updatePhysics();
                    with (particle.position) {
                        if (y < -1000) {
                            y += 2000
                        }
                        if (x > 1000) {
                            x -= 2000
                        } else {
                            if (x < -1000) {
                                x += 2000
                            }
                        }
                        if (z > 1000) {
                            z -= 2000
                        } else {
                            if (z < -1000) {
                                z += 2000
                            }
                        }
                    }
                }
                camera.position.x += (mouseX - camera.position.x) * 0.005;
                camera.position.y += (-mouseY - camera.position.y) * 0.005;
                camera.lookAt(scene.position);
                renderer.render(scene, camera)
            }
    
            init()
        });
    </script>
    

    注意:以上的js 51行需要加入一张雪花的图片的路径

    1. 网页源码资料网盘链接:
      链接:https://pan.baidu.com/s/1T5aSlU1-OUJBzabceda_pA

      提取码:iprm

    版权声明:本文为博主原创文章,转载请附上博文链接!
  • 相关阅读:
    当select框变化时 获取select框中被选中的值
    表字段添加、删除、修改
    初步了解JSONP
    通过 Chrome Workspace 调试本地项目(修改样式时及时保存)
    XAMPP PHP redis 扩展
    在右键菜单中加入 用...打开
    PHP unset 后恢复数组索引
    LINUX VI 常用命令
    排行榜 文字向上滚动效果
    jq 获取除节假日与周六日 外的日期 和 星期
  • 原文地址:https://www.cnblogs.com/zq98/p/15027887.html
Copyright © 2011-2022 走看看