几个mouse事件的特点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了几个mouse事件的特点相关的知识,希望对你有一定的参考价值。
参考技术A 1.mouseover() : 如果鼠标指针穿过任何子元素,同样会触发 mouseover 事件。注:比如div使用了mouseover 事件,鼠标在进入div到span再出去,会触发3次mouseover 事件;
2.mouseenter() : 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。
注:比如div使用了mouseenter 事件,鼠标在进入div到span再出去,会触发1次mouseenter事件;
3.mouseout() : 如果鼠标指针离开任何子元素,同样会触发 mouseout 事件。
注:比如div使用了mouseout 事件,鼠标在进入div到span再出去,会触发3次mouseout 事件;
4.mouseleave() : 只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。
注:比如div使用了mouseleave 事件,鼠标在进入div到span再出去,会触发1次mouseleave 事件;
所以它们的区别就是mouseover和mouseout拥有冒泡属性,将 mouseout() 换成 mouseleave() 即可!
判断Mouse事件源类型
//鼠标事件源类型
public enum MouseEventSource { Mouse, Pen, Touch } /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); inkcv.PreviewMouseDown += Inkcv_PreviewMouseDown; inkcv.PreviewMouseMove += Inkcv_PreviewMouseMove; inkcv.PreviewMouseUp += Inkcv_PreviewMouseUp; } private void Inkcv_PreviewMouseUp(object sender, MouseButtonEventArgs e) { var s = GetMouseEventSource(); result.Text = "mouse up,Source: "+ s.ToString(); } private void Inkcv_PreviewMouseMove(object sender, MouseEventArgs e) { if (e.LeftButton==MouseButtonState.Pressed) { result.Text ="mouse move,Source: "+ GetMouseEventSource().ToString(); } } private void Inkcv_PreviewMouseDown(object sender, MouseButtonEventArgs e) { var s = GetMouseEventSource(); result.Text = "mouse previewdown,Source: "+ s.ToString(); } [DllImport("user32.dll")] private static extern uint GetMessageExtraInfo(); public static MouseEventSource GetMouseEventSource() { uint extra = GetMessageExtraInfo(); bool isTouchOrPen = ((extra & 0xffffff00) == 0xff515700); if (!isTouchOrPen) return MouseEventSource.Mouse; bool isTouch = ((extra & 0x00000080) == 0x00000080); return isTouch ? MouseEventSource.Touch : MouseEventSource.Pen; } }
以上是关于几个mouse事件的特点的主要内容,如果未能解决你的问题,请参考以下文章