<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的代码 在网页开发中,事件处理是一项基础而重要的技术。在不同的浏览器中,对于同一种事件的处理可能会存在差异。例如,Internet Explorer(IE)...
今天在网上搜了一下,找了以下的解决办法(兼容IE和Firefox)。 在IE下解决问题很简单,用onMouseEnter、onMouseLeave来代替onMouseOver、onMouseOut就行了,他们的作用基本相同,但前者不会发生冒泡(如果用 jQuery...
在Delphi 7中,Panel控件作为常用的布局容器,提供了丰富的功能,但默认情况下并未直接提供鼠标进入(OnMouseEnter)和鼠标离开(OnMouseLeave)事件。这两个事件在许多用户界面设计中非常有用,例如高亮显示、提示...
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
4. **处理OnMouseEnter和OnMouseLeave事件**:为了实现类似ShowHint的效果,可以为TMenuItem添加OnMouseEnter和OnMouseLeave事件处理程序。当鼠标进入菜单项时,显示Hint;离开时,隐藏Hint。这可以通过控制...
+ 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
这是一个在Delphi2010中提供的气泡形提示用的组件,在Delphi2007中是没有的。本人从Delphi2010中将它抠出来... 这里提供一个例子说明它的用法:仅需编写需要显示提示信息的组件的OnMouseEnter、OnMouseLeave事件即可。
* 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" ...
支持onMouseEnter和onMouseLeave事件( ) 重新实现本地hitSlop道具( ) 创建一个库来播放声音( ) 支持pointerEvents道具( ) 添加组件( ) 添加组件( ) 将cursor道具添加到<View> ( ) 派生@react-...
4. **在适当的地方调用Enlarge和Restore方法**:在`OnMouseEnter`和`OnMouseLeave`中调用相应的放大和恢复方法。 ```csharp protected override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); Enlarge...
记录两个项目开发中遇到的问题,一个是ECharts外部调用保存为图片操作,一个是workflow工作流连接曲线onmouseenter和onmouseleave事件由于鼠标移动过快触发问题。 一、外部按钮调用ECharts图表的保存为图片操作 ...
在本项目中,开发者可能自定义了一个CButton派生类,重载了OnMouseEnter和OnMouseLeave等消息处理函数,以实现当鼠标进入和离开按钮时改变颜色的效果。颜色变化可以通过设置控件的背景色或者使用位图刷来实现。 ...
3. 鼠标悬停效果:在OnMouseEnter和OnMouseLeave事件中改变控件的外观,如边框颜色、背景色等,以增加交互感。 4. 下拉箭头:可以自定义下拉箭头的形状和颜色,甚至可以将其替换为其他图标。 二、扩展功能 1. 搜索...
这可以通过重写OnMouseEnter和OnMouseLeave方法实现: ```csharp public class CustomButton : Button { protected override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); this.BackColor = Color....
例如,可以增加一个新的自定义属性来存储按钮在鼠标悬停时的颜色,同时在OnMouseEnter和OnMouseLeave事件中分别改变字体颜色。此外,为了实现漂亮的图片按钮效果,可能需要利用TImage组件加载图片,并在按钮的...
3. **事件响应**:TFreeButton提供了丰富的事件处理机制,包括OnClick、OnMouseEnter、OnMouseLeave等,使得开发者可以方便地响应用户的交互行为。 4. **状态切换**:除了默认的按下和未按下状态,TFreeButton还...
为实现跨浏览器兼容的解决方案,可以使用`onmouseover`和`onmouseout`,并通过检查事件的`relatedTarget`或IE特有属性`fromElement`和`toElement`来模拟`onmouseenter`和`onmouseleave`的行为。下面的示例代码展示了...
4. 要实现这个功能,我们需要覆盖TLabel的OnMouseEnter和OnMouseLeave事件。在OnMouseEnter中显示Hint,在OnMouseLeave中隐藏Hint。如下所示: ```delphi procedure TCustomLabel.ShowHint(Sender: TObject); begin ...
例如,可以使用TTimer组件来控制消息框的显示和隐藏时间,用OnMouseEnter和OnMouseLeave事件处理鼠标进入和离开的消息,再配合TAlphaColor和AnimateSmooth方法来实现渐变效果。 总之,这个项目展示了如何通过巧妙的...