跑马灯效果
完整代码:
<html>
<head>
<meta charset="utf-8">
</meta>
<title>vue案例:跑马灯效果</title>
<!-- 导入vue -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="button" value="动起来" @click="roll">
<input type="button" value="停下来" @click="stop">
<h4>{{msg}}</h4>
</div>
<script>
// 在vm实例中,如果想要获取data上的数据,或者想要调用methods中的方法,必须通过this.数据属性名或this.方法名来进行访问
var vm = new Vue({
el: "#app",
data: {
msg: "天空好美",
intervalId: null // 定义定时器id
},
methods: {
// es6写法
roll() {
if (this.intervalId != null) return;
// es6写法解决this指向问题,开启定时器
this.intervalId = setInterval(() => {
// 获取第一个字符
var start = this.msg.substring(0, 1);
// 获取后面的所有
var end = this.msg.substring(1);
// 拼接
var res = end + start;
// 数据改变,会自动提交同步渲染
this.msg = res;
}, 400)
},
stop() {
clearInterval(this.intervalId);
// 重置为null
this.intervalId = null;
}
}
})
</script>
</body>
</html>
关于上面es6
中的this
问题,从网上找了些资料:
this
指向的固定化,并不是因为箭头函数内部有绑定this
的机制,实际原因是箭头函数根本没有自己的this
,导致内部的this
就是外层代码块的this
。正是因为它没有this
,所以也就不能用作构造函数。
代码效果:
点击动起来
按钮,msg
中的内容进行滚动,点击停下来
按钮,滚动停止。