zoukankan      html  css  js  c++  java
  • JS实现div的抖动:缓动式抖动

    代码如下:

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
            <style>
                #div1 {
                    width: 100px;
                    height: 100px;
                    position: absolute;
                    left: 400px;
                    top: 200px;
                    background: red;
                }
            </style>
        </head>
    
        <body>
            <div id="div1"></div>
    
            <script>
                var div1 = document.querySelector('#div1');
    
                document.onclick = function() {
    
                    /*
                     * 抖动:
                     * 1. 每次改变一下元素的位置
                     * 按照一个中心点进行偏移,假设中心点left原始是400,那么每次就以left:400为中心做位置的移动
                     * 380 -> 420
                     * */
    
                    // div1.style.left = '380px';
                    // div1.style.left = '420px';
    
                    var a = true;
    
                    setInterval(function() {
    
                        /*
                         * 根据a的值,做不同的设置
                         * */
                        div1.style.left = (a ? 380 : 420) + 'px';//这样可以实现小幅度的抖动效果,但是大幅度的抖动就会显得很生硬
                
                        a = !a;
    
                    }, 30);
    
                }
          /*缓动代码*/            
          var tween = {
              linear:function(t,b,c,d){
                  return c*t/d + b;
              },
              easeIn:function(t,b,c,d){
                  return c * ( t /= d ) * t + b;
              },
              strongEaseIn:function(t,b,c,d){
                  return c * ( t /= d ) * t * t * t * t + b;
              },
              strongEaseOut:function(t,b,c,d){
                  return c * ( ( t = t / d -1 ) * t * t * t * t +1 ) + b;
              },
              sineaseIn:function(t,b,c,d){
                  return c * ( t /= d ) * t * t + b;    
              },
              sineaseOut:function(t,b,c,d){
                  return c * ( ( t = t / d -1 ) * t * t *t +1 ) + b;
              }
          };
    
          var Animate = function(dom){
              this.dom = dom;
              this.startTime = 0;
              this.startPos = 0;
              this.endPos = 0;
              this.propertyName = null;
              this.easing = null;
              this.duration = null;
          }
    
          Animate.prototype.start = function(propertyName,endPos,duration,easing){
              this.startTime = +new Date;
              this.startPos = this.dom.getBoundingClientRect()[propertyName];
              this.propertyName = propertyName;
              this.endPos = endPos;
              this.duration = duration;
              this.easing = tween[easing];
    
              var self = this;
              var timeId = setInterval(function(){
                  if(self.step() === false){
                      clearInterval(timeId);
                  }
              },19);
          }
    
          Animate.prototype.step = function(){
              var t = +new Date;
              if(t>=this.startTime + this.duration){
                  this.update(this.endPos);
                  return false;
              }
              var pos = this.easing(t-this.startTime, this.startPos, this.endPos - this.startPos, this.duration);
              this.update(pos);
          }
    
          Animate.prototype.update = function(pos){
              this.dom.style[this.propertyName] = pos + 'px';
          }
          var b = true;
          var div = document.getElementById('div');
          var animate = new Animate(div);
          setInterval(function() {
            animate.start('left',(a ? 380 : 420),1000,'strongEaseOut');//如果用缓动的效果来实现较大幅度的抖动,那视觉上就可以看到更舒适了
            a = !a;
          }, 30);
        </script> 

      </body>

    </html>
  • 相关阅读:
    C#WinForm隐藏窗体关闭按钮的方法
    VPRO工具失败时对输出的一种处理方式
    在linux系统下进行pip升级注意事项
    浏览器遮罩层
    关于手机微信端ios的input不能选中问题解决方案
    微信公众号页面遇到的坑
    移动端微信页面的一些自己爬的坑
    使用JS获取上一页的url地址
    vuejs 入门
    python 学习路程(一)
  • 原文地址:https://www.cnblogs.com/dreambin/p/9288363.html
Copyright © 2011-2022 走看看