@kirkzwy
2015-10-13T12:08:37.000000Z
字数 5225
阅读 1425
coding
学习
_direction
记录触发的方向
_savePos
记录element的定位信息
_prefixes
浏览器前缀的记录数组
_aniTrans
css trasnlate的属性值
_setTrans
重置css trasnlate的属性值为0
newStyle
新建一个style标签,入面记录各个方向的阴影值
vendor(el, prop)
在相应的标签上相关的属性添加浏览器前缀
css(el, prop)
在相应的标签上设置css
createEl(tag, prop)
生成新的标签
checkDerection(e, pos, sizeQ)
检测事件发生时的进入方向
checkPos(e, pos, size)
记录相关的位置信息
onEnter(e, value)
事件进入时的处理函数
onLeave(e, value)
事件离开时的处理函数
onMove(e, value)
事件移动时的处理函数
sticker.init(dom)
当dom为string时返回相应的的标签,再创建相关的标签进行挂载
1.cpos变量记录container相对于视口的位置及宽高
2.mpos变量记录container相对于document的left和top值
var cpos = value.container.getBoundingClientRect(),
mpos = {x:cpos.left + window.pageXOffset, y:cpos.top + window.pageYOffset};
3.调用checkDerection
函数确定事件发生的进入方向
4.调用checkPos
函数记录位置信息
_savePos = checkPos(e, mpos, value.size);
_savePos.pos = mpos;
5.根据获得的_savePos
值设置相应的css的值
var bx = _savePos.bx, by = _savePos.by, sx = _savePos.sx, sy = _savePos.sy, bs = _savePos.bs;
value.backShadow.className = value.depth.className = 'sticker-shadow ' + bs;
css(value.mask, {
transition: _setTrans,
width: value.size + 'px',
height: value.size + 'px',
transform: 'translate(' + 0 + 'px, ' + 0 + 'px)'
});
css(value.move, {
transition: _setTrans,
transform: 'translate(' + 0 + 'px, ' + 0 + 'px)'
});
css(value.back, {
transition: _setTrans,
transform: 'translate(' + bx + 'px, ' + by + 'px)'
});
css(value.backImg, {
transform: 'scaleX(' + sx + ') scaleY(' + sy + ')'
});
css(value.depth, {
transform: 'translate(' + -10000 + 'px, ' + -10000 + 'px)'
});
1.检测_savePos
是否为null
,是则返回
if (_savePos == null) return;
2.重设为onEnter
的初始状态
var bx = _savePos.bx, by = _savePos.by;
css(value.mask, {
transition: _aniTrans,
width: value.size + 'px',
height: value.size + 'px',
transform: 'translate(' + 0 + 'px, ' + 0 + 'px)'
});
css(value.move, {
transition: _aniTrans,
transform: 'translate(' + 0 + 'px, ' + 0 + 'px)'
});
css(value.back, {
transition: _aniTrans,
transform: 'translate(' + bx + 'px, ' + by + 'px)'
});
css(value.depth, {
transform: 'translate(' + -10000 + 'px, ' + -10000 + 'px)'
});
3.设置_savePos
为null
_savePos = null;
1.传人的pos参数记录发生事件对象的element元素相对于document的x和y值
2.
fx
为contanier相对于document的x值;
fy
为contanier相对于document的x值;
tx
为事件对象发相对于document的x值与fx的差,即事件发生对象距离相关的element元素的x值;
ty
为事件对象发相对于document的y值与fy的差,即事件发生对象距离相关的element元素的y值;
a
为相关element元素的大小与tx
的差值,即事件发生对象与相关element元素右边的距离的正4负值;
b
为相关element元素的大小与ty
的差值,即事件发生对象与相关element元素下边的距离的负值;
c
d
e
f
为tx
ty
a
b
相应值的一半;
var fx = pos.x, fy = pos.y, tx = e.pageX - fx, ty = e.pageY - fy, value,
a = size - tx, b = size - ty, c = tx >> 1, d = ty >> 1, e = a >> 1, f = b >> 1;
3.通过不同的_direction值,即不同的事件发生位置计算value的值
_direction为0,即左侧发生
bx
为-size
,by
为0sx
为-1,sy
为1bs
为shadowL
bmx
为-size+tx
,bmy
为0bsw
为tx
,bsh
为size
bsx
为a
,bsy
为0cw
为size-c
,ch
为size
cx
为c
,cy
为0dw
为c
,dh
为size
dx
为c - (c >> 1)
,dy
为0
(_direction == 0) value = {bx:-size, by:0, sx:-1, sy:1, bs:'shadowL', bmx:-size + tx, bmy:0, bsw:tx, bsh:size, bsx:a, bsy:0, cw:size - c, ch:size, cx:c, cy:0, dw:c, dh:size, dx:c - (c >> 1), dy:0}; // left
_direction为1,即右侧发生
bx
为size
,by
为0sx
为-1,sy
为1bs
为shadowR
bmx
为tx
,bmy
为0bsw
为a
,bsh
为size
bsx
为0,bsy
为0cw
为size-e
,ch
为size
cx
为0,cy
为0dw
为e
,dh
为size
dx
为size - a + (e >> 1)
,dy
为0
(_direction == 1) value = {bx:size, by:0, sx:-1, sy:1, bs:'shadowR', bmx:tx, bmy:0, bsw:a, bsh:size, bsx:0, bsy:0, cw:size - e, ch:size, cx:0, cy:0, dw:e, dh:size, dx:size - a + (e >> 1), dy:0}; // right
_direction为2,即上侧发生
bx
为0,by
为-size
sx
为1,sy
为-1bs
为shadowT
bmx
为0,bmy
为-size+ty
bsw
为size
,bsh
为ty
bsx
为0,bsy
为b
cw
为size
,ch
为size-d
cx
为0,cy
为d
dw
为size
,dh
为d
dx
为0,dy
为d - (d >> 1)
(_direction == 2) value = {bx:0, by:-size, sx:1, sy:-1, bs:'shadowT', bmx:0, bmy:-size + ty, bsw:size, bsh:ty, bsx:0, bsy:b, cw:size, ch:size - d, cx:0, cy:d, dw:size, dh:d, dx:0, dy:d - (d >> 1)}; // top
_direction为3,即下侧发生
bx
为0,by
为size
sx
为1,sy
为-1bs
为shadowB
bmx
为0,bmy
为ty
bsw
为size
,bsh
为b
bsx
为0,bsy
为0cw
为size
,ch
为size-f
cx
为0,cy
为0dw
为size
,dh
为f
dx
为0,dy
为size - b + (f >> 1)
value = {bx:0, by:size, sx:1, sy:-1, bs:'shadowB', bmx:0, bmy:ty, bsw:size, bsh:b, bsx:0, bsy:0, cw:size, ch:size - f, cx:0, cy:0, dw:size, dh:f, dx:0, dy:size - b + (f >> 1)}; // bottom
4.返回value值