• 百度拖拽(鼠标事件)


    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>百度拖拽</title>
        <style>
            *{
                padding: 0;
                margin: 0;
            }
            #wrap{
                position: absolute;
                left:0;
                top:0;
                width: 300px;
                height: 400px;
                background:#0cc;
                cursor: move;
            }
        </style>
    </head>
    <body>
        <div id="wrap">
        </div>
        <script>
            var wrap = document.getElementById("wrap");
    //        水平垂直居中=(屏幕宽(高)度-盒子宽(高)度)/2
            wrap.style.left = (document.documentElement.clientWidth - wrap.offsetWidth)/2 + "px"; 
            wrap.style.top = (document.documentElement.clientHeight - wrap.offsetHeight)/2 + "px";
            //这里只用到常用的三个鼠标事件:onmousedown(鼠标按下去时触发)、onmousemove(鼠标移动时触发)、onmouseup(鼠标松开时触发)
            wrap.onmousedown = function(e){//鼠标按下去时
                var event = e || window.event;//event是一个事件对象,一个全局对象。e(现代浏览器),window.event(低版本的IE浏览器)
                var oW =event.clientX - wrap.offsetLeft;//X轴盒子的偏移量 = 当前鼠标点击X轴坐标 - 盒子的left值
                var oH = event.clientY - wrap.offsetTop;//Y轴盒子的偏移量 = 当前鼠标点击Y轴坐标 - 盒子的top值
                document.onmousemove = function(e){//鼠标移动时
                    var event = e || window.event;
                    var bLeft = event.clientX - oW;//鼠标移动的left偏移量 = 当前移动的X轴坐标 - X轴盒子的偏移量
                    var bTop = event.clientY - oH; //鼠标移动的top偏移量 = 当前移动的Y轴坐标 - Y轴盒子的偏移量
                    var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;//获取文档水平方向滚动条位置
                    var scrollY = document.documentElement.scrollTop || document.body.scrollTop;//获取文档垂直方向滚动条位置
                    //scrollX和scrollY为0当出现滚动条时才会大于0
                    //判断屏幕的边界目的是不让盒子超出屏幕的宽(高)度
                    if(bLeft < scrollX){
                        bLeft = scrollX;//盒子的偏移量left=scrollX
                    }
                    else if(bLeft > document.documentElement.clientWidth - wrap.offsetWidth +scrollX){ 
                        bLeft = document.documentElement.clientWidth - wrap.offsetWidth +scrollX;//盒子的偏移量left = 屏幕宽度 - 盒子的宽度+scrollx(滚动条值)
                    }
                    if(bTop < scrollY){
                        bTop = scrollY;//盒子的偏移量top=scrollX
                    }
                    else if(bTop > document.documentElement.clientHeight - wrap.offsetHeight +scrollY){
                            bTop = document.documentElement.clientHeight - wrap.offsetHeight +scrollY;////盒子的偏移量top = 屏幕高度 - 盒子的高度+scrollY(滚动条值)                
                    }
                    wrap.style.left = bLeft + "px";//盒子的left偏移量
                    wrap.style.top = bTop + "px";//盒子的top偏移量
                }
            }
            document.onmouseup = function(){
                document.onmousemove = null;//鼠标松开时解除onmousemove
            }
        </script>
    </body>
    </html>
  • 相关阅读:
    multiprocessing 源码解析 更新中......
    loadrunner 更新中......
    Java IO
    echarts水球图小数点不显示问题+组件默认值
    双柱表格组件
    表格生成后修改echarts图表样式
    vue中引入单张图片+两张壁纸手动切换
    配置全局组件
    vue使用babel-plugin-import按需引入Ant Design View + babel-plugin-component按需引入element-ui
    vue深浅拷贝的思索
  • 原文地址:https://www.cnblogs.com/webAndy/p/5063857.html
Copyright © 2020-2023  润新知