waterfall directive bug修复

This commit is contained in:
pangxie1991 2017-03-15 17:20:10 +08:00
parent 7cfcaf925d
commit 71f52fd429

View File

@ -30,21 +30,21 @@ function doBindEvent() {
// 处理滚动函数 // 处理滚动函数
function handleScrollEvent() { function handleScrollEvent() {
let element = this.el; const element = this.el;
let scrollEventTarget = this.scrollEventTarget; const scrollEventTarget = this.scrollEventTarget;
// 已被禁止的滚动处理 // 已被禁止的滚动处理
if (this.disabled) return; if (this.disabled) return;
let targetScrollTop = Utils.getScrollTop(scrollEventTarget); const targetScrollTop = Utils.getScrollTop(scrollEventTarget);
let targetBottom = targetScrollTop + Utils.getVisibleHeight(scrollEventTarget); const targetBottom = targetScrollTop + Utils.getVisibleHeight(scrollEventTarget);
// 判断是否到了底 // 判断是否到了底
let needLoadMoreToLower = false; let needLoadMoreToLower = false;
if (element === scrollEventTarget) { if (element === scrollEventTarget) {
needLoadMoreToLower = scrollEventTarget.scollHeight - targetBottom < this.offset; needLoadMoreToLower = scrollEventTarget.scollHeight - targetBottom < this.offset;
} else { } else {
let elementBottom = Utils.getElementTop(element) - Utils.getElementTop(scrollEventTarget) + Utils.getVisibleHeight(element); const elementBottom = Utils.getElementTop(element) - Utils.getElementTop(scrollEventTarget) + Utils.getVisibleHeight(element);
needLoadMoreToLower = elementBottom - Utils.getVisibleHeight(scrollEventTarget) < this.offset; needLoadMoreToLower = elementBottom - Utils.getVisibleHeight(scrollEventTarget) < this.offset;
} }
if (needLoadMoreToLower) { if (needLoadMoreToLower) {
@ -56,7 +56,7 @@ function handleScrollEvent() {
if (element === scrollEventTarget) { if (element === scrollEventTarget) {
needLoadMoreToUpper = targetScrollTop < this.offset; needLoadMoreToUpper = targetScrollTop < this.offset;
} else { } else {
let elementTop = Utils.getElementTop(element) - Utils.getElementTop(scrollEventTarget); const elementTop = Utils.getElementTop(element) - Utils.getElementTop(scrollEventTarget);
needLoadMoreToUpper = elementTop + this.offset > 0; needLoadMoreToUpper = elementTop + this.offset > 0;
} }
if (needLoadMoreToUpper) { if (needLoadMoreToUpper) {
@ -64,6 +64,30 @@ function handleScrollEvent() {
} }
} }
// 绑定事件
function startBind(el) {
const context = el[CONTEXT];
context.vm.$nextTick(function() {
if (Utils.isAttached(el)) {
doBindEvent.call(el[CONTEXT]);
}
});
}
// 确认何时绑事件监听函数
function doCheckStartBind(el) {
const context = el[CONTEXT];
if (context.vm._isMounted) {
startBind(el);
} else {
context.vm.$on('hook:mounted', function() {
startBind(el);
});
}
}
export default function(type) { export default function(type) {
return { return {
bind(el, binding, vnode) { bind(el, binding, vnode) {
@ -76,11 +100,7 @@ export default function(type) {
} }
el[CONTEXT].cb[type] = binding.value; el[CONTEXT].cb[type] = binding.value;
vnode.context.$on('hook:mounted', function() { doCheckStartBind(el);
if (Utils.isAttached(el)) {
doBindEvent.call(el[CONTEXT]);
}
});
}, },
update(el) { update(el) {