¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- #ifdef APP-NVUE --> |
| | | <list |
| | | class="u-list" |
| | | :enableBackToTop="enableBackToTop" |
| | | :loadmoreoffset="lowerThreshold" |
| | | :showScrollbar="showScrollbar" |
| | | :style="[listStyle]" |
| | | :offset-accuracy="Number(offsetAccuracy)" |
| | | @scroll="onScroll" |
| | | @loadmore="scrolltolower" |
| | | > |
| | | <slot /> |
| | | </list> |
| | | <!-- #endif --> |
| | | <!-- #ifndef APP-NVUE --> |
| | | <scroll-view |
| | | class="u-list" |
| | | :scroll-into-view="scrollIntoView" |
| | | :style="[listStyle]" |
| | | scroll-y |
| | | :scroll-top="Number(scrollTop)" |
| | | :lower-threshold="Number(lowerThreshold)" |
| | | :upper-threshold="Number(upperThreshold)" |
| | | :show-scrollbar="showScrollbar" |
| | | :enable-back-to-top="enableBackToTop" |
| | | :scroll-with-animation="scrollWithAnimation" |
| | | @scroll="onScroll" |
| | | @scrolltolower="scrolltolower" |
| | | @scrolltoupper="scrolltoupper" |
| | | > |
| | | <view> |
| | | <slot /> |
| | | </view> |
| | | </scroll-view> |
| | | <!-- #endif --> |
| | | </template> |
| | | |
| | | <script> |
| | | import props from './props.js'; |
| | | // #ifdef APP-NVUE |
| | | const dom = uni.requireNativePlugin('dom') |
| | | // #endif |
| | | /** |
| | | * List å表 |
| | | * @description 该ç»ä»¶ä¸ºé«æ§è½å表ç»ä»¶ |
| | | * @tutorial https://www.uviewui.com/components/list.html |
| | | * @property {Boolean} showScrollbar æ§å¶æ¯å¦åºç°æ»å¨æ¡ï¼ä»
nvueææ ï¼é»è®¤ false ï¼ |
| | | * @property {String ï½ Number} lowerThreshold è·åºé¨å¤å°æ¶è§¦åscrolltoloweräºä»¶ ï¼é»è®¤ 50 ï¼ |
| | | * @property {String ï½ Number} upperThreshold è·é¡¶é¨å¤å°æ¶è§¦åscrolltoupperäºä»¶ï¼énvueææ ï¼é»è®¤ 0 ï¼ |
| | | * @property {String ï½ Number} scrollTop 设置ç«åæ»å¨æ¡ä½ç½®ï¼é»è®¤ 0 ï¼ |
| | | * @property {String ï½ Number} offsetAccuracy æ§å¶ onscroll äºä»¶è§¦åçé¢çï¼ä»
nvueææï¼é»è®¤ 10 ï¼ |
| | | * @property {Boolean} enableFlex å¯ç¨ flexbox å¸å±ãå¼å¯åï¼å½åèç¹å£°æäºdisplay: flexå°±ä¼æä¸ºflex containerï¼å¹¶ä½ç¨äºå
¶å©åèç¹ï¼ä»
微信å°ç¨åºææï¼é»è®¤ false ï¼ |
| | | * @property {Boolean} pagingEnabled æ¯å¦æåé¡µæ¨¡å¼æ¾ç¤ºListï¼ï¼é»è®¤ false ï¼ |
| | | * @property {Boolean} scrollable æ¯å¦å
许Listæ»å¨ï¼é»è®¤ true ï¼ |
| | | * @property {String} scrollIntoView å¼åºä¸ºæåå
ç´ idï¼idä¸è½ä»¥æ°åå¼å¤´ï¼ |
| | | * @property {Boolean} scrollWithAnimation å¨è®¾ç½®æ»å¨æ¡ä½ç½®æ¶ä½¿ç¨å¨ç»è¿æ¸¡ ï¼é»è®¤ false ï¼ |
| | | * @property {Boolean} enableBackToTop iOSç¹å»é¡¶é¨ç¶ææ ãå®åå廿 颿 æ¶ï¼æ»å¨æ¡è¿åé¡¶é¨ï¼åªå¯¹å¾®ä¿¡å°ç¨åºææ ï¼é»è®¤ false ï¼ |
| | | * @property {String ï½ Number} height å表çé«åº¦ ï¼é»è®¤ 0 ï¼ |
| | | * @property {String ï½ Number} width å表宽度 ï¼é»è®¤ 0 ï¼ |
| | | * @property {String ï½ Number} preLoadScreen å表åå颿¸²æç屿°ï¼1代表ä¸ä¸ªå±å¹çé«åº¦ï¼1.5代表1个åå±å¹é«åº¦ ï¼é»è®¤ 1 ï¼ |
| | | * @property {Object} customStyle å®ä¹éè¦ç¨å°çå¤é¨æ ·å¼ |
| | | * |
| | | * @example <u-list @scrolltolower="scrolltolower"></u-list> |
| | | */ |
| | | export default { |
| | | name: 'u-list', |
| | | mixins: [uni.$u.mpMixin, uni.$u.mixin,props], |
| | | watch: { |
| | | scrollIntoView(n) { |
| | | this.scrollIntoViewById(n) |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | // è®°å½å
鍿»å¨çè·ç¦» |
| | | innerScrollTop: 0, |
| | | // vueä¸ï¼scroll-viewå¨ä¸æå è½½æ¶çåç§»å¼ |
| | | offset: 0, |
| | | sys: uni.$u.sys() |
| | | } |
| | | }, |
| | | computed: { |
| | | listStyle() { |
| | | const style = {}, |
| | | addUnit = uni.$u.addUnit |
| | | if (this.width != 0) style.width = addUnit(this.width) |
| | | if (this.height != 0) style.height = addUnit(this.height) |
| | | // å¦ææ²¡æå®ä¹å表é«åº¦ï¼åé»è®¤ä½¿ç¨å±å¹é«åº¦ |
| | | if (!style.height) style.height = addUnit(this.sys.windowHeight, 'px') |
| | | return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle)) |
| | | } |
| | | }, |
| | | provide() { |
| | | return { |
| | | uList: this |
| | | } |
| | | }, |
| | | created() { |
| | | this.refs = [] |
| | | this.children = [] |
| | | this.anchors = [] |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | updateOffsetFromChild(top) { |
| | | this.offset = top |
| | | }, |
| | | onScroll(e) { |
| | | let scrollTop = 0 |
| | | // #ifdef APP-NVUE |
| | | scrollTop = e.contentOffset.y |
| | | // #endif |
| | | // #ifndef APP-NVUE |
| | | scrollTop = e.detail.scrollTop |
| | | // #endif |
| | | this.innerScrollTop = scrollTop |
| | | this.$emit('scroll', Math.abs(scrollTop)) |
| | | }, |
| | | scrollIntoViewById(id) { |
| | | // #ifdef APP-NVUE |
| | | // æ ¹æ®idåæ°ï¼æ¾å°ææu-list-itemä¸å¹é
çèç¹ï¼åéè¿domæ¨¡åæ»å¨å°å¯¹åºçä½ç½® |
| | | const item = this.refs.find(item => item.$refs[id] ? true : false) |
| | | dom.scrollToElement(item.$refs[id], { |
| | | // æ¯å¦éè¦æ»å¨å¨ç» |
| | | animated: this.scrollWithAnimation |
| | | }) |
| | | // #endif |
| | | }, |
| | | // æ»å¨å°åºé¨è§¦åäºä»¶ |
| | | scrolltolower(e) { |
| | | uni.$u.sleep(30).then(() => { |
| | | this.$emit('scrolltolower') |
| | | }) |
| | | }, |
| | | // #ifndef APP-NVUE |
| | | // æ»å¨å°åºé¨æ¶è§¦åï¼énvueææ |
| | | scrolltoupper(e) { |
| | | uni.$u.sleep(30).then(() => { |
| | | this.$emit('scrolltoupper') |
| | | // è¿ä¸å¥å¾éè¦ï¼è½ç»å¯¹ä¿è¯å¨æ§åè½éç¢çwebviewï¼æ»å¨æ¡å°é¡¶æ¶ï¼åæ¶åç§»å¼ï¼è®©é¡µé¢ç½®é¡¶ |
| | | this.offset = 0 |
| | | }) |
| | | } |
| | | // #endif |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "../../libs/css/components.scss"; |
| | | |
| | | .u-list { |
| | | @include flex(column); |
| | | |
| | | } |
| | | </style> |