标签:信息 screenx 自己的 关闭 one ado 兼容问题 eve weight
document.onclick = function(eve){ var e = eve || window.event; console.log(e); }
下面是自定义右键菜单的案例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        body {
            font-size: 16px;
            font-family: "KaiTi";
        }
        ul {
            list-style: none;
            margin:0;
            padding: 0;
        }
        a {
            text-decoration: none;
            color: #333;
        }
        .contextmenu {
            width: 200px;
            border: 1px solid #999;
            box-shadow: 3px 3px 3px #ccc;
            background-color: #fff;
            position: absolute;
            top: 10px;
            left: 10px;
            display: none;
        }
        .contextmenu li  {
            height: 38px;
            line-height: 38px;
        }
        .contextmenu li a {
            display: block;
            padding:0 20px;
        }
        .contextmenu li a:hover {
            background-color: #ccc;
            color: white;
            font-weight: bold;
        }
    </style>
</head>
<body>
<div class="contextmenu" id="context">
    <ul>
        <li><a href="javascript:;">复制</a></li>
        <li><a href="javascript:;">粘贴</a></li>
        <li><a href="javascript:;">剪切</a></li>
        <li><a href="javascript:;">获取种子</a></li>
        <li><a href="javascript:;">迅雷下载</a></li>
    </ul>
</div>
</body>
<script>
    // 先来获取菜单列表,然后让其在鼠标右击的时候显示出来
    document.oncontextmenu = function (ob) { // ob 表示event事件
        // 兼容event事件
        var e = ob || window.event;
        // 首先获取菜单
        var context = document.getElementById(‘context‘);
        // 让菜单显示出来
        context.style.display = "block";
        // 让菜单跟随鼠标位置而移动
        // 需要使用鼠标的坐标,让鼠标的坐标位置为菜单的左上角0,0
        var x  = e.clientX;
        var y = e.clientY;
        // 获取窗口的宽度和高度(在浏览器中的可用窗口宽度和高度,当调整窗口大小的时候,获取的值也会变)
        var w = window.innerWidth;
        var h = window.innerHeight;
        console.log("窗口宽度为:"+w,"窗口的高度为:"+h);
        // 将获得的值赋值给菜单的右键菜单,从而实现让右键菜单会出现在鼠标的位置上
        // context.style.left = x + ‘px‘;
        // context.style.top = y + ‘px‘;
        // 重新调整宽度和高度
        context.style.left =Math.min(w - 202,x) + ‘px‘;
        context.style.top = Math.min(h - 230,y) + ‘px‘;
        // 通过return false关闭系统默认菜单
        return false;
    }
    // 当鼠标单击之后,希望关闭右键菜单
    document.onclick = function () {
        var contextmenu = document.getElementById(‘context‘);
        // 让菜单在单击之后消失
        contextmenu.style.display = ‘none‘;
    }
</script>
</html>

通过evnet对象当中的内容,我们可以非常轻易的获取鼠标的坐标。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
<script>
    document.onmousemove = function (env) {
        var env = env || window.event;
        console.log(env.clientX,env.clientY); // clientX 鼠标x轴坐标,clientY鼠标y轴坐标
    }
</script>
</html>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>图层拖拽</title>
    <style type="text/css">
        .box {
            width:200px;
            height: 200px;
            background-color: orange;
            border: 2px solid pink;
            cursor: pointer;
            position: absolute;
            left:100px;
            top: 20px;
        }
    </style>
</head>
<body>
<h1>图层拖拽</h1>
<hr>
<div class="box" id="box"></div>
</body>
<script type="text/javascript">
    // 获取元素绑定事件
    var oBox = document.getElementById("box");
    oBox.onmousedown = function (env) {
        var env = env || window.event;
        // 获取一下鼠标在div上的位置
        var left = env.clientX - oBox.offsetLeft;
        var top = env.clientY - oBox.offsetTop;
        // 为了方便查看效果,当鼠标点击之后,改变一下颜色
        oBox.style.background = "#999";
        oBox.onmousemove = function (env) {
            var env = env || window.event;
            var x = env.clientX;
            var y = env.clientY;
            oBox.style.left = (x - left) + ‘px‘;
            oBox.style.top = (y - top) + ‘px‘;
        }
    }
    oBox.onmouseup = function () {
        oBox.style.background = "orange";
        oBox.onmousemove = function (){}
    }
</script>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
<script>
    document.onkeydown = function (env) {
        var env = env || window.event;
        console.log(env); // KeyboardEvent
    }
</script>
</html>
兼容性问题:
IE:
支持keyCode
不支持which和charCode,二者值为 undefined
在Firefox下:
支持keyCode,除功能键外,其他键值始终为 0
支持which和charCode,二者的值相同
在Opera下:
支持keyCode和which,二者的值相同
不支持charCode,值为 undefined
很多时候,我们的浏览器都具备一些默认的行为,这些默认的行为在某些时刻我们需要取消或者屏蔽掉,例如当我们在我们自己的网页中自定义了右键菜单,那么我们就希望屏蔽掉浏览器的右键菜单,所以我们可以如下
document.oncontextmenu = function () { return false; }
//阻止浏览器的默认行为 function stopDefault( e ) { //阻止默认浏览器动作(W3C) if ( e && e.preventDefault ) e.preventDefault(); //IE中阻止函数器默认动作的方式 else window.event.returnValue = false; return false; }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div {
            padding:40px;
        }
        #div1 {
            background-color: red;
        }
        #div2 {
            background-color: pink;
        }
        #div3 {
            background-color: orange;
        }
    </style>
</head>
<body>
<div id="div1">
    <div id="div2">
        <div id="div3"></div>
    </div>
</div>
</body>
<script>
    var d1 = document.getElementById(‘div1‘);
    var d2 = document.getElementById(‘div2‘);
    var d3 = document.getElementById(‘div3‘);
    function fn1() {
        alert(this.id);
    }
    // 绑定事件
    d1.onclick = fn1;
    d2.onclick = fn1;
    d3.onclick = fn1;
</script>
</html>
2.封装成两个函数的方式 function addEvent(obj,inci,back){ if(obj.addEventListener){ obj.addEventListener(inci,back); }else if(obj.attachEvent){ obj.attachEvent("on" + inci,back); }else{ obj["on"+inci] = back; } } function removeEvent(obj,inci,back){ if(obj.removeEventListener){ obj.removeEventListener(inci,back,false); }else if(obj.detachEvent){ obj.detachEvent("on" + inci,back); }else{ obj["on"+inci] = null; } }
通过e.target获取触发事件的事件源 利用事件冒泡原理,将绑定在多个子元素身上的相同事件,绑定在页面上现存的父元素身上。 oul.onclick = function(eve){ var e = eve || window.event; var target = e.target || e.srcElement; if(target.nodeName == "LI"){ console.log(target.innerHTML); } } 优势: 1.节省性能 2.可以给页面上暂时不存在的元素绑定事件

------------恢复内容结束------------
标签:信息 screenx 自己的 关闭 one ado 兼容问题 eve weight
原文地址:https://www.cnblogs.com/wuziqiang/p/12076461.html