网页中的可交互元素有很多触发事件,其中最为常用的就是点击事件了,其中PC上的点击事件使用鼠标触发事件,代表鼠标的点击,例如onmousedown事件;移动终端例如手机、平板等一般使用touch,代表触屏操作,例如ontouchstart事件。
两者存在一定对应关系,又有所区别,本文就是在给一个项目做移动端兼容时解决遇到的触发问题,然后整理出来的。
鼠标触发事件
onclick
这是最常使用的鼠标触发事件,在用户鼠标单击或者按下回车键时触发。这意味着不只鼠标,使用键盘也可以触发,易用性更高。
ondbclick
用户鼠标双击时触发。
onmousedown
用户鼠标按下任意按键时触发,可以通过Button参数判断是哪个鼠标按键触发的这个事件,如果使用右键触发,则需屏蔽右键菜单。
onmouseup
用户鼠标释放按键时触发。
onmouseenter
用户光标从元素外部移动到元素范围内时触发,事件不冒泡,并且光标移动到后代元素上时不会触发。
onmouseleave
用户光标从元素内部移动到元素范围外时触发,事件不冒泡,并且光标移动到后代元素上时不会触发。
onmousemove
用户光标在元素内部移动时重复地触发,频率较高,需防抖节流。
onmouseout
用户光标由当前元素移动到另一个元素时触发。另一个元素可以是任意外部元素或者后代元素。
onmouseover
用户光标从一个元素外部移动到另一个元素范围内时触发。
注意,除了onmouseenter和onmouseleave外,其他鼠标事件都会冒泡,如果取消鼠标事件冒泡可能会影响浏览器的默认行为,取消鼠标事件的默认行为可能影响其他触发事件,因为鼠标事件和其他时间有密不可分的关系。
另外,当同时存在onmousedown、onmouseup、onclick事件时,按这一排列顺序触发。
当在同一个元素上相继触发onmousedown、onmouseup事件后,onclick事件才能触发,因此如果onmousedown、onmouseup其中一个事件被取消,则click触发不会触发。
例如在浏览网页时,鼠标按下点击了一个链接没有松开,这时突然改了主意不想点开,则会把按住的鼠标拖动到空白位置松开,这其实就是没有执行onmouseup事件(因为松开鼠标时指针不在当前元素范围内),从而取消onclick事件。
触屏触发事件
ontouchstart
按下手指时触发。
ontouchend
松开手指时触发。
ontouchmove
按下手指并拖动时触发,频率较高,需要节流防抖。
ontouchcancel
当一些更高级别的事件发生时(如电话接入或者弹出信息)会取消当前的touch操作,例如在游戏时被电话打断等。
注意,当移动端同时存在鼠标事件和触屏事件时,手指抬起的时候(触发ontouchend后),系统会自动判断接收到事件的元素的内容是否被改变。
如果内容被改变,则接下来的事件都不触发;如果没有改变,则按照onmousedown、onmouseup、click的顺序继续触发(前面还有ontouchstart和ontouchend)。
另外,只有在触发一个触屏事件时,才会触发上一个事件的onmouseout事件。
因为私事拖更了,汪汪。
奴才做了主人,
是决不肯废去“老爷”称呼的,
他的摆架子,
恐怕比他的主人还十足,还可笑。
《二心集·上海文艺之一瞥》
——鲁迅


评论
Проститутки Черниковка дом отель сауна
Проститутки Черниковки час от 4000 два часа от 7000
696178 400442But a smiling visitor here to share the really like (:, btw great pattern . 269511
Диагностическое оборудование
Устройства для профилактической фторизации
598205 236836Surely,Chilly place! We stumbled on the cover and Im your personal representative. limewire limewire 209688
822532 119106There is noticeably plenty of dollars to comprehend this. I suppose you produced certain good points in functions also. 153882
611920 307571A thoughtful insight and suggestions I will use on my blog. Youve clearly spent lots of time on this. Thank you! 520138
Проведение поверки водосчетчика без снятия