亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery時間軸插件使用詳解

2019-11-20 12:02:22
字體:
來源:轉載
供稿:網友

這個時間軸是工作上用到的,自己寫了一個, qq空間有時間軸的控件, 百度文庫也有時間軸的控件;

  百度的時間軸大概是這樣的:

  用戶點擊對應的錨鏈接,  那個三角會滾動, 然后左側的界面也會滾動;

  實際的效果如下圖,用戶點擊左側的按鈕或者右側的input,滾動條都會主動滾動, 這里有個小技巧就是用after和before偽類生成三角形, 用戶點擊按鈕的滾動效果直接用jq的animate方法:

<!--//設置內容;window.onWebMessage( '{"type":"setItems","data":{"items":[{"name":1111},{"name":2222}]}}' ) ;//設置內容, 對應的item對象如果active為true為激活態;window.onWebMessage( '{"type":"setItems","data":{"items":[{"name":1000},{"name":1111},{"name":2222},{"name":3333,"active":true}]}}' ) ;//設置某個第n個位置的item;window.onWebMessage('{"type":"setItem","data":[2,{ "name" : "add-item"}]}');//激活第三個錨鏈接為選中態;window.onWebMessage( '{"type":"active","data":2}' )//獲取目前的數據:window.onWebMessage( '{"type":"getItem"}' );--><html>  <head>    <meta charset="utf-8" />    <script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.js"></script>  </head>  <style>    /*初始的reset樣式*/    *{      margin:0;      padding:0;    }    .time-line-wrap{      position: relative;      width: 400px;      margin:0 auto;    }    ul{      list-style: none;    }    body,html{      height: 100%;    }    body{      -webkit-user-select: none;      -moz-user-select: none;      -ms-user-select: none;      user-select: none;    }    /*樣式開始*/    .scroll-time-line{      height:100%;      overflow: hidden;    }    .time-line-wrap{      position: relative;    }    .time-line-ul{      position: relative;    }    /**    時間軸的軸用偽類實現;    */    .time-line-ul::before{      display: block;      position:absolute;      content:"";      height:100%;      width:1;      left:27px;      top:0;      background: #eee;    }    .time-line-ul li{      padding:14px;      position: relative;    }    .time-line-ul input {      vertical-align: super;      border-radius: 4px;      border:1px solid #eee;      padding:4px;      line-height: 22px;      margin-left:10px;    }    /**    使用after和before偽類實現input前面的三角形;    */    .time-line-ul li::before{      position: absolute;      content: "";      display: block;      top: 21px;      left: 40px;      width: 0px;      height: 0px;      border: 10px solid rgba(0, 0, 0, 0);      border-right: 10px solid #EEE;    }    .time-line-ul li::after{      position: absolute;      content: "";      display: block;      top: 21px;      left: 41px;      width: 0px;      height: 0px;      border: 10px solid rgba(0, 0, 0, 0);      border-right: 10px solid #fff;    }    /**    默認時間軸錨鏈接的樣式    */    .time-line-icon{      width: 26px;      height: 28px;      display: inline-block;      background: url(http://images0.cnblogs.com/blog2015/497865/201507/131424386411828.png);    }    /**    鼠標移動上來,或者錨鏈接有active時候的背景圖樣式    */    .time-line-icon.active,.time-line-icon:hover{      background-position: 0px 28px;    }  </style>  <!--模板,勿刪!-->  <script type="text/tempate" id="li-tpl">    <% for(var i=0; i<items.length; i++ ) {%>      <li class="li-<%=i%>">        <a href="###" class="time-line-icon <% if(items[i].active){ %> <%="active"%> <%}%> "></a>        <input type="text" value="<%=items[i].name%>"/>      </li>    <% } %>  </script>  <body>    <!--    滾動出現在這個div里面    -->    <div class="scroll-time-line">      <!---      時間軸相關的html結構      -->      <div class="time-line-wrap">        <ul class="time-line-ul">          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>          <li>            <a href="###" class="time-line-icon"></a> <input type="text" value="2015"/>          </li>        </ul>      </div>      <!---      時間軸相關的html結構結束      -->    </div>    <script>      //模板引擎的代碼      (function () {        //underscore抄的模板引擎;        var escaper = ///|'|/r|/n|/t|/u2028|/u2029/g;        var escapes = {          "'":   "'",          '//':   '//',          '/r':   'r',          '/n':   'n',          '/t':   't',          '/u2028': 'u2028',          '/u2029': 'u2029'        };        $.templateSettings = {          evaluate  : /<%([/s/S]+?)%>/g,          interpolate : /<%=([/s/S]+?)%>/g,          escape   : /<%-([/s/S]+?)%>/g        }        $.template = function(text, data, settings) {          var render;          settings = $.extend({}, settings, $.templateSettings);          // Combine delimiters into one regular expression via alternation.          var matcher = new RegExp([            (settings.escape || noMatch).source,            (settings.interpolate || noMatch).source,            (settings.evaluate || noMatch).source          ].join('|') + '|$', 'g');          // Compile the template source, escaping string literals appropriately.          var index = 0;          var source = "__p+='";          text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {            source += text.slice(index, offset)                .replace(escaper, function(match) { return '//' + escapes[match]; });            if (escape) {              source += "'+/n((__t=(" + escape + "))==null?'':_.escape(__t))+/n'";            }            if (interpolate) {              source += "'+/n((__t=(" + interpolate + "))==null?'':__t)+/n'";            }            if (evaluate) {              source += "';/n" + evaluate + "/n__p+='";            }            index = offset + match.length;            return match;          });          source += "';/n";          // If a variable is not specified, place data values in local scope.          if (!settings.variable) source = 'with(obj||{}){/n' + source + '}/n';          source = "var __t,__p='',__j=Array.prototype.join," +              "print=function(){__p+=__j.call(arguments,'');};/n" +              source + "return __p;/n";          try {            render = new Function(settings.variable || 'obj', '_', source);          } catch (e) {            e.source = source;            throw e;          }          if (data) return render(data, _);          var template = function(data) {            return render.call(this, data);          };          // Provide the compiled function source as a convenience for precompilation.          template.source = 'function(' + (settings.variable || 'obj') + '){/n' + source + '}';          return template;        };      })();      (function( fn ) {        $( fn.call( $ ,$) );      })(function ($) {        $.timeLineSetting = {          offsetTop : 100        };        $.extend($.fn, {          timeLine : function() {            $.each(this, function() {              var _this = this;              $(this).delegate(".time-line-ul>li", "click", function( ev ) {                $(".time-line-icon.active").removeClass("active");                $(this).find(".time-line-icon").addClass("active");                $(_this).animate({scrollTop: this.offsetTop - $.timeLineSetting.offsetTop},300);                ev.preventDefault();              });            });          }        });      });      $(function() {        var compile= $.template( $("#li-tpl").html() || "");        //與客戶端的交互事件;        var orginalData = {};        window.onWebMessage = function( msg ) {          msg = JSON.parse(msg);          switch( msg.type ) {            case "setItems" :              $(".time-line-ul").html( compile(msg.data) );              //結構化復制;              orginalData = JSON.parse(JSON.stringify(msg.data));              break;            case "setItem" :              orginalData.items&&orginalData.items.splice(msg.data[0],0,msg.data[1]);              $(".time-line-ul").html( compile(orginalData) );              break;            case "getItem" :                alert(JSON.stringify( orginalData ));              break;            case "active" :              $(".time-line-icon.active").removeClass("active");              $(".time-line-ul>li").eq( msg.data).find(".time-line-icon").addClass("active")              break;          };        };        //啟用插件;        $(".scroll-time-line").timeLine();      })    </script>  </body></html>

   模板用了underscore,tempate方法掛到了$下, 作為$的工具方法(依賴于jQuery),模板的js代碼直接放這里方便一些小項目直接用:

      //模板引擎的代碼      (function () {        //underscore抄的模板引擎;        var escaper = ///|'|/r|/n|/t|/u2028|/u2029/g;        var escapes = {          "'":   "'",          '//':   '//',          '/r':   'r',          '/n':   'n',          '/t':   't',          '/u2028': 'u2028',          '/u2029': 'u2029'        };        $.templateSettings = {          evaluate  : /<%([/s/S]+?)%>/g,          interpolate : /<%=([/s/S]+?)%>/g,          escape   : /<%-([/s/S]+?)%>/g        }        $.template = function(text, data, settings) {          var render;          settings = $.extend({}, settings, $.templateSettings);          // Combine delimiters into one regular expression via alternation.          var matcher = new RegExp([            (settings.escape || noMatch).source,            (settings.interpolate || noMatch).source,            (settings.evaluate || noMatch).source          ].join('|') + '|$', 'g');          // Compile the template source, escaping string literals appropriately.          var index = 0;          var source = "__p+='";          text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {            source += text.slice(index, offset)                .replace(escaper, function(match) { return '//' + escapes[match]; });            if (escape) {              source += "'+/n((__t=(" + escape + "))==null?'':_.escape(__t))+/n'";            }            if (interpolate) {              source += "'+/n((__t=(" + interpolate + "))==null?'':__t)+/n'";            }            if (evaluate) {              source += "';/n" + evaluate + "/n__p+='";            }            index = offset + match.length;            return match;          });          source += "';/n";          // If a variable is not specified, place data values in local scope.          if (!settings.variable) source = 'with(obj||{}){/n' + source + '}/n';          source = "var __t,__p='',__j=Array.prototype.join," +              "print=function(){__p+=__j.call(arguments,'');};/n" +              source + "return __p;/n";          try {            render = new Function(settings.variable || 'obj', '_', source);          } catch (e) {            e.source = source;            throw e;          }          if (data) return render(data, _);          var template = function(data) {            return render.call(this, data);          };          // Provide the compiled function source as a convenience for precompilation.          template.source = 'function(' + (settings.variable || 'obj') + '){/n' + source + '}';          return template;        };      })();

  模板的使用的DEMO如下, 也可以參考官方的文檔:http://underscorejs.org/#template

