• 用require.js封装原生js轮播图


    index.html页面:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>require.js封装轮播图</title>
    <style type="text/css">
      *{
        margin: 0;
        padding: 0;
        list-style: none;
      }
      #banner{
         830px;
        height: 440px;
        border: solid 1px;
        margin: 50px auto;
        position: relative;
        overflow: hidden;
      }
      #banner ul{
        position: absolute;
        left: 0;
        top: 0;
      }
      #banner ul li{
         830px;
        height: 440px;
        float: left;
      }
      #banner p{
        position: absolute;
        left: 50%;
        bottom: 10px;
        margin-left: -30px;
      }
      #banner p span{
        display: block;
        float: left;
         15px;
        height: 15px;
        margin-right: 6px;
        background: #ccc;
        border-radius: 50%;
      }
      #banner p .on{
        background: red;
      }
    </style>
    <script type="text/javascript" src="require.js" data-main='init'></script>
    <!--<script type="text/javascript">
      require(['slider'],function(mod){
      mod.slide()
    })
    </script>-->
    </head>
    <body>
      <div id="banner">
        <ul>
          <li><img src="images/1.jpg"/></li>
          <li><img src="images/2.jpg"/></li>
        </ul>
        <p>
          <span class="on"></span>
          <span></span>
          <span></span>
        </p>
      </div>
    </body>
    </html>

    get.js代码如下:

    define(function(require,exports,module){
      exports.getStyle = function (obj,name){
        if(obj.currentStyle){
          return obj.currentStyle[name];
        }else{
          return getComputedStyle(obj,false)[name];
        };
      };
    });

    init.js代码如下

    require(['slider'],function(mod){
      mod.slide();
    });

    slider.js代码如下

    define(function(require, exports, module) {
      var move = require('StartMove');
      var aBtn = document.getElementById('banner').getElementsByTagName('span');
      var oUl = document.getElementById('banner').getElementsByTagName('ul')[0];
      var aLi = oUl.children;

      //三张图片所占的宽度,length返回的是字符串中的字符数
        oUl.style.width = aLi.length * aLi[0].offsetWidth + 'px';

        exports.slide = function() {
          for(var i = 0; i < aBtn.length; i++) {
            aBtn[i].index = i;
            aBtn[i].onclick = function() {
              for(var i = 0; i < aBtn.length; i++) {
                aBtn[i].className = '';
              }
            aBtn[this.index].className = 'on';
              move.move(oUl, {
              left: -this.index * aLi[0].offsetWidth;
            });
          };
        };
      };
    });

    StartMove.js代码如下

    define(function(require, exports, module) {
      var get = require('get');

      exports.move = function move(obj, json, complete) {
        clearInterval(obj.timer);

        var complete = complete || {};
        complete.dur = complete.dur || 1000;
        complete.easing = complete.easing || 'ease-out';

        var count = parseInt(complete.dur / 30); //总次数
        var start = {}; //{300,height:300}
        var dis = {};
        //{300,height:300}
        for(var name in json) {
          start[name] = parseFloat(get.getStyle(obj, name));
          dis[name] = json[name] - start[name];
        }
        var n = 0; //当前步数
        obj.timer = setInterval(function() {
        n++;
        for(var name in json) {
          var a = n / count;
          switch(complete.easing) {
            case 'linear':
            var cur = start[name] + a * dis[name];
            break;
            case 'ease-in':
            var cur = start[name] + Math.pow(a, 3) * dis[name];
            break;
            case 'ease-out':
            var a = 1 - n / count;
            var cur = start[name] + (1 - Math.pow(a, 3)) * dis[name];
            break;
          };

          if(name == 'opacity') {
              obj.style[name] = cur;
              obj.style.filter = 'alpha(' + cur * 100 + ')';
            } else {
              obj.style[name] = cur + 'px';
            };
          };

          if(n == count) {
            clearInterval(obj.timer)
            complete.fn && complete.fn();
          };

        }, 30);
       };

     });

  • 相关阅读:
    深入浅出 Java Concurrency (7): 锁机制 part 2 AQS[转]
    深入浅出 Java Concurrency (6): 锁机制 part 1[转]
    深入浅出 Java Concurrency (5): 原子操作 part 4[转]
    深入浅出 Java Concurrency (4): 原子操作 part 3 指令重排序与happens-before法则[转]
    深入浅出 Java Concurrency (3): 原子操作 part 2[转]
    深入浅出 Java Concurrency (2): 原子操作 part 1[转]
    深入浅出 Java Concurrency (1) : J.U.C的整体认识[转]
    深入浅出 Java Concurrency
    读书笔记--模式与重构 目录
    SpringMVC,3种不同的URL路由配置方法 [转]
  • 原文地址:https://www.cnblogs.com/Mousika/p/7011615.html
Copyright © 2020-2023  润新知