vue实现列表无缝滚动
短信预约 -IT技能 免费直播动态提醒
本文实例为大家分享了vue实现列表无缝滚动的具体代码,供大家参考,具体内容如下
HTML部分代码
<template>
<div id="box" class="wrapper">
<div class="contain" id="con1" ref="con1" :class="{anim:animate==true}">
<List
v-for="(item,index) in cloudList"
:key="index"
:listData="item"
:index="index"
:date="date"
></List>
</div>
</div>
</template>
List是单个列表组件,也可以替换成li。
css部分代码
<style scoped>
.wrapper {
width: 96vw;
height: 90vh;
position: absolute;
left: 2vw;
top: 1rem;
overflow: hidden;
}
.contain > div:nth-child(2n) {//这个样式是我这个项目所需,与无缝滚动无直接关系,可以忽略
margin-left: 2vw;
}
.anim {
transition: all 0.5s;
margin-top: -7vh;
}
</style>
我的List组件是设置了float:left的,所以id="con1"的div是没有高度的
js部分代码
<script>
import List from './List';
export default {
name: 'Contain',
data () {
return {
cloudList: [],//数组用来存放列表数据
date: '',//最新数据更新日期
animate: false,
time: 3000,//定时滚动的间隙时间
setTimeout1: null,
setInterval1: null
};
},
components: {
List
},
methods: {
// 获取json数据并且更新日期
getCloudListData () {
const _this = this;
_this.$api.getCloudListData().then(res => {
_this.cloudList = res;
});
var newDate = new Date();
_this.date = _this.dateFtt('yyyy-MM-dd hh:mm:ss', newDate);
},
// 日期格式化
dateFtt (fmt, date) {
var o = {
'M+': date.getMonth() + 1, // 月份
'd+': date.getDate(), // 日
'h+': date.getHours(), // 小时
'm+': date.getMinutes(), // 分
's+': date.getSeconds(), // 秒
'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
S: date.getMilliseconds() // 毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
(date.getFullYear() + '').substr(4 - RegExp.$1.length)
);
}
for (var k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length === 1
? o[k]
: ('00' + o[k]).substr(('' + o[k]).length)
);
}
}
return fmt;
},
// 滚动
scroll () {
const _this = this;
_this.animate = true;
clearTimeout(_this.setTimeout1);
_this.setTimeout1 = setTimeout(() => {
var parent = document.getElementById('con1');
var first = document.getElementById('con1').children[0];
var second = document.getElementById('con1').children[1];
parent.removeChild(first);
parent.removeChild(second);
parent.appendChild(first);
parent.appendChild(second);
_this.animate = false;
}, 500);
}
},
created () {
const _this = this;
_this.getCloudListData();
//定时器每隔24小时更新一次数据
setInterval(() => {
_this.getCloudListData();
}, 24 * 60 * 60 * 1000);
},
mounted () {
const _this = this;
var contain = document.getElementById('box');
_this.setInterval1 = setInterval(_this.scroll, _this.time);
var setInterval2 = null;
// 鼠标移入滚动区域停止滚动
contain.onmouseenter = function () {
clearInterval(_this.setInterval1);
var count = 0;
// 如果鼠标超过十秒不动 就启动滚动
setInterval2 = setInterval(function () {
count++;
if (count === 10) {
_this.scroll();
_this.setInterval1 = setInterval(_this.scroll, _this.time);
}
}, 1000);
//鼠标一动就停止滚动并且计数count置为0
contain.onmousemove = function () {
count = 0;
clearInterval(_this.setInterval1);
};
};
// 鼠标移出滚动区域
contain.onmouseleave = function () {
clearInterval(setInterval2);
clearInterval(_this.setInterval1);
_this.scroll();
_this.setInterval1 = setInterval(_this.scroll, _this.time);
};
}
};
</script>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341