<html>  <head>    <body>      <script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.js"></script>      <script>      //模板引擎的代碼      (function () {        //underscore抄的模板引擎;        var escaper = ///|'|/r|/n|/t|/u2028|/u2029/g;        var escapes = {          "'":   "'",          '//':   '//',          '/r':   'r',          '/n':   'n',          '/t':   't',          '/u2028': 'u2028',          '/u2029': 'u2029'        };        $.templateSettings = {          evaluate  : /<%([/s/S]+?)%>/g,          interpolate : /<%=([/s/S]+?)%>/g,          escape   : /<%-([/s/S]+?)%>/g        }        $.template = function(text, data, settings) {          var render;          settings = $.extend({}, settings, $.templateSettings);          // Combine delimiters into one regular expression via alternation.          var matcher = new RegExp([            (settings.escape || noMatch).source,            (settings.interpolate || noMatch).source,            (settings.evaluate || noMatch).source          ].join('|') + '|$', 'g');          // Compile the template source, escaping string literals appropriately.          var index = 0;          var source = "__p+='";          text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {            source += text.slice(index, offset)                .replace(escaper, function(match) { return '//' + escapes[match]; });            if (escape) {              source += "'+/n((__t=(" + escape + "))==null?'':_.escape(__t))+/n'";            }            if (interpolate) {              source += "'+/n((__t=(" + interpolate + "))==null?'':__t)+/n'";            }            if (evaluate) {              source += "';/n" + evaluate + "/n__p+='";            }            index = offset + match.length;            return match;          });          source += "';/n";          // If a variable is not specified, place data values in local scope.          if (!settings.variable) source = 'with(obj||{}){/n' + source + '}/n';          source = "var __t,__p='',__j=Array.prototype.join," +              "print=function(){__p+=__j.call(arguments,'');};/n" +              source + "return __p;/n";          try {            render = new Function(settings.variable || 'obj', '_', source);          } catch (e) {            e.source = source;            throw e;          }          if (data) return render(data, _);          var template = function(data) {            return render.call(this, data);          };          // Provide the compiled function source as a convenience for precompilation.          template.source = 'function(' + (settings.variable || 'obj') + '){/n' + source + '}';          return template;        };      })();      </script>      <script>      //會輸出 <div>haahah</div>;      console.log( $.template('<div><%=data%></div>')( {data:"haahah"} ) );      </script>    </body>  </head></html>

  修改了時間軸的樣式, 又為這個插件添加了拖拽的方法,代碼一下變得好亂, 順便普及一下拖拽的事件, ondrop, ondragover,ondrag, 如果要讓元素可以拖拽, 就要為要拖拽的元素添加draggable="true",   元素可以拖拽以后 , 要為可以拖放到的的DIV或者其他塊元素,綁定一個dragover方法, 這個方法就做一件事, ev.preventDefault(), 看代碼撒:

