Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
前端小猪
文本滚动
提交
385e6607
文
文本滚动
项目概览
前端小猪
/
文本滚动
与 Fork 源项目一致
Fork自
inscode / VueJS
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
文
文本滚动
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
385e6607
编写于
8月 22, 2024
作者:
Z
zfz5720
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Thu Aug 22 16:12:00 CST 2024 inscode
上级
79c5bd79
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
62 addition
and
30 deletion
+62
-30
src/App.vue
src/App.vue
+62
-30
未找到文件。
src/App.vue
浏览文件 @
385e6607
<
script
setup
>
import
HelloWorld
from
'
./components/HelloWorld.vue
'
import
TheWelcome
from
'
./components/TheWelcome.vue
'
<
script
setup
lang=
"ts"
>
import
{
ref
,
nextTick
}
from
'
vue
'
;
const
noticeList
=
ref
([]);
const
startScroll
=
async
()
=>
{
const
list
=
[
'
测试文字
'
,
'
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
'
];
noticeList
.
value
=
list
;
nextTick
(()
=>
{
const
content
=
document
.
querySelector
(
'
.scroll-content
'
);
const
contentOffsetWidth
=
content
.
offsetWidth
;
// 根据内容长度计算动画持续时间
// 假设每秒滚动100px width 越大,速度越快
const
width
=
100
;
const
duration
=
Math
.
floor
(
contentOffsetWidth
/
width
);
content
.
style
.
animationDuration
=
`
${
duration
}
s`
;
});
};
startScroll
();
</
script
>
<
template
>
<header>
<img
alt=
"Vue logo"
class=
"logo"
src=
"./assets/logo.svg"
width=
"125"
height=
"125"
/>
<div
class=
"wrapper"
>
<HelloWorld
msg=
"You did it!"
/>
<div
class=
"text-scroll"
>
<div
class=
"scroll-container"
>
<div
class=
"scroll-content"
>
<div
v-for=
"(item, index) in noticeList"
:key=
"item + index"
class=
"item"
>
{{
item
}}
</div>
</div>
</div>
</header>
<main>
<TheWelcome
/>
</main>
</div>
</
template
>
<
style
scoped
>
header
{
line-height
:
1.5
;
.text-scroll
{
display
:
flex
;
align-items
:
center
;
background
:
red
;
width
:
800px
;
}
.logo
{
display
:
block
;
margin
:
0
auto
2rem
;
.scroll-container
{
overflow-x
:
hidden
;
/* 启用水平滚动 */
overflow-y
:
hidden
;
/* 隐藏垂直滚动条 */
white-space
:
nowrap
;
/* 防止内容换行 */
width
:
100%
;
/* 设置容器宽度,占满父容器 */
position
:
relative
;
z-index
:
99
;
}
@media
(
min-width
:
1024px
)
{
header
{
display
:
flex
;
place-items
:
center
;
padding-right
:
calc
(
var
(
--section-gap
)
/
2
);
}
.scroll-content
{
display
:
inline-block
;
/* 让内容作为内联块级元素,以便宽度自动调整 */
padding
:
10px
;
/* 可选:添加内边距以调整内容位置 */
will-change
:
auto
;
animation
:
scroll-left
10s
linear
infinite
;
/* 动画设置 */
}
.item
{
display
:
inline-block
;
/* 让每个条目水平排列 */
text-align
:
left
;
padding-left
:
100%
;
background
:
gold
;
}
.logo
{
margin
:
0
2rem
0
0
;
@keyframes
scroll-left
{
from
{
transform
:
translateX
(
0
);
}
header
.wrapper
{
display
:
flex
;
place-items
:
flex-start
;
flex-wrap
:
wrap
;
to
{
transform
:
translateX
(
-100%
);
/* 根据内容总长度调整 */
}
}
</
style
>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录