zoukankan      html  css  js  c++  java
  • 11,运动基础框架(匀速)

    匀速运动(框架):给物体不断加速度,用setInterval来循环执行;

    用timer来储存setInterval返回的id值;clearInterval(timer);清除定时器,让运动停止。用if else 来判断运动是移动还是停止;

    每执行一次事件(点击按钮)要清楚一次定时器,防止定时器叠加使速度不断加快;

    <body>
        <input id="btn1" type="button" value="开始运动" onclick="startMove()" />
    <div id="div1">

    js代码:

    <script>
    var timer=null;
    
    function startMove()
    {
        var oDiv=document.getElementById('div1');
        
        clearInterval(timer);//清除上一次点击时发生的定时器
        timer=setInterval(function (){
            var speed=1;
            //判断是运动还是停止
            if(oDiv.offsetLeft>=300)
            {
                clearInterval(timer);
            }
            else
            {
                oDiv.style.left=oDiv.offsetLeft+speed+'px';
            }
        }, 30);
    }
    </script>

    练习:分享到

    鼠标移入移出,改变div的左侧距离(用匀速运动框架);用当前的左侧距离oDiv.offsetLef与目标点iTarget比较;借以判断速度方向,oDiv.offsetLeft<iTarget则iSpeed为正,反之则为负;

    当到达目标点时,关闭定时器,运动停止;

    HTML:

    <body>
    <div id="div1">
        <span>分享到</span>
    </div>

    CSS:right:-20;

    <style>
    #div1 {width:150px; height:200px; background:green; position:absolute; left:-150px;}
    #div1 span {position:absolute; width:20px; height:60px; line-height:20px; background:blue; right:-20px; top:70px;}
    </style>

    JS:

    <script>
    window.onload=function ()
    {
        var oDiv=document.getElementById('div1');
        
        oDiv.onmouseover=function ()
        {
            startMove(0);
        };
        oDiv.onmouseout=function ()
        {
            startMove(-150);
        };
    };
    
    var timer=null;
    
    function startMove(iTarget)
    {
        var oDiv=document.getElementById('div1');
        
        clearInterval(timer);
        timer=setInterval(function (){
            var speed=0;
            
            if(oDiv.offsetLeft>iTarget)//判断速度方向;
            {
                speed=-10;
            }
            else
            {
                speed=10;
            }
            
            if(oDiv.offsetLeft==iTarget)//运动或停止;
            {
                clearInterval(timer);
            }
            else
            {
                oDiv.style.left=oDiv.offsetLeft+speed+'px';
            }
        }, 30);
    }
    </script>    

     练习2:图片淡入淡出;

    改变图片的透明度:opacity来实现;用运动框架改变opacity;当前的透明度用一个变量储存:Alhpa=30;比较Alpha与iTarget目标值之间大小来确定速度方向。

    透明度变化过程:Alpha+=iSpeed;变化的是Alpha,再将该值赋值给oDiv.style.filter:(ie)或者oDiv.style.opacity;

    html:

    <body>
    <div id="div1"></div>
    </body>

    JS:

    <script>
    window.onload=function ()
    {
        var oDiv=document.getElementById('div1');
        
        oDiv.onmouseover=function ()
        {
            startMove(100);
        };
        oDiv.onmouseout=function ()
        {
            startMove(30);
        };
    };
    
    var alpha=30;
    var timer=null;
    
    function startMove(iTarget)
    {
        var oDiv=document.getElementById('div1');
        
        clearInterval(timer);
        timer=setInterval(function (){
            var speed=0;
            
            if(alpha<iTarget)
            {
                speed=10;
            }
            else
            {
                speed=-10;
            }
            
            if(alpha==iTarget)
            {
                clearInterval(timer);
            }
            else
            {
                alpha+=speed;
                
                oDiv.style.filter='alpha(opacity:'+alpha+')';
                oDiv.style.opacity=alpha/100;
            }
        }, 30);
    }
    </script>
  • 相关阅读:
    【NOI D2T1】量子通信(容斥原理+卡常)
    CF1555D Say No to Palindromes(线段树)
    CF1554B Cobb
    CF1554A Cherry
    【做题笔记】UVA10162 Last Digit
    【做题记录】CF1223D Sequence Sorting
    CF39H
    UVA10763
    题解 AT2361 [AGC012A] AtCoder Group Contest
    このブログについて | About this blog
  • 原文地址:https://www.cnblogs.com/maoduoduo/p/3145627.html
Copyright © 2011-2022 走看看