運行下面代碼

<!DOCTYPE HTML><html><head>  <meta charset="utf-8"/>  <style type="text/css">    #div1 {width:488px;height:70px;padding:10px;border:1px solid #aaaaaa;}  </style>  <script type="text/javascript">    //當元素dragover時候一定要阻止默認事件, 否則把當前拖拽的元素就無法drop;    function dragover(ev)    {      console.log(ev);      ev.preventDefault();    }    //對于拖拽事件最重要的一個事件屬性就是dataTransfer;    function drag(ev)    {      console.log(ev);      ev.dataTransfer.setData("Text",ev.target.id);    }    function drop(ev)    {      console.log(ev);      var data=ev.dataTransfer.getData("Text");      ev.target.appendChild(document.getElementById(data));    }  </script></head><body><p>請把圖片拖放到矩形中:</p><div id="div1" ondrop="drop(event)" ondragover="dragover(event)"></div><br /><img id="drag1" src="http://images0.cnblogs.com/news/24442/201507/081152502219706.gif" draggable="true" ondragstart="drag(event)" /></body></html>  另外一個DEMO:運行下面代碼<!DOCTYPE HTML><html><head>  <meta charset="utf-8"/>  <style type="text/css">  </style></head><body>  <p>What fruits do you like?</p>  <ol ondragstart="dragStartHandler(event)">    <li draggable="true" data-value="fruit-apple">Apples</li>    <li draggable="true" data-value="fruit-orange">Oranges</li>    <li draggable="true" data-value="fruit-pear">Pears</li>  </ol>  <script>    var internalDNDType = 'text/x-example'; // set this to something specific to your site    function dragStartHandler(event) {      if (event.target instanceof HTMLLIElement) {        // use the element's data-value="" attribute as the value to be moving:        event.dataTransfer.setData(internalDNDType, event.target.dataset.value);        event.dataTransfer.effectAllowed = 'move'; // only allow moves      } else {        event.preventDefault(); // don't allow selection to be dragged      }    }  </script>  <p>Drop your favorite fruits below:</p>  <ol ondrop="dropHandler(event)" ondragover="dragover(event)">    <!-- don't forget to change the "text/x-example" type to something    specific to your site -->    <li>drop</li>  </ol>  <script>    var internalDNDType = 'text/x-example'; // set this to something specific to your site    function dropHandler(event) {      var li = document.createElement('li');      var data = event.dataTransfer.getData(internalDNDType);      if (data == 'fruit-apple') {        li.textContent = 'Apples';      } else if (data == 'fruit-orange') {        li.textContent = 'Oranges';      } else if (data == 'fruit-pear') {        li.textContent = 'Pears';      } else {        li.textContent = 'Unknown Fruit';      }      event.target.appendChild(li);    };    function dragover(ev) {      ev.preventDefault();    };  </script></body></html>

   HTML5的拖拽提供了 setDragImage ,  effectAllowed , setData.... 等很多便捷的方法給開發者,  通過FileReader讀取File, 然后就可以用ajax與后臺進行交互, 和前端DOM操作:

