|
|
/**
|
|
|
*Description: 商品自定义事件
|
|
|
*Author: chenglong.wang@yoho.cn
|
|
|
*Date: 2015/12/3
|
|
|
*/
|
|
|
|
|
|
var $ = require('yoho-jquery');
|
|
|
|
|
|
function ProductEvent() {
|
|
|
|
|
|
this.handlers = {};
|
|
|
|
|
|
}
|
|
|
|
|
|
ProductEvent.prototype = {
|
|
|
|
|
|
constructor: ProductEvent,
|
|
|
|
|
|
addHandler: function(type, handler) {
|
|
|
if (typeof this.handlers[type] === 'undefined') {
|
|
|
this.handlers[type] = [];
|
|
|
}
|
|
|
this.handlers[type].push(handler);
|
|
|
},
|
|
|
|
|
|
fire: function(event) {
|
|
|
var handlers,
|
|
|
i;
|
|
|
|
|
|
if (!event.target) {
|
|
|
|
|
|
event.target = this;
|
|
|
}
|
|
|
if (this.handlers[event.type] instanceof Array) {
|
|
|
handlers = this.handlers[event.type];
|
|
|
for (i = 0; i < handlers.length; i++) {
|
|
|
handlers[i](event);
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
|
|
|
removeHandler: function(type, handler) {
|
|
|
var handlers,
|
|
|
i;
|
|
|
|
|
|
if (this.handlers[type] instanceof Array) {
|
|
|
handlers = this.handlers[type];
|
|
|
for (i = 0; i < handlers.length; i++) {
|
|
|
if (handlers[i] === handler) {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
handlers.splice(i, 1);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
module.exports = function($o, rowWidth) {
|
|
|
|
|
|
var pMouseHover = new ProductEvent();
|
|
|
|
|
|
var targetWidth = $o.eq(0).width(),
|
|
|
targetHeight = $o.eq(0).height(),
|
|
|
winW = $(window).width();
|
|
|
|
|
|
var delayFunc,
|
|
|
loadInfo;
|
|
|
|
|
|
function handleEvent(event) {
|
|
|
var $target,
|
|
|
targetX = 0,
|
|
|
targetY = 0,
|
|
|
rowW = rowWidth,
|
|
|
activeIndex = 0,
|
|
|
$targetDuplicate = '',
|
|
|
offsetL = 0,
|
|
|
offsetR = 0;
|
|
|
|
|
|
|
|
|
switch (event.type) {
|
|
|
case 'mouseenter':
|
|
|
$target = $(this);
|
|
|
|
|
|
delayFunc = setTimeout(function() {
|
|
|
loadInfo = true;
|
|
|
$targetDuplicate = $target.clone();
|
|
|
activeIndex = $target.index() + 1;
|
|
|
targetX = (activeIndex % rowW) === 0 ? rowW : activeIndex % rowW;
|
|
|
targetY = Math.ceil(activeIndex / rowW);
|
|
|
offsetL = $target.offset().left;
|
|
|
offsetR = winW - (offsetL + targetWidth);
|
|
|
|
|
|
pMouseHover.fire({
|
|
|
type: 'MouseEnter',
|
|
|
target: $target,
|
|
|
targetWidth: targetWidth,
|
|
|
targetHeight: targetHeight,
|
|
|
targetX: targetX,
|
|
|
targetY: targetY,
|
|
|
rowWidth: rowW,
|
|
|
activeIndex: activeIndex,
|
|
|
targetDuplicate: $targetDuplicate,
|
|
|
offsetL: offsetL,
|
|
|
offsetR: offsetR
|
|
|
});
|
|
|
}, 150);
|
|
|
break;
|
|
|
case 'mouseleave':
|
|
|
if (!loadInfo) {
|
|
|
if (delayFunc) {
|
|
|
clearTimeout(delayFunc);
|
|
|
}
|
|
|
pMouseHover.fire({
|
|
|
type: 'MouseLeave'
|
|
|
});
|
|
|
}
|
|
|
loadInfo = false;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$o.bind({
|
|
|
mouseenter: handleEvent,
|
|
|
mouseleave: handleEvent
|
|
|
});
|
|
|
|
|
|
return pMouseHover;
|
|
|
}; |
...
|
...
|
|