【JavaScript】原生js中默认行为以及拖拽实例的实现原理

默认行为

阻止页面上点击右键弹出菜单的默认行为

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

实例1、自定义右键菜单

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #div1 {width: 80px; height: 100px; background-color: #ccc; border: 1px solid #999; display: none; position: absolute;}
        li{list-style: none;}
    </style>
</head>

<body>
    <div id="div1">
        <ul>
            <li>aaa</li>
            <li>bbb</li>
            <li>ccc</li>
            <li>ddd</li>
        </ul>
    </div>
<script>
    document.oncontextmenu = function (ev) { //点击鼠标右键
        var oEvent = ev || event
        var oDiv = document.getElementById('div1')
        oDiv.style.display = 'block'
        oDiv.style.left = oEvent.clientX + 'px' //菜单出现在鼠标点击的位置
        oDiv.style.top = oEvent.clientY + 'px'
        return false //阻止默认事件
    }
    document.onclick = function(){ //点击页面菜单消失
        var oDiv = document.getElementById('div1')
        oDiv.style.display = 'none'
    }
</script>
</body>

实例2、只能输入数字的文本框

<script>
    window.onload = function(){
        var oTxt = document.getElementById('txt')
        oTxt.onkeydown = function(ev){
            oEvent = ev || event
            if(oEvent.keyCode != 8 && (oEvent.keyCode < 48 || oEvent.keyCode > 57)){ //如果按键不是0-9 并且 不是删除键
                return false //阻止默认行为,不能输入
            }
        }
    }
</script>

拖拽

<body>
    <div id="div1"></div>
    <script>
        window.onload = function () {
            var oDiv = document.getElementById('div1')
            oDiv.onmousedown = function (ev) {
                var oEvent = ev || event
                var disX = 0
                var disY = 0
                disX = oEvent.clientX - oDiv.offsetLeft //将鼠标距离元素边距的位置作为拖拽的依据
                disY = oEvent.clientY - oDiv.offsetTop
                console.log(disX, disY)
                document.onmousemove = function (ev) {
                    var oEvent = ev || event //oEvent 涉及到变量作用域,以及事件本身
                    console.log(oEvent.clientX)
                    //alert(9)
                    oDiv.style.left = oEvent.clientX - disX + 'px'
                    oDiv.style.top = oEvent.clientY - disY + 'px'
                }
                document.onmouseup = function () { //将事件加到document上,解决了脱离可视区鼠标抬起无效的问题
                    document.onmousemove = null
                    document.onmouseup = null
                }
            }
        }
    </script>
</body>

阻止元素拖拽出可视区

<script>
    window.onload = function () {
        var oDiv = document.getElementById('div1')
        oDiv.onmousedown = function (ev) {
            var oEvent = ev || event
            var disX = 0
            var disY = 0
            disX = oEvent.clientX - oDiv.offsetLeft //将鼠标距离元素边距的位置作为拖拽的依据
            disY = oEvent.clientY - oDiv.offsetTop
            document.onmousemove = function (ev) {
                var oEvent = ev || event //oEvent 涉及到变量作用域,以及事件本身
                var l = oEvent.clientX - disX
                var t = oEvent.clientY - disY
                if(l < 0){ //如果元素x轴位置小于0说明在左侧拖拽出去了
                    l = 0
                }else if(l > document.documentElement.clientWidth - oDiv.offsetWidth){ //如果元素在x轴位置大于可视区宽度减去自身宽度说明从右侧拖拽出去了
                    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上,解决了脱离可视区鼠标抬起无效的问题
                document.onmousemove = null
                document.onmouseup = null
            }
        }
    }
</script>

猜你喜欢

转载自blog.csdn.net/meichaoWen/article/details/113205787