import Vue from 'vue'
Vue.directive('scrollGo', {
bind(el, binding) {
let domParents = []
function getDomParent(dom) {
if (dom.parentNode) {
getDomParent(dom.parentNode)
domParents.unshift(dom)
} else {
return false
}
}
el.onclick = (e) => {
getDomParent(e.target)
if (domParents.length) {
if (binding.value && typeof binding.value == 'string') {
let parentSrollDom = null
let arrIndex = []
domParents.forEach(i => {
if (i.style) {
if (getComputedStyle(i, null).overflow == 'auto' || getComputedStyle(i, null).overflowY == 'auto' || getComputedStyle(i, null).overflowY == 'scroll' || getComputedStyle(i, null).overflow == 'scroll') {
arrIndex.push(i)
}
}
})
parentSrollDom = arrIndex[arrIndex.length - 1]
if (binding.value == 'bottom' || binding.value == 'top') {
if (binding.value == 'bottom') {
parentSrollDom.scrollTop = parentSrollDom.scrollHeight
} else {
parentSrollDom.scrollTop = -parentSrollDom.scrollHeight
}
} else {
console.warn(`指令期望值为bottom或top,当前值为${binding.value}`)
}
// console.log(parentSrollDom)
} else {
console.warn(`指令期望值为string类型,当前为${typeof binding.value}类型`)
}
} else {
console.error('指令获取父元素失败')
}
}
},
// inserted(el, binding, vnode) {},
// update(el, binding, vnode, oldVnode) {},
// componentUpdated(el, binding, vnode) {},
unbind(el) {
el.onclick = null
},
});
解决需求:vue中有的时候使用scrollTo属性无效时,可使用该指令,该指令会获取到当前的滚动元素,然后对滚动元素进行控制。