妙味4:鼠标、键盘事件对象兼容,阻止事件对象的默认行为

1. 事件对象的兼容:var oEvent=ev||event;

2. clientX/clientY必须与scrollLeft/scrollTop同时使用,并且都必须使用兼容写法;

3. 冒泡事件取消(兼容):oEvent.cancelBubble=true;

4. 键盘事件的兼容

5. 案例:ctrl+enter提交留言、鼠标跟随、自由拖拽、自定义右键菜单

 

 

6. 事件:onmousedown/onmouseup、 onmouseover/onmouseout、 onmousemove

onkeydown/onkeyup、onkeypress

7. 属性:ctrlKey/altKey/shiftKey/keyCode

取消冒泡事件兼容写法:

obj.onclick=function (ev)
{
     var oEvent=ev||event;

oEvent.cancelBubble=true;     //取消冒泡事件。(多个块叠在一起,每个都有onclick事件,当点击最上面的块时,下面的点击事件也会被依次触发)
};

clientX/clientY必须与scrollLeft/scrollTop同时使用,并且都必须使用兼容写法:

// 跟随鼠标事件 =============================================================

document.onmousemove=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.left=oEvent.clientX+scrollLeft+‘px‘;
     oDiv.style.top=oEvent.clientY+scrollTop+‘px‘;
};

 

键盘事件:

document.onkeydown=function (ev){
     var oEvent=ev||event;
     alert(oEvent.keyCode);
};

 

取消事件的默认行为

document.oncontextmenu=function (){     //取消浏览器右键菜单:
     return false;
};

oTxt.onkeydown=function (){     //按键无效

return false;

};

oForm.onsubmit=function (){     //阻止提交表单,输入验证不通过时使用

return false;

};

 

 

 

案例:

// ctrl+enter 提交留言====================================================================================

<script>
     window.onload=function (){
          var oBtn=document.getElementById(‘btn1‘);
          var oTxt1=document.getElementById(‘txt1‘);
          var oTxt2=document.getElementById(‘txt2‘);

oBtn.onclick=function (){
               oTxt1.value+=oTxt2.value+‘\n‘;
               oTxt2.value=‘‘;
          };
          oTxt2.onkeydown=function (ev){
               var oEvent=ev||event;
               if(oEvent.ctrlKey && oEvent.keyCode==13){
                    oTxt1.value+=oTxt2.value+‘\n‘;
                    oTxt2.value=‘‘;
               }
          };
     };
</script>

<textarea id="txt1" rows="10" cols="40"></textarea><br />
<input id="txt2" type="text" />
<input id="btn1" type="button" value="留言" />

// 鼠标跟随====================================================================================

<style>div {width:10px; height:10px; background:red; position:absolute;}</style>
<script>
     window.onload=function (){
          var aDiv=document.getElementsByTagName(‘div‘);
          var i=0;
          document.onmousemove=function (ev){
               var oEvent=ev||event;
               for(i=aDiv.length-1;i>0;i--)          {
                    aDiv[i].style.left=aDiv[i-1].style.left;
                    aDiv[i].style.top=aDiv[i-1].style.top;
               }
               aDiv[0].style.left=oEvent.clientX+‘px‘;
               aDiv[0].style.top=oEvent.clientY+‘px‘;
          };
     };
</script>

<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>

// 自由拖拽 ====================================================================================

<style>#div1 {width:100px; height:100px; 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;
                    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;
          };
     };
</script>
<body><div id="div1"></div></body>

// 自定义右键菜单 ====================================================================================

<style>* {margin:0; padding:0;}#ul1 {width:100px; background:#CCC; border:1px solid black; position:absolute; display:none;}</style>
<script>
     document.oncontextmenu=function (ev){
          var oEvent=ev||event;
          var oUl=document.getElementById(‘ul1‘);

oUl.style.display=‘block‘;
          oUl.style.left=oEvent.clientX+‘px‘;
          oUl.style.top=oEvent.clientY+‘px‘;
          return false;
     };

document.onclick=function (){
          var oUl=document.getElementById(‘ul1‘);
          oUl.style.display=‘none‘;
     };
</script>
<body><ul id="ul1"><li>登陆</li><li>回到首页</li><li>注销</li><li>加入VIP</li></ul></body>

时间: 2025-01-17 23:12:05

妙味4:鼠标、键盘事件对象兼容,阻止事件对象的默认行为的相关文章

[JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播

-->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的onclick事件也会被触发.js里称这种事件连续发生的机制为事件冒泡或者事件捕获.IE浏览器:事件从里向外发生,事件从最精确对象(target)开始触发,然后到最不精确的对象(document)触发,即事件冒泡 Netscape:事件从外向里发生,事件从最不精确的对象(document)开始触发,然后到最精确对象(

事件冒泡 ,阻止事件冒泡 e.stopPropagation()

<1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>冒泡</title> <script src="script/jquery-1.11.0.min.js" type="text/javascript"></script> <script type="text/javascri

js阻止浏览器、元素的默认事件与js阻止事件冒泡、阻止事件流

嵌套的div元素,如果父级和子元素都绑定了一些事件,那么在点击最内层子元素时可能会触发父级元素的事件,下面介绍一下js阻止默认事件与js阻止事件冒泡示例,大家参考使用吧 1. event.preventDefault();  -- 阻止元素的默认事件.注:a元素的点击跳转的默认事件 , button,radio等表单元素的默认事件 , div 元素没有默认事件 例: 复制代码代码如下: <a href="http://www.baidu.com" target="_bl

js阻止默认事件与js阻止事件冒泡

e.stopPropagation(); //阻止事件冒泡 功能:停止事件冒泡 function stopBubble(e) { // 如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ) { // 因此它支持W3C的stopPropagation()方法 e.stopPropagation(); } else { // 否则,我们需要使用IE的方式来取消事件冒泡 window.event.cancelBubble = true; } }

JQuery中的事件冒泡和阻止事件的传播行为

之前的这篇博客详细地介绍了javascript中的事件冒泡和事件捕获,以及DOM事件流.现在我们来看下,JQuery框架中的事件冒泡问题,以及如何阻止事件的传播行为. 1.JQuery中的事件绑定,都是属于事件冒泡. 这篇博客介绍了JQuery中绑定事件处理函数的几种方式,从中可以看到:这几种绑定方式,都不允许我们传递事件类型(是事件冒泡,还是事件捕获).而javascript原生提供的addEventListener()则允许我们设置事件的类型. <script> $(function(){

事件冒泡。阻止事件冒泡 |阻止元素的默认行为

<.1> 如果在页面中重叠了多个元素,并且重叠的这些元素都绑定了同一个事件,那么就会出 现冒泡问题. 触发的顺序是从小范围到大范围. 这就是所谓的冒泡现象,一层一层往上. <html> <head> <title></title> <script src="jquery-2.1.3.js"></script> <style type="text/css"> div#a {

事件冒泡和阻止事件冒泡

事件冒泡 当事件发生后,这个事件就要开始传播(从里到外或者从外向里).为什么要传播呢?因为事件源本身(可能)并没有处理事件的能力,即处理事件的函数(方法)并未绑定在该事件源上.例如我们点击一个按钮时,就会产生一个click事件,但这个按钮本身可能不能处理这个事件,事件必须从这个按钮传播出去,从而到达能够处理这个事件的代码中(例如我们给按钮的onclick属性赋一个函数的名字,就是让这个函数去处理该按钮的click事件),或者按钮的父级绑定有事件函数,当该点击事件发生在按钮上,按钮本身并无处理事件

阻止事件冒泡 和 阻止事件默认行为

1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开, 2.event.preventDefault()方法 这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素: 3.return false  : 这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件:写上此代码,连接不会被打开,事件也不会传递到上一层的

2016年5月27日上午(妙味课堂js基础-3笔记一(事件))

一.event事件 1.什么是event事件对象? 用来获取事件的详细信息:鼠标位置.键盘按键 ——例子:获取鼠标位置:clientX ——document的本质:document.childNodes[0].tagName (1)首先对于点击事件,如果我们想要在页面打开后,在页面的任何一个地方点击都会弹出来一个框,那我们应该怎么做呢? <script type="text/javascript"> window.onload=function () { document.

2016年5月27日下午(妙味课堂js基础-3笔记二(事件))

一.鼠标事件 1.鼠标位置 可视区位置:clientX.clientY(鼠标的坐标) 这里我们注意,现在我们只知道它是鼠标的坐标,但是我们不知道它是鼠标的什么坐标,现在我们来看一个实例: ——例子1:跟随鼠标的Div (1)onmousemove 事件会在鼠标指针移动时发生. 注释:每当用户把鼠标移动一个像素,就会发生一个 mousemove 事件.这会耗费系统资源去处理所有这些 mousemove 事件.因此请审慎地使用该事件. <head> <style type="tex