zoukankan      html  css  js  c++  java
  • 【前端】javascript实现鼠标跟随特效

    实现效果:

    实现代码:

    <!DOCTYPE html>
    <html>
    <head>
    	<title>鼠标跟随</title>
    	<meta charset="utf-8">
    	<style type="text/css">
    		body{
    			height: 5000px;
    		}
    		div{
    			position: absolute;
    			border: 1px solid #ccc;
    			cursor: pointer;
    			 100px;
    			height: 100px;
    			background-color: #03c03c;
    			opacity: 0.8;
    		}
    	</style>
    </head>
    <body>
    <div></div>
    <script type="text/javascript" src="myScroll.js"></script>
    <script type="text/javascript">
    	// 鼠标跟随
    	// pageY和pageX的ie67ie兼容写法
    	// 在页面的位置 = 看得见的 + 看不见的
    	// pageY/pageX = event.clientY/clientX + scroll().top/scroll().left
    	var obj = document.getElementsByTagName("div")[0];
    	var timer = null;
    	var targetX = 0,
    		targetY = 0,
    		leaderX = 0,
    		leaderY = 0;
    
    	// 给整个文档绑定点击事件获取鼠标位置
    	document.onclick = function(event){
    		// 兼容获取事件对象
    		event = event || window.event;
    		// 鼠标在页面的位置 = 被卷去的部分 + 可视区域部分
    		var pageY = event.pageY || scroll().top + event.clientY;
    		var pageX = event.pageX || scroll().left + event.clientX;
    		targetY = pageY - obj.offsetHeight/2;
    		targetX = pageX - obj.offsetWidth/2;
    
    		// 清除定时器
    		clearInterval(timer);
    		timer = setInterval(function(){
    			// X,先左右,后上下
    			// 为盒子的位置获取值
    			leaderX = obj.offsetLeft;
    			// 获取步长
    			var stepX = (targetX - leaderX)/10;
    			// 二次处理步长
    			stepX = stepX > 0 ? Math.ceil(stepX) : Math.floor(stepX);
    			leaderX = leaderX + stepX;
    			// 赋值
    			obj.style.left = leaderX + "px";
    			// Y
    			leaderY = obj.offsetTop;
    			var stepY = (targetY - leaderY)/10;
    			stepY = stepY > 0 ? Math.ceil(stepY) : Math.floor(stepY);
    			leaderY = leaderY + stepY;
    			obj.style.top = leaderY + "px";
    		}, 30);
    	}
    </script>
    </body>
    </html>
    

      myScroll.js

    function scroll() {  // 开始封装自己的scrollTop
        if(window.pageYOffset !== undefined) {  // ie9+ 高版本浏览器
            // 因为 window.pageYOffset 默认的是0,所以需要判断
            return {
                left: window.pageXOffset,
                top: window.pageYOffset
            }
        }
        else if(document.compatMode === "CSS1Compat") {// 标准浏览器,来判断有没有声明DTD
            return {
                left: document.documentElement.scrollLeft,
                top: document.documentElement.scrollTop
            }
        }
        return {// 未声明 DTD
            left: document.body.scrollLeft,
            top: document.body.scrollTop
        }
    }
    

      

  • 相关阅读:
    Java中sleep方法和wait的详细区别
    判断一个字符串中出现次数最多的字符,统计这个次数
    截取字符串abcdefg的efg
    关于正则
    css 的清0
    关于alert
    新感知,可以创建自定义标签
    JS的组成部分
    把字符串首字母变成大写
    排序方法两两对比
  • 原文地址:https://www.cnblogs.com/dragonir/p/7745386.html
Copyright © 2011-2022 走看看