60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
function getScroll (w, top) {
|
|
let ret = top ? w.pageYOffset : w.pageXOffset
|
|
const method = top ? 'scrollTop' : 'scrollLeft'
|
|
if (typeof ret !== 'number') {
|
|
const d = w.document
|
|
// ie6,7,8 standard mode
|
|
ret = d.documentElement[method]
|
|
if (typeof ret !== 'number') {
|
|
// quirks mode
|
|
ret = d.body[method]
|
|
}
|
|
}
|
|
return ret
|
|
}
|
|
|
|
function getClientPosition (elem) {
|
|
let x
|
|
let y
|
|
const doc = elem.ownerDocument
|
|
const body = doc.body
|
|
const docElem = doc && doc.documentElement
|
|
const box = elem.getBoundingClientRect()
|
|
x = box.left
|
|
y = box.top
|
|
x -= docElem.clientLeft || body.clientLeft || 0
|
|
y -= docElem.clientTop || body.clientTop || 0
|
|
return {
|
|
left: x,
|
|
top: y,
|
|
}
|
|
}
|
|
|
|
export function getOffsetLeft (el) {
|
|
const pos = getClientPosition(el)
|
|
const doc = el.ownerDocument
|
|
const w = doc.defaultView || doc.parentWindow
|
|
pos.left += getScroll(w)
|
|
return pos.left
|
|
}
|
|
|
|
export function deepClone (vnodes, createElement) {
|
|
function cloneVNode (vnode) {
|
|
const clonedChildren = vnode.children && vnode.children.map(vnode => cloneVNode(vnode))
|
|
const cloned = createElement(vnode.tag, vnode.data, clonedChildren)
|
|
cloned.text = vnode.text
|
|
cloned.isComment = vnode.isComment
|
|
cloned.componentOptions = vnode.componentOptions
|
|
cloned.elm = vnode.elm
|
|
cloned.context = vnode.context
|
|
cloned.ns = vnode.ns
|
|
cloned.isStatic = vnode.isStatic
|
|
cloned.key = vnode.key
|
|
|
|
return cloned
|
|
}
|
|
|
|
const clonedVNodes = vnodes.map(vnode => cloneVNode(vnode))
|
|
return clonedVNodes
|
|
}
|