鼠标事件与键盘事件

鼠标事件

鼠标事件有不少:click、mousedown、mousemove、mouseup、contextmenu、mouseover、mouseout。这些方法的语义化都很好,你们看名字基本都懂是什么意思。浏览器

其中,contextmenu是右键出现菜单事件,并非右键事件。dom

click是一个完整的点击事件,包括mousedown和mouseup。spa

mouseover和mouseout是一组事件,对应于鼠标的移入移出事件。code

• 全部的鼠标事件都有clientX和clientY,表明的是鼠标点击的位置,咱们能够经过e.clientX和e.clentY来查看。对象

• 左键点击的顺序是:mousedown、mouseup、clickseo

1.   
2.  var firstTime,
3.        lastTime,
4.        flag = false;
5.  document.onclick = function (e) {
6.      console.log(‘click’);
7.  }
8.  document.onmousedown = function (e) {
9.      console.log(‘mousedown’);
10.  }
11.  document.onmouseup = function (e) {
12.      console.log(‘mouseup’);
13.  }

JavaScript; “复制代码”); “查看纯文本代码”); “返回代码高亮”)事件

输出的结果是mousedown、mouseup、click。ip

• 当咱们同时绑定了click事件和mousedown事件后,如何解决mousedown和click的冲突问题?rem

其实方法很简单,咱们能够经过按下鼠标的事件来判断是执行click仍是mousedown事件。字符串

1.   
2.  var firstTime,
3.        lastTime,
4.        flag = false;
5.  document.onclick = function (e) {
6.      if (flag) {
7.          console.log(‘click’);
8.      }else {
9.          console.log(‘mousedown’);
10.      }
11.  }
12.  document.onmousedown = function (e) {
13.      firstTime = new Date().getTime();
14.  }
15.  document.onmouseup = function (e) {
16.      lastTime = new Date().getTime();
17.      if (lastTime - firstTime < 200) {
18.          flag = true;
19.      }else {
20.          flag = false;
21.      }
22.  }

JavaScript; “复制代码”); “查看纯文本代码”); “返回代码高亮”)

• 如何判断鼠标点击的是左键仍是右键?

click事件永远都是左键,有左键和右键的区别的是mousedown事件。

再mousedown的事件对象中有一个属性叫作button,这个属性的值是0的时候表明咱们按下的是左键,1的时候表明按下的中键,2的时候表明按下的是右键。

1.   
2.  document.onmousedown = function (e) {
3.      if (e.button == 0) {
4.          console.log(‘left’);
5.      }else if (e.button == 1) {
6.          console.log(‘mid’);
7.      }else {
8.          console.log(‘right’);
9.      }
10.  }

JavaScript; “复制代码”); “查看纯文本代码”); “返回代码高亮”)

这里咱们就能够从新回顾一下拖拽事件了:

1.   
2.  var div = document.getElementsByTagName(‘div’)[0]
3.  function drag(elem) {
4.      var disX,
5.          dixY;
6.      addEvent(elem, ‘mousedown’, function (e) {
7.          var event = e || window.event;
8.          disX = event.clientX - parseInt(getStyle(elem, ‘left’));
9.          disY = event.clientY - parseInt(getStyle(elem, ‘top’));
10.   
11.          addEvent(document, ‘mousemove’, mouseMove);
12.          addEvent(document, ‘mouseup’, mouseUp);
13.          stopBubble(e);
14.          cancelHandler(e);
15.      });
16.   
17.      function mouseMove(e) {
18.          var event = e || window.event;
19.          elem.style.left = event.clientX - disX + ‘px’;
20.          elem.style.top = event.clientY - disY + ‘px’;
21.      }
22.      function mouseUp (e) {
23.          removeEvent(document, ‘mousemove’, mouseMove);
24.          removeEvent(document, ‘mouseup’, arguments.callee);
25.      }
26.  }

JavaScript; “复制代码”); “查看纯文本代码”); “返回代码高亮”)

这里咱们为了避免由于鼠标移动过快致使移出div,咱们将mouseover事件绑定到了document上。

• 针对鼠标帧频过快的问题,IE中有一个也能够说是另外一种事件捕获的方法——domEle.setCapture()。

调用这个方法以后,页面后续的全部操做就会所有都归于这个domEle上,好比div有一个拖拽事件,不过mousemove绑定在div上,只要调用了这个方法,当鼠标拖拽过程当中鼠标移出了div,这个时候有效的鼠标移动就变成了document上的mousemove事件了,可是它仍是归于了div上,所以div仍是能够跟着鼠标移动。

同时还有一个domEle.releaseCapture()方法能够来释放这个捕获行为。

键盘事件

键盘事件主要有三个:keydown、keypress、keyup。

触发顺序分别是keydown、keypress、keyup。

1.   
2.  document.onkeydown = function (e) {
3.      console.log(‘keydown’);
4.  }
5.  document.onkeypress = function (e) {
6.      console.log(‘keypress’);
7.  }
8.  document.onkeyup = function (e) {
9.      console.log(‘keyup’);
10.  }

JavaScript; “复制代码”); “查看纯文本代码”); “返回代码高亮”)

输出的结果是keydown、keypress、keyup。

keydown和keypress能够响应连续操做,咱们一直按着键盘就会一直触发事件。

keypress的范围和keydown有所区别:

keydown能够响应任意键盘按键,keypress只能响应字符类按键,也就是有ASCII码的字符的按键,像字母数字回车空格之类的。

事件对象的属性方面:

只有keypress有charCode属性,这个属性表明的咱们输入的这个字符的ASCII码,配合SHIFT之类的按键能够直接获取大写字母等。

keyCode和which每一个方法都有,表示的是这个键的惟一标示,能够告诉浏览器咱们按下的是键盘上的哪个键,好比空格是32,32就表明空格。不过咱们通常都用which,keyCode用的较少。

• String上有一个方法叫作fromCharCode,能够接受一个Unicode值(包含ASCII值),而后返回对应的字符串,咱们能够配合这个方法和charCode来直接获取输入的字符。

1.   
2.  document.onkeypress = function (e) {
3.      console.log(String.fromCharCode(e.charCode));
4.  }

JavaScript; “复制代码”); “查看纯文本代码”); “返回代码高亮”)

窗体操做类(window上的事件)

load事件

这个事件window.onload和在body标签上写onload是同样的效果,做用是等页面中全部的东西都下载完成再执行里面的代码。

scroll事件

这个方法是监听滚轮滚动的事件,咱们能够用这个事件来写一个兼容版的fix定位。

1.   
2.  function beFixed(ele){
3.      var initPosX = ele.getPosition().w,
4.          initPosY = ele.getPosition().h;
5.      addEvent(window, ‘scroll’, function(e){
6.          ele.style.top =  initPosY + getScrollOffset().h + ‘px’;
7.          ele.style.left =  initPosX + getScrollOffset().w + ‘px’;
8.      })
9.  }
相关文章
相关标签/搜索