美文网首页
跑马灯效果

跑马灯效果

作者: A_9c74 | 来源:发表于2018-11-04 10:18 被阅读0次
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/vue.js"></script>
<body>
<div id="app">
    <input type="button" value="开始" @click="lang">
    <input type="button" value="结束" @click="end">
    <h4>{{msg}}</h4>
</div>
</body>
<script>
    //在vm实例中
    var vm=new Vue({
        el:'#app',
        data:{
            msg:'12345678',
            intervalid:null
        },
        methods:{
            lang(){
                //箭头函数 解决this指向问题,内部的this指向外部的this
               this.intervalid=setInterval(() => {
                   //获取到头 第一个 字符
                   var start=this.msg.substring(0,1);
                   //获取到 后面的所有字符
                   var end=this.msg.substring(1);
                   //重新拼接得到新的字符串 并赋值给 this.msg
                   this.msg=end+start;
                   //:vm实例会监听自己身上date中所有   数据的改变,只要数据一发生改变 就会自动把最新的数据
                   //data 上 同步到页面上去 【我们只需要关心数据 不需要考虑重新渲染dom界面】
               },500)
            },
            end(){
                clearInterval(this.intervalid);
            }
        }
    })
    //分析:
    //1.给【开始】按钮绑定一个点击事件 v-on @
    //2.在按钮的事件处理函数中,写相关的业务逻辑代码 :拿到msg字符串,然后调用字符串的substring方法
    //来进行字符串的截取操作,把第一个字符截取出来放到最后一个位置即可
    //3.为了实现点击下按钮 自动截取的功能, 要把步骤2的方法放到一个定时器中去;
</script>
</html>

此时一个跑马灯效果已经完成了,但是通过点击多次开始会启动很多的定时器
通过在lang方法前面添加一个判断语句进行解决

lang(){
                if(this.intervalid!=null)return;
                //箭头函数 解决this指向问题,内部的this指向外部的this
               this.intervalid=setInterval(() => {
                   //获取到头 第一个 字符
                   var start=this.msg.substring(0,1);
                   //获取到 后面的所有字符
                   var end=this.msg.substring(1);
                   //重新拼接得到新的字符串 并赋值给 this.msg
                   this.msg=end+start;
                   //:vm实例会监听自己身上date中所有   数据的改变,只要数据一发生改变 就会自动把最新的数据
                   //data 上 同步到页面上去 【我们只需要关心数据 不需要考虑重新渲染dom界面】
               },500)
            }

会发现此时不会再曾加定时器,但是停止之后再次点击开始却无法开始了

每当清除了interval之后 要将intervalid 设置为NULL

 end (){
                clearInterval(this.intervalid);
                this.intervalid=null;
            }

此时 一个跑马灯的demo才算完成了
完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/vue.js"></script>
<body>
<div id="app">
    <input type="button" value="开始" @click="lang">
    <input type="button" value="结束" @click="end">
    <h4>{{msg}}</h4>
</div>
</body>
<script>
    //在vm实例中
    var vm=new Vue({
        el:'#app',
        data:{
            msg:'12345678',
            intervalid:null
        },
        methods:{

            lang(){
                if(this.intervalid!=null)return;
                //箭头函数 解决this指向问题,内部的this指向外部的this
               this.intervalid=setInterval(() => {
                   //获取到头 第一个 字符
                   var start=this.msg.substring(0,1);
                   //获取到 后面的所有字符
                   var end=this.msg.substring(1);
                   //重新拼接得到新的字符串 并赋值给 this.msg
                   this.msg=end+start;
                   //:vm实例会监听自己身上date中所有   数据的改变,只要数据一发生改变 就会自动把最新的数据
                   //data 上 同步到页面上去 【我们只需要关心数据 不需要考虑重新渲染dom界面】
               },500)
            }
            ,
           end (){
                clearInterval(this.intervalid);
                this.intervalid=null;
            }
        }
    })
    //分析:
    //1.给【开始】按钮绑定一个点击事件 v-on @
    //2.在按钮的事件处理函数中,写相关的业务逻辑代码 :拿到msg字符串,然后调用字符串的substring方法
    //来进行字符串的截取操作,把第一个字符截取出来放到最后一个位置即可
    //3.为了实现点击下按钮 自动截取的功能, 要把步骤2的方法放到一个定时器中去;
</script>
</html>

相关文章

网友评论

      本文标题:跑马灯效果

      本文链接:https://www.haomeiwen.com/subject/nprrxqtx.html