1. 程式人生 > >js事件中級(預設行為,拖拽)

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>