1 /** 2 * @fileOverview event-mouseenter 3 * @author yiminghe@gmail.com 4 */ 5 KISSY.add('event/mouseenter', function (S, Event, DOM, UA, special) { 6 S.each([ 7 { name:'mouseenter', fix:'mouseover' }, 8 { name:'mouseleave', fix:'mouseout' } 9 ], function (o) { 10 special[o.name] = { 11 // fix #75 12 onFix:o.fix, 13 // all browser need 14 delegateFix:o.fix, 15 handle:function (event, handler, data) { 16 var currentTarget = event.currentTarget, 17 relatedTarget = event.relatedTarget; 18 // 在自身外边就触发 19 // self === document,parent === null 20 // relatedTarget 与 currentTarget 之间就是 mouseenter/leave 21 if (!relatedTarget || 22 (relatedTarget !== currentTarget && 23 !DOM.contains(currentTarget, relatedTarget))) { 24 // http://msdn.microsoft.com/en-us/library/ms536945(v=vs.85).aspx 25 // does not bubble 26 // 2012-04-12 把 mouseover 阻止冒泡有问题! 27 // <div id='0'><div id='1'><div id='2'><div id='3'></div></div></div></div> 28 // 2 mouseover 停止冒泡 29 // 然后快速 2,1 飞过,可能 1 的 mouseover 是 2 冒泡过来的 30 // mouseover 采样时跳跃的,可能 2,1 的 mouseover 事件 31 // target 都是 3,而 relatedTarget 都是 0 32 // event.stopPropagation(); 33 return [handler.fn.call(handler.scope || currentTarget, event, data)]; 34 } 35 return []; 36 } 37 }; 38 }); 39 40 return Event; 41 }, { 42 requires:["./base", "dom", "ua", "./special"] 43 }); 44 45 /** 46 * yiminghe@gmail.com:2011-12-15 47 * - 借鉴 jq 1.7 新的架构 48 * 49 * 承玉:2011-06-07 50 * - 根据新结构,调整 mouseenter 兼容处理 51 * - fire('mouseenter') 可以的,直接执行 mouseenter 的 handlers 用户回调数组 52 */ 53