Skip to content

Commit a0f4dbe

Browse files
committed
Update marquee
1 parent d6b2c4d commit a0f4dbe

File tree

8 files changed

+1973
-1918
lines changed

8 files changed

+1973
-1918
lines changed

components/backedBy.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
</div>
88
<div class="flex flex-wrap -mx-3">
99
<div class="w-full px-3">
10-
<Vue3Marquee direction="normal" :duration="50" class="mb-10">
10+
<Marquee class="mb-10">
1111
<img v-for="img in imgArray" :key="img" :src="img"/>
12-
</Vue3Marquee>
13-
<Vue3Marquee direction="reverse" :duration="50">
12+
</Marquee>
13+
<Marquee direction="reverse">
1414
<img v-for="img in imgArray" :key="img" :src="img"/>
15-
</Vue3Marquee>
15+
</Marquee>
1616
</div>
1717
</div>
1818
</div>

components/brand.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
</div>
88
<div class="flex flex-wrap -mx-3">
99
<div class="w-full px-3">
10-
<Vue3Marquee class="mb-10" :duration="70">
10+
<Marquee class="mb-10">
1111
<img v-for="img in imgArray" :key="img" :src="img"/>
12-
</Vue3Marquee>
13-
<Vue3Marquee direction="reverse" :duration="70">
12+
</Marquee>
13+
<Marquee direction="reverse">
1414
<img v-for="img in imgArray" :key="img" :src="img"/>
15-
</Vue3Marquee>
15+
</Marquee>
1616
</div>
1717
</div>
1818
</div>

components/marquee.vue

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
<template>
2+
<div class="vue3-marquee horizontal" ref="outer">
3+
<div class="marquee" ref="inner" :class="{ 'st-scrolling': needToScroll && duration }">
4+
<slot></slot><slot></slot>
5+
</div>
6+
</div>
7+
</template>
8+
<script>
9+
export default {
10+
name: 'Marquee',
11+
props: {
12+
direction: {
13+
type: String,
14+
default: 'normal',
15+
},
16+
// 滚动速度 npx/s
17+
speed: {
18+
type: Number,
19+
default: 30,
20+
}
21+
},
22+
data() {
23+
return {
24+
startDelay: 1000, // 开始延迟 3000ms
25+
needToScroll: false,
26+
duration: '',
27+
innerWidth: 0,
28+
outerWidth: 0,
29+
timer: null,
30+
}
31+
},
32+
mounted() {
33+
this.init();
34+
},
35+
beforeUnmount() {
36+
this.clear();
37+
},
38+
watch: {
39+
40+
},
41+
methods: {
42+
// 初始化
43+
init() {
44+
this.$nextTick(() => {
45+
this.timer = setTimeout(() => {
46+
let { flag, duration } = this.isOverflow();
47+
this.duration = duration;
48+
this.needToScroll = flag;
49+
}, this.startDelay);
50+
})
51+
},
52+
53+
// 清除
54+
clear() {
55+
this.duration = 0;
56+
this.needToScroll = false;
57+
clearTimeout(this.timer);
58+
},
59+
60+
// 判断子元素宽度是否大于父元素宽度,超出则需要滚动,否则不滚动,并且计算 animation duration
61+
isOverflow() {
62+
let outer = this.$refs.outer;
63+
let inner = this.$refs.inner;
64+
let outerWidth = this.getWidth(outer);
65+
let innerWidth = this.getWidth(inner);
66+
this.outerWidth = outerWidth;
67+
this.innerWidth = innerWidth;
68+
return {
69+
flag: innerWidth > outerWidth,
70+
duration: (innerWidth / this.speed).toFixed(0) + 's',
71+
}
72+
},
73+
74+
// 获取元素宽度
75+
getWidth(el) {
76+
let { width = 0 } = el?.getBoundingClientRect() || {};
77+
return width
78+
},
79+
}
80+
}
81+
</script>
82+
83+
<style lang="scss" scoped>
84+
.vue3-marquee {
85+
overflow: hidden;
86+
white-space: nowrap;
87+
display: flex;
88+
flex-direction: row;
89+
90+
.st-scrolling {
91+
// 向左匀速滚动动画
92+
animation: scroll v-bind(duration) linear infinite;
93+
animation-direction: v-bind(direction);
94+
}
95+
.marquee {
96+
display: flex;
97+
flex-direction: row;
98+
}
99+
}
100+
101+
102+
@keyframes scroll {
103+
0% {
104+
transform: translate3d(0%, 0, 0);
105+
}
106+
107+
100% {
108+
transform: translate3d(-50%, 0, 0);
109+
}
110+
}
111+
</style>

nuxt.config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ export default defineNuxtConfig({
1818
'prismjs/themes/prism.css',
1919
],
2020
plugins: [
21-
'./plugins/vue3-marquee.js',
2221
// '{ src: '~/plugins/prism.js', ssr: false }',
2322
'./plugins/prism.js'
2423
],

package-lock.json

Lines changed: 3 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
"@nuxt/ui": "^2.11.0",
2323
"dracula-prism": "^2.1.13",
2424
"prismjs": "^1.29.0",
25-
"sass": "^1.69.5",
26-
"vue3-marquee": "^4.1.0"
25+
"sass": "^1.69.5"
2726
}
2827
}

plugins/vue3-marquee.js

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)