`

javascript 兼容FF的onmouseenter和onmouseleave

阅读更多
 <script>
var xb = {
	evtHash: [],
	ieGetUniqueID: function(_elem) {
		if (_elem === window) {
			return 'theWindow';
		} else if (_elem === document) {
			return 'theDocument';
		} else {
			return _elem.uniqueID;
		}
	},
	addEvent: function(_elem, _evtName, _fn, _useCapture) {
		if (typeof _elem.addEventListener != 'undefined') {
			if (_evtName == 'mouseenter') {
				_elem.addEventListener('mouseover', xb.mouseEnter(_fn), _useCapture);
			} else if (_evtName == 'mouseleave') {
				_elem.addEventListener('mouseout', xb.mouseEnter(_fn), _useCapture);
			} else {
				_elem.addEventListener(_evtName, _fn, _useCapture);
			}
		} else if (typeof _elem.attachEvent != 'undefined') {
			var key = '{FNKEY::obj_' + xb.ieGetUniqueID(_elem) + '::evt_' + _evtName + '::fn_' + _fn + '}';
			var f = xb.evtHash[key];
			if (typeof f != 'undefined') {
				return;
			}
			f = function() {
				_fn.call(_elem);
			};
			xb.evtHash[key] = f;
			_elem.attachEvent('on' + _evtName, f); // attach unload event to the window to clean up possibly IE memory leaks 
			window.attachEvent('onunload',
			function() {
				_elem.detachEvent('on' + _evtName, f);
			});
			key = null; //f = null; /* DON'T null this out, or we won't be able to detach it */ 
		} else {
			_elem['on' + _evtName] = _fn;
		}
	},
	removeEvent: function(_elem, _evtName, _fn, _useCapture) {
		if (typeof _elem.removeEventListener != 'undefined') {
			_elem.removeEventListener(_evtName, _fn, _useCapture);
		} else if (typeof _elem.detachEvent != 'undefined') {
			var key = '{FNKEY::obj_' + xb.ieGetUniqueID(_elem) + '::evt' + _evtName + '::fn_' + _fn + '}';
			var f = xb.evtHash[key];
			if (typeof f != 'undefined') {
				_elem.detachEvent('on' + _evtName, f);
				delete xb.evtHash[key];
			}
			key = null; //f = null; /* DON'T null this out, or we won't be able to detach it */ 
		}
	},
	mouseEnter: function(_pFn) {
		return function(_evt) {
			var relTarget = _evt.relatedTarget;
			if (this == relTarget || xb.isAChildOf(this, relTarget)) {
				return;
			}
			_pFn.call(this, _evt);
		}
	},
	isAChildOf: function(_parent, _child) {
		if (_parent == _child) {
			return false
		};
		while (_child && _child != _parent) {
			_child = _child.parentNode;
		}
		return _child == _parent;
	}
};

  </script>
分享到:
评论

相关推荐

    javascript 兼容FF的onmouseenter和onmouseleave的代码

    ### 标题知识点:javascript 兼容FF的onmouseenter和onmouseleave的代码 在网页开发中,事件处理是一项基础而重要的技术。在不同的浏览器中,对于同一种事件的处理可能会存在差异。例如,Internet Explorer(IE)...

    javascript中onmouse事件在div中失效问题的解决方法

    今天在网上搜了一下,找了以下的解决办法(兼容IE和Firefox)。 在IE下解决问题很简单,用onMouseEnter、onMouseLeave来代替onMouseOver、onMouseOut就行了,他们的作用基本相同,但前者不会发生冒泡(如果用 jQuery...

    D7自定义Panel,添加鼠标进出事件

    在Delphi 7中,Panel控件作为常用的布局容器,提供了丰富的功能,但默认情况下并未直接提供鼠标进入(OnMouseEnter)和鼠标离开(OnMouseLeave)事件。这两个事件在许多用户界面设计中非常有用,例如高亮显示、提示...

    Alpha Controls 12.18

    Improved repaint of some controls ...Added OnMouseEnter and OnMouseLeave events in the TsGauge component Added the "sclLeftLeft" parameter in the BoundLabel.Layout property A lot of small improvements

    Delphi 菜单的Hint (Delphi 2007)

    4. **处理OnMouseEnter和OnMouseLeave事件**:为了实现类似ShowHint的效果,可以为TMenuItem添加OnMouseEnter和OnMouseLeave事件处理程序。当鼠标进入菜单项时,显示Hint;离开时,隐藏Hint。这可以通过控制...

    G:\Temp\KSDev.TrayClock.v1.04.rar

    + Handle all standard events - OnClick, OnMouseDown, OnMouseUp, OnMouseMove, OnMouseEnter, OnMouseLeave + Support standard hint + Handle custom hint window + Supports Windows95/98/Me/NT/2000/XP/2003

    BalloonHint

    这是一个在Delphi2010中提供的气泡形提示用的组件,在Delphi2007中是没有的。本人从Delphi2010中将它抠出来... 这里提供一个例子说明它的用法:仅需编写需要显示提示信息的组件的OnMouseEnter、OnMouseLeave事件即可。

    AlphaControls_12.18_Stable

    * Added OnMouseEnter and OnMouseLeave events in the TsGauge component * Added the "sclLeftLeft" parameter in the BoundLabel.Layout property * A lot of small improvements * Added new "Flat Box" ...

    react-native-macos:https的分叉

    支持onMouseEnter和onMouseLeave事件( ) 重新实现本地hitSlop道具( ) 创建一个库来播放声音( ) 支持pointerEvents道具( ) 添加组件( ) 添加组件( ) 将cursor道具添加到&lt;View&gt; ( ) 派生@react-...

    C#自定义控件-获焦点后自动放大按钮

    4. **在适当的地方调用Enlarge和Restore方法**:在`OnMouseEnter`和`OnMouseLeave`中调用相应的放大和恢复方法。 ```csharp protected override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); Enlarge...

    快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)

    记录两个项目开发中遇到的问题,一个是ECharts外部调用保存为图片操作,一个是workflow工作流连接曲线onmouseenter和onmouseleave事件由于鼠标移动过快触发问题。 一、外部按钮调用ECharts图表的保存为图片操作 ...

    SkinDemo_fireplacel1g_Vc_

    在本项目中,开发者可能自定义了一个CButton派生类,重载了OnMouseEnter和OnMouseLeave等消息处理函数,以实现当鼠标进入和离开按钮时改变颜色的效果。颜色变化可以通过设置控件的背景色或者使用位图刷来实现。 ...

    C#自定义控件--美化ComboBox源码

    3. 鼠标悬停效果:在OnMouseEnter和OnMouseLeave事件中改变控件的外观,如边框颜色、背景色等,以增加交互感。 4. 下拉箭头:可以自定义下拉箭头的形状和颜色,甚至可以将其替换为其他图标。 二、扩展功能 1. 搜索...

    阿龙自定义Button和Textbox

    这可以通过重写OnMouseEnter和OnMouseLeave方法实现: ```csharp public class CustomButton : Button { protected override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); this.BackColor = Color....

    自编的按钮控件

    例如,可以增加一个新的自定义属性来存储按钮在鼠标悬停时的颜色,同时在OnMouseEnter和OnMouseLeave事件中分别改变字体颜色。此外,为了实现漂亮的图片按钮效果,可能需要利用TImage组件加载图片,并在按钮的...

    delphi xe TFreeButton 多样式的按钮控件 含demo 源码

    3. **事件响应**:TFreeButton提供了丰富的事件处理机制,包括OnClick、OnMouseEnter、OnMouseLeave等,使得开发者可以方便地响应用户的交互行为。 4. **状态切换**:除了默认的按下和未按下状态,TFreeButton还...

    onmouseover和onmouseout的一些问题思考

    为实现跨浏览器兼容的解决方案,可以使用`onmouseover`和`onmouseout`,并通过检查事件的`relatedTarget`或IE特有属性`fromElement`和`toElement`来模拟`onmouseenter`和`onmouseleave`的行为。下面的示例代码展示了...

    delphi自定义的label_hint单元

    4. 要实现这个功能,我们需要覆盖TLabel的OnMouseEnter和OnMouseLeave事件。在OnMouseEnter中显示Hint,在OnMouseLeave中隐藏Hint。如下所示: ```delphi procedure TCustomLabel.ShowHint(Sender: TObject); begin ...

    渐变式弹出式消息框,实现了窗体渐变,窗体停靠,鼠标经过自动弹出

    例如,可以使用TTimer组件来控制消息框的显示和隐藏时间,用OnMouseEnter和OnMouseLeave事件处理鼠标进入和离开的消息,再配合TAlphaColor和AnimateSmooth方法来实现渐变效果。 总之,这个项目展示了如何通过巧妙的...

Global site tag (gtag.js) - Google Analytics