<!DOCTYPE HTML><html><head>  <meta charset="utf-8"/>  <style type="text/css">  </style></head><body>  <div id="div0" ondragover="dragover(event)" ondrop="drop(event)">    drop拖放文件進來  </div>  <script>    function dragover(ev) {      ev.preventDefault();    };    function drop(ev) {      var reader = new FileReader();      reader.onload = function ( ev ) {        var oDiv = document.createElement("div");        oDiv.innerHTML = ev.target.result;        document.body.appendChild( oDiv );      };      reader.readAsText( ev.dataTransfer.files[0] );      ev.preventDefault();    }  </script></body></html>

  插件效果圖:

  最后完成的插件代碼:

<!--//設置內容;window.onWebMessage( '{"type":"setItems","data":{"items":[{"name":1111,"type":"doc"},{"name":2222,"type":"doc"}]}}' ) ;window.onWebMessage( '{"type":"setItems","data":{"items":[{"name":"文檔類型","type":"doc"},{"name":"音頻類型","type":"audio","active":true},{"name":"視頻類型","type":"video"},{"name":"單元測試","type":"test"},{"name":"圖片類型","type":"pic"}]}}' ) ;//設置內容, 對應的item對象如果active為true為激活態;window.onWebMessage( '{"type":"setItems","data":{"items":[{"name":1111,"type":"doc"},{"name":2222,"type":"doc","active":true}]}}' ) ;//設置某個第n個位置的item;window.onWebMessage('{"type":"setItem","data":[2,{ "name" : "add-item", "type":"doc"}]}');//激活第三個錨鏈接為選中態;window.onWebMessage( '{"type":"active","data":2}' )//獲取目前的數據:window.onWebMessage( '{"type":"getItem"}' )--><html>  <head>    <meta charset="utf-8" />    <script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.js"></script>  </head>  <style>    /*初始的reset樣式*/    *{      margin:0;      padding:0;    }    .time-line-wrap{      position: relative;      width: 400px;      margin:0 auto;    }    ul{      list-style: none;    }    body,html{      height: 100%;    }    body{      background:#303030;      -webkit-user-select: none;      -moz-user-select: none;      -ms-user-select: none;      user-select: none;    }    /*樣式開始*/    .scroll-time-line{      height:100%;      overflow: hidden;    }    .time-line-wrap{      position: relative;    }    .time-line-wrap::before{      display: block;      content: "";      position: absolute;      border: 2px solid #616161;      width: 7px;      background: #303030;      height: 7px;      z-index: 2;      border-radius: 100%;      left: 12px;      top: 0;    }    .time-line-wrap::after{      display: block;      content: "";      position: absolute;      border: 2px solid #616161;      width: 7px;      background: #303030;      height: 7px;      z-index: 2;      border-radius: 100%;      left: 12px;      bottom:0;    }    .time-line-ul{      position: relative;    }    /**    時間軸的軸用偽類實現;    */    .time-line-ul::before{      display: block;      position:absolute;      content:"";      height:100%;      width:1px;      left:17px;      top:0;      background: #616161;    }    .time-line-ul li{      padding: 14px;      position: relative;      color: #FFF;      height: 26px;    }    .time-line-ul li>* {      vertical-align: middle;      display: inline-block;    }    /**    為了更好的維護hover的樣式, 背景圖片通過js進行管理    hover start;    */    .time-line-ul li b{      width: 32px;      height: 32px;    }    .time-line-ul li b.active{      display: none;    }    .time-line-ul li:hover b{      display: none;    }    .time-line-ul li:hover .active{      display: inline-block;    }    /**      當li被點擊的時候添加的類,優先級    */    .time-line-ul li b.show{      display: none;    }    .time-line-ul li b.active.show{      display: inline-block;    }    /**    hover end    */    .time-line-ul li span{      display: inline-block;      white-space: nowrap;      word-wrap: normal;      width: 100px;      text-overflow: ellipsis;      overflow: hidden;    }    /**    當拖拽LI到某個LI上面,這個LI變透明    */    .over{      opacity: 0.4;    }    /**    占位DIV;    */    .blank{      display: block;      height:50px;      line-height: 50px;    }    /**    默認時間軸錨鏈接的樣式    */    .time-line-icon{      width: 7px;      height: 7px;      display: inline-block;      background: #616161;      border-radius: 100%;    }    /**    鼠標移動上來,或者錨鏈接有active時候的背景圖樣式    */    .time-line-icon.active,.time-line-icon:hover{      background: #fff;    }  </style>  <!--模板,勿刪!-->  <script type="text/tempate" id="li-tpl">    <% for(var i=0; i<items.length; i++ ) {%>      <li class="li-<%=i%>" draggable="true">        <a href="###" class="time-line-icon <% if(items[i].active){ %> <%="active"%> <%}%> "></a>        <b class="">          <img src="imgs/<%=items[i].type%>.png" />        </b>        <b class="active">          <img src="imgs/<%=items[i].type%>1.png" />        </b>        <span>          <%=items[i].name%>        </span>      </li>    <% } %>  </script>  <body>    <!--    滾動出現在這個div里面    -->    <div class="scroll-time-line">      <!---      時間軸相關的html結構      -->      <div class="time-line-wrap">        <ul class="time-line-ul">          <!----假數據--->          <li class="li-0" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/doc.png">            </b>            <b class="active">              <img src="imgs/doc1.png">            </b>            <span>              文檔類型            </span>          </li>          <li class="li-2" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/video.png">            </b>            <b class="active">              <img src="imgs/video1.png">            </b>            <span>              視頻類型            </span>          </li>          <li class="li-3" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/test.png">            </b>            <b class="active">              <img src="imgs/test1.png">            </b>            <span>              單元測試            </span>          </li><li class="li-1" draggable="true">          <a href="###" class="time-line-icon active "></a>          <b class="">            <img src="imgs/audio.png">          </b>          <b class="active">            <img src="imgs/audio1.png">          </b>          <span>            音頻類型          </span>        </li>          <li class="li-4" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/pic.png">            </b>            <b class="active">              <img src="imgs/pic1.png">            </b>          <span>            圖片類型          </span>          </li>          <li class="li-0" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/doc.png">            </b>            <b class="active">              <img src="imgs/doc1.png">            </b>            <span>              文檔類型            </span>          </li>          <li class="li-2" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/video.png">            </b>            <b class="active">              <img src="imgs/video1.png">            </b>            <span>              視頻類型            </span>          </li>          <li class="li-3" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/test.png">            </b>            <b class="active">              <img src="imgs/test1.png">            </b>            <span>              單元測試            </span>          </li><li class="li-1" draggable="true">          <a href="###" class="time-line-icon active "></a>          <b class="">            <img src="imgs/audio.png">          </b>          <b class="active">            <img src="imgs/audio1.png">          </b>          <span>            音頻類型          </span>        </li>          <li class="li-4" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/pic.png">            </b>            <b class="active">              <img src="imgs/pic1.png">            </b>            <span>              圖片類型            </span>          </li>          <li class="li-0" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/doc.png">            </b>            <b class="active">              <img src="imgs/doc1.png">            </b>            <span>              文檔類型            </span>          </li>          <li class="li-2" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/video.png">            </b>            <b class="active">              <img src="imgs/video1.png">            </b>            <span>              視頻類型            </span>          </li>          <li class="li-3" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/test.png">            </b>            <b class="active">              <img src="imgs/test1.png">            </b>            <span>              單元測試            </span>          </li><li class="li-1" draggable="true">          <a href="###" class="time-line-icon active "></a>          <b class="">            <img src="imgs/audio.png">          </b>          <b class="active">            <img src="imgs/audio1.png">          </b>          <span>            音頻類型          </span>        </li>          <li class="li-4" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/pic.png">            </b>            <b class="active">              <img src="imgs/pic1.png">            </b>            <span>              圖片類型            </span>          </li>          <li class="li-0" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/doc.png">            </b>            <b class="active">              <img src="imgs/doc1.png">            </b>            <span>              文檔類型            </span>          </li>          <li class="li-2" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/video.png">            </b>            <b class="active">              <img src="imgs/video1.png">            </b>            <span>              視頻類型            </span>          </li>          <li class="li-3" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/test.png">            </b>            <b class="active">              <img src="imgs/test1.png">            </b>            <span>              單元測試            </span>          </li><li class="li-1" draggable="true">            <a href="###" class="time-line-icon active "></a>            <b class="">              <img src="imgs/audio.png">            </b>            <b class="active">              <img src="imgs/audio1.png">            </b>            <span>              音頻類型            </span>          </li>          <li class="li-4" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/pic.png">            </b>            <b class="active">              <img src="imgs/pic1.png">            </b>            <span>              圖片類型            </span>          </li>          <li class="li-0" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/doc.png">            </b>            <b class="active">              <img src="imgs/doc1.png">            </b>            <span>              文檔類型            </span>          </li>          <li class="li-2" draggable="true">            <a href="###" class="time-line-icon "></a>            <b class="">              <img src="imgs/video.png">            </b>            <b class="active">              <img src="imgs/video1.png">            </b>            <span>              視頻類型            </span>          </li>          <!---假數據end--->        </ul>      </div>      <!---      時間軸相關的html結構結束      -->    </div>    <script>      //模板引擎的代碼      (function () {        //underscore抄的模板引擎;        var escaper = ///|'|/r|/n|/t|/u2028|/u2029/g;        var escapes = {          "'":   "'",          '//':   '//',          '/r':   'r',          '/n':   'n',          '/t':   't',          '/u2028': 'u2028',          '/u2029': 'u2029'        };        $.templateSettings = {          evaluate  : /<%([/s/S]+?)%>/g,          interpolate : /<%=([/s/S]+?)%>/g,          escape   : /<%-([/s/S]+?)%>/g        }        $.template = function(text, data, settings) {          var render;          settings = $.extend({}, settings, $.templateSettings);          // Combine delimiters into one regular expression via alternation.          var matcher = new RegExp([            (settings.escape || noMatch).source,            (settings.interpolate || noMatch).source,            (settings.evaluate || noMatch).source          ].join('|') + '|$', 'g');          // Compile the template source, escaping string literals appropriately.          var index = 0;          var source = "__p+='";          text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {            source += text.slice(index, offset)                .replace(escaper, function(match) { return '//' + escapes[match]; });            if (escape) {              source += "'+/n((__t=(" + escape + "))==null?'':_.escape(__t))+/n'";            }            if (interpolate) {              source += "'+/n((__t=(" + interpolate + "))==null?'':__t)+/n'";            }            if (evaluate) {              source += "';/n" + evaluate + "/n__p+='";            }            index = offset + match.length;            return match;          });          source += "';/n";          // If a variable is not specified, place data values in local scope.          if (!settings.variable) source = 'with(obj||{}){/n' + source + '}/n';          source = "var __t,__p='',__j=Array.prototype.join," +              "print=function(){__p+=__j.call(arguments,'');};/n" +              source + "return __p;/n";          try {            render = new Function(settings.variable || 'obj', '_', source);          } catch (e) {            e.source = source;            throw e;          }          if (data) return render(data, _);          var template = function(data) {            return render.call(this, data);          };          // Provide the compiled function source as a convenience for precompilation.          template.source = 'function(' + (settings.variable || 'obj') + '){/n' + source + '}';          return template;        };      })();      (function( fn ) {        $( fn.call( $ ,$) );      })(function ($) {        $.timeLineSetting = {          offsetTop : 100        };        $.extend($.fn, {          timeLine : function() {            $.each(this, function() {              var _this = this,                  eleDrag;              $(this).delegate(".time-line-ul>li", "click", function( ev ) {                $(".time-line-icon.active").removeClass("active");                $(this).find(".time-line-icon").addClass("active");                $("b").removeClass("show");                $(this).find("b").addClass("show");                $(_this).animate({scrollTop: this.offsetTop - $.timeLineSetting.offsetTop},300);                ev.preventDefault();              }).delegate(".time-line-ul>li","dragstart" , function(ev) {                //不允許img和a的拖拽;                if( ev.target&&ev.target.tagName.toLocaleLowerCase() === "img" || ev.target.tagName.toLocaleLowerCase() === "a") {                  return false;                };                /*拖拽開始*/                //拖拽效果                ev.originalEvent.dataTransfer.effectAllowed = "move";                eleDrag = ev.originalEvent.target;                return true;              }).delegate(".time-line-ul>li","dragenter" , function(ev) {                return true;              }).delegate(".time-line-ul>li", "dragover" , function(ev) {                $(".time-line-ul>li.over").removeClass("over");                $(this).addClass("over");                $(".blank").remove();                var $blank = $("<li class='blank' draggable='true'></li>");                $(this).after( $blank );                /*拖拽元素在目標元素頭上移動的時候*/                ev.preventDefault();                return true;              });              $(".time-line-ul").bind("drop" , function(ev) {                if(ev.target.tagName.toLocaleLowerCase() === "li") {                  $(ev.target).after( eleDrag );                };                $(".blank").remove();                $(".time-line-ul>li.over").removeClass("over");                return false;              });            });          }        });      });      $(function() {        var compile= $.template( $("#li-tpl").html() || "");        //與客戶端的交互事件;        var orginalData = {};        window.onWebMessage = function( msg ) {          msg = JSON.parse(msg);          switch( msg.type ) {            case "setItems" :              $(".time-line-ul").html( compile(msg.data) );              //結構化復制;              orginalData = JSON.parse(JSON.stringify(msg.data));              break;            case "setItem" :              orginalData.items&&orginalData.items.splice(msg.data[0],0,msg.data[1]);              $(".time-line-ul").html( compile(orginalData) );              break;            case "getItem" :                var result = [];                var lis = $(".time-line-ul li");                for(var i=0; i<lis.length; i++) {                  result.push( {                    index : i,                    src : $(lis[i]).find("img").attr("src"),                    name : $(lis[i]).find("span").text()                  });                };                alert(JSON.stringify( result ));              break;            case "active" :              $(".time-line-icon.active").removeClass("active");              $(".time-line-ul>li").eq( msg.data).find(".time-line-icon").addClass("active")              break;          };        };        //啟用插件;        $(".scroll-time-line").timeLine();      })    </script>  </body></html>

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品美女免费| 日韩av123| 午夜精品一区二区三区在线视频| 久久久久久网站| 久久久久久com| 日韩激情视频在线播放| 成人黄色免费网站在线观看| 国产亚洲欧洲高清| 亚洲欧美日韩精品久久| 精品无人国产偷自产在线| 久久久久久久网站| 欧美一区二区视频97| 欧美性猛交xxxx免费看久久久| 久久久亚洲天堂| 91豆花精品一区| 日韩精品亚洲视频| 国模精品一区二区三区色天香| 精品国产依人香蕉在线精品| 欧美亚洲另类视频| 亚洲欧美另类人妖| 中文字幕精品www乱入免费视频| www.日韩不卡电影av| 国产区亚洲区欧美区| 国产激情久久久| 亚洲偷欧美偷国内偷| 黑人巨大精品欧美一区二区一视频| 欧美成人午夜免费视在线看片| 欧美丰满老妇厨房牲生活| 91精品国产沙发| 国产丝袜高跟一区| 97免费在线视频| 中文日韩在线观看| 欧美电影在线观看| 国产精品揄拍500视频| 亚洲国产成人久久综合一区| 日本人成精品视频在线| 国产精品久久久久av免费| 国产91露脸中文字幕在线| 日韩中文字幕视频| 国产精品欧美亚洲777777| 国产精品久久久久国产a级| 亚洲国产精品va在线看黑人| 欧美日韩成人在线播放| 日韩精品在线观看视频| 精品国产自在精品国产浪潮| 亚洲第一区在线| 欧美另类69精品久久久久9999| 成人黄色av免费在线观看| 国产精品国产自产拍高清av水多| 日韩一区av在线| 欧美国产高跟鞋裸体秀xxxhd| 中文一区二区视频| 国产欧美日韩视频| 国产精品国产三级国产aⅴ浪潮| 亚洲在线观看视频| 国产999精品视频| 国产亚洲欧美一区| 亚洲国产精品va| 欧美性受xxxx白人性爽| 国产999精品| 午夜精品一区二区三区在线视频| 久久99视频免费| 国内免费久久久久久久久久久| 国产91精品久| 日韩美女在线播放| 亚洲成色777777在线观看影院| 日韩欧美一区二区三区| 国产精品日日摸夜夜添夜夜av| 亚洲国产古装精品网站| 久久影视免费观看| 国产精品白丝av嫩草影院| 日本精品一区二区三区在线播放视频| 亚洲成人久久电影| 日韩欧美国产一区二区| 日韩精品免费一线在线观看| 国产亚洲免费的视频看| 亚洲精品国产成人| 91精品久久久久久久久不口人| 国产精品极品尤物在线观看| 国模吧一区二区| 91视频国产一区| 韩国美女主播一区| 亚洲人成五月天| 亚洲成人精品在线| 亚洲天堂av女优| 国产精品对白刺激| 亚洲欧洲在线视频| 日本不卡高字幕在线2019| 亚洲精品videossex少妇| 丝袜美腿精品国产二区| 国产精品久久99久久| 日韩精品久久久久久久玫瑰园| 国产国语刺激对白av不卡| 中文字幕精品一区久久久久| 精品亚洲精品福利线在观看| 亚洲va欧美va国产综合剧情| 中文字幕日韩欧美| 91国语精品自产拍在线观看性色| 韩剧1988免费观看全集| 国外成人在线直播| 欧美自拍大量在线观看| 欧美亚洲另类制服自拍| 成人在线中文字幕| 久久天天躁狠狠躁夜夜爽蜜月| 欧美激情在线观看| 米奇精品一区二区三区在线观看| 国产91九色视频| 日韩在线免费视频| 久久久精品视频成人| 午夜精品福利电影| 亚洲精品久久久久久久久| 亚洲精品suv精品一区二区| 久久久久久久久久久网站| 精品亚洲aⅴ在线观看| 亚洲网站在线播放| 亚洲免费一在线| 国产精品久久一| 亚洲精品一区二区三区婷婷月| 亚洲肉体裸体xxxx137| 欧美一区二区.| 精品久久中文字幕| 国产精品免费看久久久香蕉| 91精品国产综合久久香蕉的用户体验| 55夜色66夜色国产精品视频| 91成人在线视频| 九九热视频这里只有精品| 国产精品一区二区电影| 少妇精69xxtheporn| 久久久中文字幕| 亚洲一级黄色片| 亚洲精品欧美一区二区三区| 性色av一区二区三区红粉影视| 欧美日韩高清在线观看| 亚洲第一天堂av| 欧美国产日韩免费| 国产丝袜一区二区三区免费视频| 亚洲国产精品系列| 国产精品免费一区| 欧美黑人巨大精品一区二区| 日本精品视频网站| 日韩激情视频在线| 超碰97人人做人人爱少妇| 欧美精品福利在线| 韩国一区二区电影| 亚洲欧美国产一本综合首页| 欧美成人亚洲成人| 裸体女人亚洲精品一区| 97视频在线观看亚洲| 青草青草久热精品视频在线网站| 中文字幕欧美在线| 在线免费观看羞羞视频一区二区| 国产精品免费视频xxxx| 久久影视电视剧免费网站| 亚洲区一区二区| 亚洲人成77777在线观看网| 国产精品日韩一区| 国产精品第三页| 久久久www成人免费精品张筱雨| 亚洲人成在线观看网站高清| 国产精品99久久久久久久久久久久| 日韩成人中文字幕在线观看| 亚洲电影在线观看| 国产精品一区二区三区在线播放| 国产精品老女人视频|