Commit 762c3106 authored by 郭铭瑶's avatar 郭铭瑶 🤘

优化m-scroll结构

parent cbeaebfd
...@@ -127,7 +127,8 @@ export default defineComponent({ ...@@ -127,7 +127,8 @@ export default defineComponent({
initChart(props.dataset, props.option) initChart(props.dataset, props.option)
}) })
watchEffect(() => { watchEffect(() => {
(defaultOption as any).radar.indicator = // eslint-disable-next-line
;(defaultOption as any).radar.indicator =
props.dataset && props.dataset &&
props.dataset.dimensions && props.dataset.dimensions &&
props.dataset.dimensions.map((d) => ({ props.dataset.dimensions.map((d) => ({
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
<div class="my-scroll" @mouseenter.prevent="stop" @mouseleave.prevent="start"> <div class="my-scroll" @mouseenter.prevent="stop" @mouseleave.prevent="start">
<div ref="contentRef"> <div ref="contentRef">
<slot /> <slot />
</div> <template v-if="isNeedMockContent">
<div v-if="isNeedMockContent" ref="mockContentRef"> <slot />
<slot /> </template>
</div> </div>
</div> </div>
</template> </template>
...@@ -25,34 +25,39 @@ export default defineComponent({ ...@@ -25,34 +25,39 @@ export default defineComponent({
name: 'MyScroll', name: 'MyScroll',
displayName: 'm-scroll', displayName: 'm-scroll',
props: { props: {
/** 模式 */
mode: {
type: [Number, String] as PropType<number | string>,
default: 1,
},
/** 数据长度 */
length: { length: {
type: Number as PropType<number>, type: Number as PropType<number>,
required: true, required: true,
}, },
/** 小于此长度则不轮播 */
limit: { limit: {
type: Number as PropType<number>, type: Number as PropType<number>,
required: true, required: true,
}, },
duration: { /** mode1的轮播速度 */
type: Number as PropType<number>,
default: 4000,
},
speed: { speed: {
type: Number as PropType<number>, type: Number as PropType<number>,
default: 50, default: 50,
}, },
mode: { /** mode2的每个元素高度 */
type: [Number, String] as PropType<number | string>,
default: 1,
},
step: { step: {
type: Number as PropType<number>, type: Number as PropType<number>,
default: 0, default: 0,
}, },
/** mode2的轮播间隔 */
duration: {
type: Number as PropType<number>,
default: 4000,
},
}, },
setup(props) { setup(props) {
const contentRef = ref<null | HTMLElement>(null) const contentRef = ref<null | HTMLElement>(null)
const mockContentRef = ref<null | HTMLElement>(null)
const timer = ref<null | number>(null) const timer = ref<null | number>(null)
const index = ref(0) const index = ref(0)
const isNeedMockContent = computed( const isNeedMockContent = computed(
...@@ -72,23 +77,20 @@ export default defineComponent({ ...@@ -72,23 +77,20 @@ export default defineComponent({
} }
const startMode1 = () => { const startMode1 = () => {
const content = contentRef.value const content = contentRef.value
const mockContent = mockContentRef.value
if (!content) return if (!content) return
let height = content.offsetHeight let height = content.offsetHeight / 2
timer.value = +setInterval(() => { timer.value = +setInterval(() => {
if (height <= 0) { if (height <= 0) {
height = content.offsetHeight height = content.offsetHeight
return return
} }
if (index.value < height) { if (index.value < height) {
index.value += 1 index.value += 1
} else { } else {
index.value = 0 index.value = 0
} }
content.style.transform = `translateY(${-index.value}px)` content.style.transform = `translateY(${-index.value}px)`
mockContent &&
(mockContent.style.transform = `translateY(${-index.value}px)`)
}, props.speed) }, props.speed)
} }
const startMode2 = () => { const startMode2 = () => {
...@@ -97,25 +99,17 @@ export default defineComponent({ ...@@ -97,25 +99,17 @@ export default defineComponent({
return return
} }
const content = contentRef.value const content = contentRef.value
const mockContent = mockContentRef.value
if (!content) return if (!content) return
const len = (content.children && content.children.length) || 0 const len = ((content.children && content.children.length) || 0) / 2
timer.value = +setInterval(() => { timer.value = +setInterval(() => {
if (index.value < len) { if (index.value < len) {
index.value += 1 index.value += 1
content.style.transition = 'transform 0.5s ease-in-out' content.style.transition = 'transform 0.5s ease-in-out'
mockContent &&
(mockContent.style.transition = 'transform 0.5s ease-in-out')
} else { } else {
index.value = 0 index.value = 0
content.style.transition = 'none' content.style.transition = 'none'
mockContent && (mockContent.style.transition = 'none')
} }
content.style.transform = `translateY(${-props.step * index.value}rem)` content.style.transform = `translateY(${-props.step * index.value}rem)`
mockContent &&
(mockContent.style.transform = `translateY(${
-props.step * index.value
}rem)`)
}, props.duration) }, props.duration)
} }
onMounted(() => { onMounted(() => {
...@@ -130,9 +124,7 @@ export default defineComponent({ ...@@ -130,9 +124,7 @@ export default defineComponent({
stop() stop()
index.value = 0 index.value = 0
const content = contentRef.value const content = contentRef.value
const mockContent = mockContentRef.value
content && (content.style.transform = 'translateY(0)') content && (content.style.transform = 'translateY(0)')
mockContent && (mockContent.style.transform = 'translateY(0)')
await nextTick() await nextTick()
start() start()
} }
...@@ -142,7 +134,6 @@ export default defineComponent({ ...@@ -142,7 +134,6 @@ export default defineComponent({
start, start,
stop, stop,
contentRef, contentRef,
mockContentRef,
timer, timer,
} }
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment