效果图:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b8d8f614dc1e95ac5e083e2cffbbde2a.gif)
实现步骤
1.实现单条数据在显示区滚动
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9a0e5801c639706d6d35604f4668d14a.png)
<div class="scrollScreen">
<div class="box">
<div class="Line">
<div class="cell">2016-05-02</div>
<div class="cell">王小虎</div>
<div class="cell">上海市普陀区金沙江路 1518 弄</div>
</div>
</div>
</div>
<style lang="less"> //去掉scoped,否则会导致用js添加的元素使用css样式失效
.scrollScreen {
width: 400px; //可视区宽400px;高120px
height: 120px;
background: #f6cece;
padding: 0 20px;
}
.box {
position: relative;
}
.Line {
position: absolute;
display: flex;
color: #fff;
justify-content: space-between;
line-height: 30px;
top: 200px; //单条数据顶部相较于可视区顶部距离200px
animation: transform 5s linear; //设置5s匀速动画
.cell {
margin: 0 5px;
}
}
@keyframes transform {
from {
top: 200px; //单条数据通可视区底部到
}
to {
top: -30px;
}
}
</style>
2.用js实现多条数据代替单条数据
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/41e6799c16e0316ec6898ef5c28c5077.png)
mounted() {
setInterval(() => {
this.appendNode();
}, 500);
setTimeout(()=>{
this.removeNode()
},5000)
},
methods: {
appendNode() {
var box = document.getElementsByClassName("box")[0];
var line = document.createElement("div");
line.className = "Line";
for(let i = 0;i<3;i++){
var cell = document.createElement("div")
cell.className = "cell";
cell.innerText = 'test'
line.appendChild(cell)
}
box.appendChild(line);
}
removeNode(){
setInterval(() => {
var box = document.getElementsByClassName("box")[0];
var line = document.getElementsByClassName("Line")[0];
box.removeChild(line)
}, 500);
}
}
3.实现数据动态加载
data() {
return {
list: [
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄"
},
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
}
]
};
},
mounted() {
setInterval(() => {
this.appendNode();
}, 500);
setTimeout(()=>{
this.removeNode()
},5000)
setInterval(()=>{
this.list = [{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄"
},
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
}]
},3000)
},
methods: {
appendNode() {
var box = document.getElementsByClassName("box")[0];
var line = document.createElement("div");
line.className = "Line";
let data = this.list.shift()
let keyList = Object.keys(data)
for(let i = 0;i<3;i++){
var cell = document.createElement("div")
cell.className = "cell";
cell.innerText =data[keyList[i]]
line.appendChild(cell)
}
box.appendChild(line);
},
removeNode(){
setInterval(() => {
var box = document.getElementsByClassName("box")[0];
var line = document.getElementsByClassName("Line")[0];
box.removeChild(line)
}, 500);
}
}
完整代码
<template>
<div class="scrollScreen">
<div class="box">
</div>
</div>
</template>
<script>
export default {
name: "scrollScreen",
props: {},
data() {
return {
list: [
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄"
},
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
}
]
};
},
mounted() {
setInterval(() => {
this.appendNode();
}, 500);
setTimeout(()=>{
this.removeNode()
},5000)
setInterval(()=>{
this.list = [{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄"
},
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄"
}]
},3000)
},
methods: {
appendNode() {
var box = document.getElementsByClassName("box")[0];
var line = document.createElement("div");
line.className = "Line";
let data = this.list.shift()
let keyList = Object.keys(data)
for(let i = 0;i<3;i++){
var cell = document.createElement("div")
cell.className = "cell";
cell.innerText =data[keyList[i]]
line.appendChild(cell)
}
box.appendChild(line);
},
removeNode(){
setInterval(() => {
var box = document.getElementsByClassName("box")[0];
var line = document.getElementsByClassName("Line")[0];
box.removeChild(line)
}, 500);
}
}
};
</script>
<style lang="less"> //去掉scoped,否则会导致用js添加的元素使用css样式失效
.scrollScreen {
width: 400px; //可视区宽400px;高120px
height: 120px;
background: #f6cece;
padding: 0 20px;
}
.box {
position: relative;
}
.Line {
position: absolute;
display: flex;
color: #fff;
justify-content: space-between;
line-height: 30px;
top: 200px; //单条数据顶部相较于可视区顶部距离200px
animation: transform 5s linear; //设置5s匀速动画
.cell {
margin: 0 5px;
}
}
@keyframes transform {
from {
top: 200px; //单条数据通可视区底部到
}
to {
top: -30px;
}
}
</style>