js事件中级(默认行为,拖拽)

默认行为:浏览器自带的行为。

阻止默认/右键事件:

<script>
    document.oncontextmenu=function(){
        return false;//阻止默认事件
    }
</script>

例子:

  1. 屏蔽右键菜单    弹出自定义右键菜单
  2. 只能输入数字的输入框   keydown  keyup事件的区别
//屏蔽右键菜单    弹出自定义右键菜单 
<style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        #div1{
            width: 100px;
            height: 200px;
            background: #cccccc;
            display: none;
            position: absolute;
        }
    </style>
</head>
<script>
    document.oncontextmenu=function(ev){
        var oEvent=ev||event;
        var oDiv=document.getElementById('div1');
        var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
        var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;

        oDiv.style.display='block';
        oDiv.style.left=oEvent.clientX+'px';
        oDiv.style.top=oEvent.clientY+scrollTop+'px';

        return false;//阻止默认事件

    }
    document.onclick=function(){
        var oDiv=document.getElementById('div1');
        oDiv.style.display='none';
    }
</script>
<body style="height: 2000px; width: 1000px">
<div id="div1">
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>

    </ul>
</div>
</body>
// 只能输入数字的输入框
 <script>
        window.onload= function () {
            var oTxt=document.getElementById('txt1');
            oTxt.onkeydown=function(ev){
                var oEvent=ev||event;
                //只能输入删除和数字键
                if(oEvent.keyCode!=8&&(oEvent.keyCode<48||oEvent.keyCode>57)){
                    return false;
                }
            }
        }

    </script>
</head>
<body>
只能输入数字的文本框:<input type="text" id="txt1"/>

</body>

拖拽:

  • 简易拖拽。原理:距离不变,三个事件。
  • 靠谱拖拽:
  •           原有拖拽的问题:直接给document加事件
  •           ff下,空div拖拽bug:阻止默认事件。return false
  •           防止拖出页面:修正位置。

鼠标到拖拽框的距离是不变的。

 <style>
        #div1{
            width: 200px;
            height: 200px;
            background: red;
            position: absolute;
        }
    </style>

    <script>
        //鼠标按下 鼠标抬起 鼠标移动
        window.onload=function(){

            var oDiv=document.getElementById('div1');
            var disX=0;
            var disY=0;
            oDiv.onmousedown=function(ev){
                var oEvent=ev||event;
                disX=oEvent.clientX-oDiv.offsetLeft;
                disY=oEvent.clientY-oDiv.offsetTop;

                //鼠标移动
                oDiv.onmousemove=function(ev){
                    var oEvent=ev||event;
                    oDiv.style.left=oEvent.clientX-disX+'px';
                    oDiv.style.top=oEvent.clientY-disY+'px';
                }
                //鼠标抬起不动
                oDiv.onmouseup=function(){
                    oDiv.onmousemove=null;
                    oDiv.onmouseup=null;
                }
            };


        }
    </script>
</head>
<body>
<div id="div1"></div>
</body>

 出现的问题:如果鼠标移动的快一点,鼠标就会从div里出来。原因是div太小了,在div里加的onmousemove,鼠标出来了自然就不停使唤了。办法:让鼠标没办法移出。

<style>
        #div1{
            width: 200px;
            height: 200px;
            background: red;
            position: absolute;
        }
    </style>

    <script>
        //鼠标按下 鼠标抬起 鼠标移动
        window.onload=function(){

            var oDiv=document.getElementById('div1');
            var disX=0;
            var disY=0;
            oDiv.onmousedown=function(ev){
                var oEvent=ev||event;
                disX=oEvent.clientX-oDiv.offsetLeft;
                disY=oEvent.clientY-oDiv.offsetTop;

                //鼠标移动
                document.onmousemove=function(ev){
                    var oEvent=ev||event;
                    oDiv.style.left=oEvent.clientX-disX+'px';
                    oDiv.style.top=oEvent.clientY-disY+'px';
                }
                //鼠标抬起不动
                document.onmouseup=function(){
                    document.onmousemove=null;
                    document.onmouseup=null;
                }
            };
            return false;//火狐下,空div会有bug.加上false则无。

        }
    </script>
</head>
<body>
<div id="div1"></div>
</body>

防止div从上下左右拖出。

 <script>
        //鼠标按下 鼠标抬起 鼠标移动
        window.onload=function(){

            var oDiv=document.getElementById('div1');
            var disX=0;
            var disY=0;
            oDiv.onmousedown=function(ev){
                var oEvent=ev||event;

                disX=oEvent.clientX-oDiv.offsetLeft;
                disY=oEvent.clientY-oDiv.offsetTop;

                //鼠标移动
                document.onmousemove=function(ev){
                    var oEvent=ev||event;
                    var l=oEvent.clientX-disX;
                    var t=oEvent.clientY-disY;

                    if(l<0){
                        l=0;
                    }else if(l>document.documentElement.clientWidth-oDiv.offsetWidth){
                        l=document.documentElement.clientWidth-oDiv.offsetWidth;
                    }
                    if(t<0){
                        t=0;
                    }else if(t>document.documentElement.clientHeight-oDiv.offsetHeight){
                        t=document.documentElement.clientHeight-oDiv.offsetHeight;
                    }
                    oDiv.style.left=l+'px';
                    oDiv.style.top=t+'px';

                }
                //鼠标抬起不动
                document.onmouseup=function(){
                    document.onmousemove=null;
                    document.onmouseup=null;
                }
            };
            return false;//火狐下,空div会有bug.加上false则无。
        }
    </script>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值