最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

jQuery中关于title属性导致触发mousedown事件时连带触发mousemove事件详解

来源:动视网 责编:小采 时间:2020-11-27 20:18:15
文档

jQuery中关于title属性导致触发mousedown事件时连带触发mousemove事件详解

jQuery中关于title属性导致触发mousedown事件时连带触发mousemove事件详解:大家都知道,鼠标点击的整个事件的执行流程是:mousedown -> mouseup -> click ,而拖放的整个流程是:mousedown -> mousemove -> mouseup -> click 可以来看一个正常 demo,可以分别测试点击和拖放动作$(function(){ /
推荐度:
导读jQuery中关于title属性导致触发mousedown事件时连带触发mousemove事件详解:大家都知道,鼠标点击的整个事件的执行流程是:mousedown -> mouseup -> click ,而拖放的整个流程是:mousedown -> mousemove -> mouseup -> click 可以来看一个正常 demo,可以分别测试点击和拖放动作$(function(){ /


  大家都知道,鼠标点击的整个事件的执行流程是:mousedown -> mouseup -> click ,而拖放的整个流程是:mousedown -> mousemove -> mouseup -> click

  可以来看一个正常 demo,可以分别测试点击和拖放动作

$(function(){ //初始化 box 位置
 $('#box').css('left', ($(window).width() - 100) / 2).css('top', ($(window).height() - 100) / 2).show(); var x = y = 0; var isMove = false;
 $('#box').mousedown(function(e){
 x = e.clientX - $('#box').offset().left;
 y = e.clientY - $('#box').offset().top;
 $(document).mousemove(function(e){
 $('#tip').text('你触发了 mousemove 事件');
 isMove = true;
 l = e.clientX - x;
 t = e.clientY - y;
 $('#box').css('left', l).css('top', t);
 }).mouseup(function(){
 $(document).unbind('mousemove').unbind('mouseup');
 });
 });
 $('#box').click(function(e){ if(!isMove){
 $('#tip').text('你触发了 click 事件');
 }
 isMove = false;
 });
});

  我们试着给 #box 加上title属性再来分别试试点击事件和拖放事件

$(function(){ //初始化 box 位置
 $('#box').css('left', ($(window).width() - 100) / 2).css('top', ($(window).height() - 100) / 2).show(); var x = y = 0; var isMove = false;
 $('#box').mousedown(function(e){
 x = e.clientX - $('#box').offset().left;
 y = e.clientY - $('#box').offset().top;
 $(document).mousemove(function(e){
 $('#tip').text('你触发了 mousemove 事件');
 isMove = true;
 l = e.clientX - x;
 t = e.clientY - y;
 $('#box').css('left', l).css('top', t);
 }).mouseup(function(){
 $(document).unbind('mousemove').unbind('mouseup');
 });
 });
 $('#box').click(function(e){ if(!isMove){
 $('#tip').text('你触发了 click 事件');
 }
 isMove = false;
 });
});

  可以发现点击也会触发 mousemove 事件,原因就在于 title。

  并且 title 属性有个特性,就是在你鼠标按下的时候,提示文字会隐藏,鼠标抬起则又显示,所以你可以尝试下双击,会发现第 2 次点击会触发 click 事件,因为第 1 次点击后 title 还没有显示出来就进行了第 2 次点击,则正常触发 click 事件。

  发现这一点后,我们就可以试着避免这个小问题,因为在一些情况下,一个对象可能需要同时具备拖放和点击功能,并且保证这两个功能不会冲突。最简单的办法就是避免使用 title 属性,或者你可以参考我在 HoorayOS 里的实现:

  在 mousedown 和 mouseup 时分别记录对象的坐标,并进行对比,如果完全一致则表示对象未进行拖动,否则代表对象已经拖动,这时就可以在 mouseup 里分别处理这两种情况。

  PS:该问题目前仅在 chrome 下发现有,其他浏览器似乎没有出现。

文档

jQuery中关于title属性导致触发mousedown事件时连带触发mousemove事件详解

jQuery中关于title属性导致触发mousedown事件时连带触发mousemove事件详解:大家都知道,鼠标点击的整个事件的执行流程是:mousedown -> mouseup -> click ,而拖放的整个流程是:mousedown -> mousemove -> mouseup -> click 可以来看一个正常 demo,可以分别测试点击和拖放动作$(function(){ /
推荐度:
标签: 事件 触发 属性
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top