榆山
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
5.3 KiB

"use strict";var _observers,_baseComponent=_interopRequireDefault(require("../helpers/baseComponent")),_classNames=_interopRequireDefault(require("../helpers/classNames")),_styleToCssString=_interopRequireDefault(require("../helpers/styleToCssString")),_debounce2=_interopRequireDefault(require("../helpers/debounce")),_utils=require("./utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function ownKeys(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function _objectSpread(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ownKeys(n,!0).forEach(function(e){_defineProperty(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ownKeys(n).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function _defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}(0,_baseComponent.default)({relations:{"../virtual-item/index":{type:"descendant",observer:function(){this.debounce(this.updated)}}},properties:{prefixCls:{type:String,value:"wux-virtual-list"},itemHeight:{type:Number,value:50},itemBuffer:{type:Number,value:0},scrollToIndex:{type:Number,value:0},upperThreshold:{type:Number,value:50},lowerThreshold:{type:Number,value:50},scrollWithAnimation:{type:Boolean,value:!1},enableBackToTop:{type:Boolean,value:!1},disableScroll:{type:Boolean,value:!1},enablePageScroll:{type:Boolean,value:!1},height:{type:Number,value:300},debounce:{type:Number,value:0}},data:{wrapStyle:"",scrollOffset:0,innerScrollOffset:0,startIndex:0,endIndex:-1},computed:{classes:["prefixCls",function(e){return{wrap:(0,_classNames.default)(e),mask:"".concat(e,"__mask"),scrollView:"".concat(e,"__scroll-view"),scrollArea:"".concat(e,"__scroll-area")}}]},observers:(_observers={itemHeight:function(e){this.updated(e)},height:function(e){this.updatedStyle(e)},debounce:function(e){this.setScrollHandler(e)}},_defineProperty(_observers,"enablePageScroll, height, itemHeight, itemBuffer",function(){this.firstRendered&&this.onChange(this.data.scrollOffset,!0)}),_defineProperty(_observers,"scrollToIndex",function(e){this.firstRendered&&this.scrollToIndex(e)}),_observers),methods:{updated:function(e){var n=0<arguments.length&&void 0!==e?e:this.data.itemHeight,t=this.getRelationNodes("../virtual-item/index");0<t.length&&t.forEach(function(e,t){e.updated(t,n)})},updatedStyle:function(e){this.setValue((0,_styleToCssString.default)({height:e}),"wrapStyle")},setValue:function(e,t,n){var r=1<arguments.length&&void 0!==t?t:"scrollOffset",i=2<arguments.length?n:void 0;this.data[r]===e&&!i||this.setData(_defineProperty({},r,e))},loadData:function(e){var t=this,n=this.data,r=n.itemHeight,i=n.startIndex,o=n.endIndex,s=n.scrollOffset,l={items:this.items,itemHeight:r},a={startIndex:i,endIndex:o},c=(0,_utils.mapVirtualToProps)(l,a);this.setData(c,function(){"function"==typeof e&&e.call(t,_objectSpread({},c,{},a,{scrollOffset:s}))})},onChange:function(t,n,r){var i=this,e=this.data,o=e.itemHeight,s=e.height,l=e.itemBuffer,a=e.startIndex,c=e.endIndex,u=e.offsetTop,d=e.enablePageScroll,h=Math.max(0,this.items.length-1),f=t-(d?u:0),p=(0,_utils.getVisibleItemBounds)(f,s,h,o,l),g=p.startIndex!==a||p.endIndex!==c,b=t>this.data.scrollOffset?"Down":"Up",m="Up"==b&&f<a*o,v="Down"==b&&c*o-s<f;void 0===p||p.startIndex>p.endIndex||((g&&(m||v)||n)&&this.setData(p,function(){i.loadData(function(e){n&&i.setValue(t,"innerScrollOffset",!0),i.triggerEvent("change",_objectSpread({},e,{direction:b,scrollOffset:t})),"function"==typeof r&&r.call(i,_objectSpread({},e,{direction:b,scrollOffset:t}))})}),this.setValue(t))},onScroll:function(e){this.onChange(e.detail.scrollTop),this.triggerEvent("scroll",e.detail)},onScrollToUpper:function(e){this.triggerEvent("scrolltoupper",e.detail)},onScrollToLower:function(e){this.triggerEvent("scrolltol