diff --git a/packages/waterfall/directive.js b/packages/waterfall/directive.js
index f10b536ee..c25f53ea3 100644
--- a/packages/waterfall/directive.js
+++ b/packages/waterfall/directive.js
@@ -32,12 +32,16 @@ function doBindEvent() {
function handleScrollEvent() {
const element = this.el;
const scrollEventTarget = this.scrollEventTarget;
-
// 已被禁止的滚动处理
if (this.disabled) return;
const targetScrollTop = Utils.getScrollTop(scrollEventTarget);
- const targetBottom = targetScrollTop + Utils.getVisibleHeight(scrollEventTarget);
+ const targetVisibleHeight = Utils.getVisibleHeight(scrollEventTarget);
+ // 滚动元素可视区域下边沿到滚动元素元素最顶上 距离
+ const targetBottom = targetScrollTop + targetVisibleHeight;
+
+ // 如果无元素高度,考虑为元素隐藏,直接返回
+ if (!targetVisibleHeight) return;
// 判断是否到了底
let needLoadMoreToLower = false;
@@ -45,7 +49,7 @@ function handleScrollEvent() {
needLoadMoreToLower = scrollEventTarget.scrollHeight - targetBottom < this.offset;
} else {
const elementBottom = Utils.getElementTop(element) - Utils.getElementTop(scrollEventTarget) + Utils.getVisibleHeight(element);
- needLoadMoreToLower = elementBottom - Utils.getVisibleHeight(scrollEventTarget) < this.offset;
+ needLoadMoreToLower = elementBottom - targetVisibleHeight < this.offset;
}
if (needLoadMoreToLower) {
this.cb['lower'] && this.cb['lower']({ target: scrollEventTarget, top: targetScrollTop });
diff --git a/packages/waterfall/index.js b/packages/waterfall/index.js
index 02665b9a1..65761ea78 100644
--- a/packages/waterfall/index.js
+++ b/packages/waterfall/index.js
@@ -1,14 +1,9 @@
import Waterfall from './directive.js';
-import Vue from 'vue';
const install = function(Vue) {
Vue.directive('WaterfallLower', Waterfall('lower'));
Vue.directive('WaterfallUpper', Waterfall('upper'));
};
-if (!Vue.prototype.$isServer) {
- Vue.use(install);
-}
-
Waterfall.install = install;
export default Waterfall;
diff --git a/test/unit/components/waterfall/waterfall-hide.vue b/test/unit/components/waterfall/waterfall-hide.vue
new file mode 100644
index 000000000..72bd7d776
--- /dev/null
+++ b/test/unit/components/waterfall/waterfall-hide.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/test/unit/get-webpack-conf.js b/test/unit/get-webpack-conf.js
index d583169ad..1d7c19094 100644
--- a/test/unit/get-webpack-conf.js
+++ b/test/unit/get-webpack-conf.js
@@ -58,7 +58,10 @@ function getWebpackConfig(testFileName) {
},
{
test: /\.(css|pcss)$/,
- use: ['style-loader', 'css-loader', 'postcss-loader']
+ use: ['style-loader', 'css-loader', {
+ loader: 'postcss-loader',
+ options: { sourceMap: true }
+ }]
},
{
test: /\.(gif|png|jpe?g)(\?\S*)?$/,
@@ -75,13 +78,16 @@ function getWebpackConfig(testFileName) {
]
},
{
- test: /test\/unit\/components\/.*\.vue$|packages\/swipe\/.*\.vue$/,
+ test: /test\/unit\/components\/.*\.vue$|packages\/swipe.*\.vue$/,
use: [
{
loader: 'vue-loader',
options: {
loaders: {
- css: ['style-loader', 'css-loader', 'postcss-loader']
+ css: ['style-loader', 'css-loader', {
+ loader: 'postcss-loader',
+ options: { sourceMap: true }
+ }]
}
}
}
@@ -89,13 +95,16 @@ function getWebpackConfig(testFileName) {
},
{
test: /packages\/.*\.vue$/,
- exclude: /packages\/swipe\/.*\.vue$/,
+ exclude: /packages\/swipe.*\.vue$/,
use: [
{
loader: 'vue-loader',
options: {
loaders: {
- css: ['style-loader', 'css-loader', 'postcss-loader'],
+ css: ['style-loader', 'css-loader', {
+ loader: 'postcss-loader',
+ options: { sourceMap: true }
+ }],
js: ['isparta-loader']
}
}
diff --git a/test/unit/specs/waterfall.spec.js b/test/unit/specs/waterfall.spec.js
index 9fa126a34..5c0295936 100644
--- a/test/unit/specs/waterfall.spec.js
+++ b/test/unit/specs/waterfall.spec.js
@@ -1,4 +1,5 @@
import Waterfall from '../components/waterfall/waterfall';
+import HiddenWaterfall from '../components/waterfall/waterfall-hide';
import { mount } from 'avoriaz';
describe('Waterfall', () => {
@@ -69,4 +70,22 @@ describe('Waterfall', () => {
done();
}, 500);
});
+
+ it('test waterfall function after hide', (done) => {
+ const waterfallLowerSpy = sinon.spy();
+ wrapper = mount(HiddenWaterfall, {
+ attachToDocument: true,
+ propsData: {
+ show: false,
+ disabled: false,
+ list: [{ id: 10 }],
+ onWaterfallLower: waterfallLowerSpy
+ }
+ });
+
+ setTimeout(() => {
+ expect(waterfallLowerSpy.called).to.be.false;
+ done();
+ }, 500);
+ });
});