zoukankan      html  css  js  c++  java
  • JS之鼠标跟随

    需求:点击页面的任何地方,图片跟随鼠标移动到点击位置
    思路:获取鼠标在页面中的位置,然后图片缓慢运动到鼠标点击的位置(兼容ie6,7做pageY和pageX)

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
        <title></title>
    <style type="text/css">
    body{
        height: 5000px;
    }
    img{
        position: absolute;
        padding: 10px 0;
        cursor: pointer;
        border:1px solid #ccc;
    }
    </style>
    </head>
    <body>
    <img src="../images/img.jpg" width="100"/>
    <script type="text/javascript">
    //需求:点击页面的任何地方,图片跟随鼠标移动到点击位置
    //思路:获取鼠标在页面中的位置,然后图片缓慢运动到鼠标点击的位置
    //兼容ie6,7做pageY和pageX
    //原理:鼠标在页面的位置 = 被卷去的部分 + 可视区域部分
    //步骤:
    //1.老三步
    //2.获取鼠标在页面的位置
    //3.利用缓动原理,慢慢的运动到指定位置(包括左右和上下)
    
    //获取相关元素并绑定事件
    var img = document.getElementsByTagName("img")[0];
    var timer =null;
    var targetx = 0;
    var targety = 0;
    var leaderx = 0;
    var leadery = 0;
    //给整个文档绑定点击事件获取鼠标的位置
    document.onclick = function(event){
        //兼容获取事件对象
        event = event || window.event;
        //鼠标在页面的位置 = 被卷去的部分+可视区域部分
        var pagex = event.pageX || scroll().left + event.clientX;
        var pagey = event.pageY || scroll().top + event.clientY;
        targety = pagey-30;
        targetx = pagex-50;
        //利用缓动动画
        //要用定时器,先清定时器
        clearInterval(timer);
        timer = setInterval(function(){
            //为盒子的位置获取X值
            leaderx = img.offsetLeft;
            //获取步长
            var stepx = (targetx - leaderx)/10;
            //二次处理步长
            stepx = stepx>0?Math.ceil(stepx):Math.floor(stepx);
            leaderx =leaderx +stepx;
            //赋值
            img.style.left = leaderx +"px";
    
            //为盒子的位置获取Y值
            leadery = img.offsetTop;
            //获取步长
            var stepy = (targety - leadery)/10;
            //二次获取步长
            stepy= stepy>0?Math.ceil(stepy):Math.floor(stepy);
            leadery = leadery +stepy; 
            //赋值
            img.style.top = leadery + "px";
    
            //清除定时器
            if (Math.abs(targety - img.offsetTop)<=Math.abs(stepy)&&Math.abs(targetx-img.offsetLeft)<=Math.abs(stepx)) {
                img.style.top = targety + "px";
                img.style.left = targetx +"px";
                clearInterval(timer);
            }
        },30);
    }
    
    </script>
    </body>
    </html>
  • 相关阅读:
    PyQt作品 – PingTester – 多点Ping测试工具
    关于和技术人员交流的一二三
    Pyjamas Python Javascript Compiler, Desktop Widget Set and RIA Web Framework
    Hybrid Qt applications with PySide and Django
    pyjamas build AJAX apps in Python (like Google did for Java)
    PyQt 维基百科,自由的百科全书
    InfoQ:请问为什么仍要选择Java来处理后端的工作?
    Eric+PyQt打造完美的Python集成开发环境
    python select module select method introduce
    GUI Programming with Python: QT Edition
  • 原文地址:https://www.cnblogs.com/creazybeauty/p/8177310.html
Copyright © 2011-2022 走看看