1 line
19 KiB
Plaintext
1 line
19 KiB
Plaintext
{"version":3,"file":"su-tabs.js","sources":["../../../../../../src/sheep/ui/su-tabs/su-tabs.vue","../../../../../../uniComponent:/RDovQXBwL1dvcmsvYWRkci9hY2RyLXVpL3NyYy9zaGVlcC91aS9zdS10YWJzL3N1LXRhYnMudnVl"],"sourcesContent":["<template>\r\n <view class=\"u-tabs\">\r\n <view class=\"u-tabs__wrapper\">\r\n <slot name=\"left\" />\r\n <view class=\"u-tabs__wrapper__scroll-view-wrapper\">\r\n <scroll-view\r\n :scroll-x=\"scrollable\"\r\n :scroll-left=\"scrollLeft\"\r\n scroll-with-animation\r\n enable-flex\r\n class=\"u-tabs__wrapper__scroll-view white-space\"\r\n :show-scrollbar=\"false\"\r\n ref=\"u-tabs__wrapper__scroll-view\"\r\n >\r\n <view class=\"u-tabs__wrapper__nav\" ref=\"u-tabs__wrapper__nav\">\r\n <view\r\n class=\"u-tabs__wrapper__nav__item\"\r\n v-for=\"(item, index) in list\"\r\n :key=\"index\"\r\n @tap=\"clickHandler(item, index)\"\r\n :ref=\"`u-tabs__wrapper__nav__item-${index}`\"\r\n :style=\"[addStyle(itemStyle), { flex: scrollable ? '' : 1 }]\"\r\n :class=\"[\r\n `u-tabs__wrapper__nav__item-${index}`,\r\n item.disabled && 'u-tabs__wrapper__nav__item--disabled',\r\n ]\"\r\n >\r\n <text\r\n :class=\"[item.disabled && 'u-tabs__wrapper__nav__item__text--disabled']\"\r\n class=\"u-tabs__wrapper__nav__item__text\"\r\n :style=\"[textStyle(index)]\"\r\n >\r\n {{ item[keyName] }}\r\n </text>\r\n </view>\r\n <!-- #ifdef APP-NVUE -->\r\n <view\r\n class=\"u-tabs__wrapper__nav__line\"\r\n ref=\"u-tabs__wrapper__nav__line\"\r\n :style=\"[\r\n {\r\n width: addUnit(lineWidth),\r\n height: addUnit(lineHeight),\r\n background: lineColor ? lineColor : 'var(--ui-BG-Main)',\r\n backgroundSize: lineBgSize,\r\n },\r\n ]\"\r\n ></view>\r\n <!-- #endif -->\r\n <!-- #ifndef APP-NVUE -->\r\n <view\r\n class=\"u-tabs__wrapper__nav__line\"\r\n ref=\"u-tabs__wrapper__nav__line\"\r\n :style=\"[\r\n {\r\n width: addUnit(lineWidth),\r\n transform: `translate(${lineOffsetLeft}px)`,\r\n transitionDuration: `${firstTime ? 0 : duration}ms`,\r\n height: addUnit(lineHeight),\r\n background: lineColor ? lineColor : 'var(--ui-BG-Main)',\r\n backgroundSize: lineBgSize,\r\n },\r\n ]\"\r\n ></view>\r\n <!-- #endif -->\r\n </view>\r\n </scroll-view>\r\n </view>\r\n <slot name=\"right\" />\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script>\r\nimport { deepMerge, addStyle, addUnit, sleep, getPx, sys } from '@/sheep/helper'\r\n// #ifdef APP-NVUE\r\nconst animation = uni.requireNativePlugin('animation')\r\nconst dom = uni.requireNativePlugin('dom')\r\n// #endif\r\n\r\n/**\r\n * Tabs 标签\r\n * @description tabs标签组件,在标签多的时候,可以配置为左右滑动,标签少的时候,可以禁止滑动。 该组件的一个特点是配置为滚动模式时,激活的tab会自动移动到组件的中间位置。\r\n * @tutorial https://www.uviewui.com/components/tabs.html\r\n * @property {String | Number}\tduration\t\t\t滑块移动一次所需的时间,单位秒(默认 200 )\r\n * @property {String | Number}\tswierWidth\t\t\tswiper的宽度(默认 '750rpx' )\r\n * @property {String}\tkeyName\t 从`list`元素对象中读取的键名(默认 'name' )\r\n * @event {Function(index)} change 标签改变时触发 index: 点击了第几个tab,索引从0开始\r\n * @event {Function(index)} click 点击标签时触发 index: 点击了第几个tab,索引从0开始\r\n * @example <u-tabs :list=\"list\" :is-scroll=\"false\" :current=\"current\" @change=\"change\"></u-tabs>\r\n */\r\nexport default {\r\n name: 'su-tabs',\r\n data() {\r\n return {\r\n addStyle,\r\n addUnit,\r\n firstTime: true,\r\n scrollLeft: 0,\r\n scrollViewWidth: 0,\r\n lineOffsetLeft: 0,\r\n tabsRect: {\r\n left: 0,\r\n },\r\n innerCurrent: 0,\r\n moving: false,\r\n }\r\n },\r\n props: {\r\n // 滑块的移动过渡时间,单位ms\r\n duration: {\r\n type: Number,\r\n default: 300,\r\n },\r\n // tabs标签数组\r\n list: {\r\n type: Array,\r\n default: [],\r\n },\r\n // 滑块颜色\r\n lineColor: {\r\n type: String,\r\n default: '',\r\n },\r\n // 菜单选择中时的样式\r\n activeStyle: {\r\n type: [String, Object],\r\n default() {\r\n return {\r\n color: '#303133',\r\n }\r\n },\r\n },\r\n // 菜单非选中时的样式\r\n inactiveStyle: {\r\n type: [String, Object],\r\n default() {\r\n return {\r\n color: '#606266',\r\n }\r\n },\r\n },\r\n // 滑块长度\r\n lineWidth: {\r\n type: [String, Number],\r\n default: 20,\r\n },\r\n // 滑块高度\r\n lineHeight: {\r\n type: [String, Number],\r\n default: 3,\r\n },\r\n // 滑块背景显示大小,当滑块背景设置为图片时使用\r\n lineBgSize: {\r\n type: String,\r\n default: 'cover',\r\n },\r\n // 菜单item的样式\r\n itemStyle: {\r\n type: [String, Object],\r\n default() {\r\n return {\r\n height: '44px',\r\n }\r\n },\r\n },\r\n // 菜单是否可滚动\r\n scrollable: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n // 当前选中标签的索引\r\n current: {\r\n type: [Number, String],\r\n default: 0,\r\n },\r\n // 默认读取的键名\r\n keyName: {\r\n type: String,\r\n default: 'name',\r\n },\r\n },\r\n watch: {\r\n current: {\r\n immediate: true,\r\n handler(newValue, oldValue) {\r\n // 内外部值不相等时,才尝试移动滑块\r\n if (newValue !== this.innerCurrent) {\r\n this.innerCurrent = newValue\r\n this.$nextTick(() => {\r\n this.resize()\r\n })\r\n }\r\n },\r\n },\r\n // list变化时,重新渲染list各项信息\r\n list() {\r\n this.$nextTick(() => {\r\n this.resize()\r\n })\r\n },\r\n },\r\n computed: {\r\n textStyle() {\r\n return (index) => {\r\n const style = {}\r\n // 取当期是否激活的样式\r\n const customeStyle =\r\n index === this.innerCurrent ? addStyle(this.activeStyle) : addStyle(this.inactiveStyle)\r\n // 如果当前菜单被禁用,则加上对应颜色,需要在此做处理,是因为nvue下,无法在style样式中通过!import覆盖标签的内联样式\r\n if (this.list[index].disabled) {\r\n style.color = '#c8c9cc'\r\n }\r\n return deepMerge(customeStyle, style)\r\n }\r\n },\r\n },\r\n async mounted() {\r\n this.init()\r\n },\r\n methods: {\r\n $uGetRect(selector, all) {\r\n return new Promise((resolve) => {\r\n uni\r\n .createSelectorQuery()\r\n .in(this)\r\n [all ? 'selectAll' : 'select'](selector)\r\n .boundingClientRect((rect) => {\r\n if (all && Array.isArray(rect) && rect.length) {\r\n resolve(rect)\r\n }\r\n if (!all && rect) {\r\n resolve(rect)\r\n }\r\n })\r\n .exec()\r\n })\r\n },\r\n setLineLeft() {\r\n const tabItem = this.list[this.innerCurrent]\r\n if (!tabItem) {\r\n return\r\n }\r\n // 获取滑块该移动的位置\r\n const lineOffsetLeft = this.list\r\n .slice(0, this.innerCurrent)\r\n .reduce((total, curr) => total + curr.rect.width, 0)\r\n // 获取下划线的数值px表示法\r\n const lineWidth = getPx(this.lineWidth)\r\n this.lineOffsetLeft = lineOffsetLeft + (tabItem.rect.width - lineWidth) / 2\r\n // #ifdef APP-NVUE\r\n // 第一次移动滑块,无需过渡时间\r\n this.animation(this.lineOffsetLeft, this.firstTime ? 0 : parseInt(this.duration))\r\n // #endif\r\n\r\n // 如果是第一次执行此方法,让滑块在初始化时,瞬间滑动到第一个tab item的中间\r\n // 这里需要一个定时器,因为在非nvue下,是直接通过style绑定过渡时间,需要等其过渡完成后,再设置为false(非第一次移动滑块)\r\n if (this.firstTime) {\r\n setTimeout(() => {\r\n this.firstTime = false\r\n }, 10)\r\n }\r\n },\r\n // nvue下设置滑块的位置\r\n animation(x, duration = 0) {\r\n // #ifdef APP-NVUE\r\n const ref = this.$refs['u-tabs__wrapper__nav__line']\r\n animation.transition(ref, {\r\n styles: {\r\n transform: `translateX(${x}px)`,\r\n },\r\n duration,\r\n })\r\n // #endif\r\n },\r\n // 点击某一个标签\r\n clickHandler(item, index) {\r\n // 因为标签可能为disabled状态,所以click是一定会发出的,但是change事件是需要可用的状态才发出\r\n this.$emit('click', {\r\n ...item,\r\n index,\r\n })\r\n // 如果disabled状态,返回\r\n if (item.disabled) return\r\n this.innerCurrent = index\r\n this.resize()\r\n this.$emit('change', {\r\n ...item,\r\n index,\r\n })\r\n },\r\n init() {\r\n sleep().then(() => {\r\n this.resize()\r\n })\r\n },\r\n setScrollLeft() {\r\n // 当前活动tab的布局信息,有tab菜单的width和left(为元素左边界到父元素左边界的距离)等信息\r\n const tabRect = this.list[this.innerCurrent]\r\n // 累加得到当前item到左边的距离\r\n const offsetLeft = this.list.slice(0, this.innerCurrent).reduce((total, curr) => {\r\n return total + curr.rect.width\r\n }, 0)\r\n // 此处为屏幕宽度\r\n const windowWidth = sys().windowWidth\r\n // 将活动的tabs-item移动到屏幕正中间,实际上是对scroll-view的移动\r\n let scrollLeft =\r\n offsetLeft -\r\n (this.tabsRect.width - tabRect.rect.width) / 2 -\r\n (windowWidth - this.tabsRect.right) / 2 +\r\n this.tabsRect.left / 2\r\n // 这里做一个限制,限制scrollLeft的最大值为整个scroll-view宽度减去tabs组件的宽度\r\n scrollLeft = Math.min(scrollLeft, this.scrollViewWidth - this.tabsRect.width)\r\n this.scrollLeft = Math.max(0, scrollLeft)\r\n },\r\n // 获取所有标签的尺寸\r\n resize() {\r\n // 如果不存在list,则不处理\r\n if (this.list.length === 0) {\r\n return\r\n }\r\n Promise.all([this.getTabsRect(), this.getAllItemRect()]).then(([tabsRect, itemRect = []]) => {\r\n this.tabsRect = tabsRect\r\n this.scrollViewWidth = 0\r\n itemRect.map((item, index) => {\r\n // 计算scroll-view的宽度,这里\r\n this.scrollViewWidth += item.width\r\n // 另外计算每一个item的中心点X轴坐标\r\n this.list[index].rect = item\r\n })\r\n // 获取了tabs的尺寸之后,设置滑块的位置\r\n this.setLineLeft()\r\n this.setScrollLeft()\r\n })\r\n },\r\n // 获取导航菜单的尺寸\r\n getTabsRect() {\r\n return new Promise((resolve) => {\r\n this.queryRect('u-tabs__wrapper__scroll-view').then((size) => resolve(size))\r\n })\r\n },\r\n // 获取所有标签的尺寸\r\n getAllItemRect() {\r\n return new Promise((resolve) => {\r\n const promiseAllArr = this.list.map((item, index) =>\r\n this.queryRect(`u-tabs__wrapper__nav__item-${index}`, true),\r\n )\r\n Promise.all(promiseAllArr).then((sizes) => resolve(sizes))\r\n })\r\n },\r\n // 获取各个标签的尺寸\r\n queryRect(el, item) {\r\n // #ifndef APP-NVUE\r\n // $uGetRect为uView自带的节点查询简化方法,详见文档介绍:https://www.uviewui.com/js/getRect.html\r\n // 组件内部一般用this.$uGetRect,对外的为uni.$u.getRect,二者功能一致,名称不同\r\n return new Promise((resolve) => {\r\n this.$uGetRect(`.${el}`).then((size) => {\r\n resolve(size)\r\n })\r\n })\r\n // #endif\r\n\r\n // #ifdef APP-NVUE\r\n // nvue下,使用dom模块查询元素高度\r\n // 返回一个promise,让调用此方法的主体能使用then回调\r\n return new Promise((resolve) => {\r\n dom.getComponentRect(item ? this.$refs[el][0] : this.$refs[el], (res) => {\r\n resolve(res.size)\r\n })\r\n })\r\n // #endif\r\n },\r\n },\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n \r\n.u-tabs {\r\n background: #fff;\r\n border-bottom: 2rpx solid #eee;\r\n\r\n &__wrapper {\r\n @include flex;\r\n align-items: center;\r\n\r\n &__scroll-view-wrapper {\r\n flex: 1;\r\n /* #ifndef APP-NVUE */\r\n overflow: auto hidden;\r\n /* #endif */\r\n }\r\n\r\n &__nav {\r\n @include flex;\r\n position: relative;\r\n\r\n &__item {\r\n align-items: center;\r\n justify-content: center;\r\n padding: 0 11px;\r\n @include flex;\r\n\r\n &--disabled {\r\n /* #ifndef APP-NVUE */\r\n cursor: not-allowed;\r\n /* #endif */\r\n }\r\n\r\n &__text {\r\n font-size: 14px;\r\n color: #606266;\r\n white-space: nowrap !important;\r\n\r\n &--disabled {\r\n color: #c8c9cc !important;\r\n }\r\n }\r\n }\r\n\r\n &__line {\r\n position: absolute;\r\n bottom: 2px;\r\n width: 30px;\r\n height: 3px;\r\n background: #3c9cff;\r\n border-radius: 100px;\r\n transition-duration: 300ms;\r\n transition-property: transform;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","import Component from 'D:/App/Work/addr/acdr-ui/src/sheep/ui/su-tabs/su-tabs.vue'\nwx.createComponent(Component)"],"names":["addStyle","addUnit","deepMerge","uni","getPx","sleep","sys"],"mappings":"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"} |