zoukankan      html  css  js  c++  java
  • zeptojs-跑马灯效果

      去年的时候了解学习了一下zeptojs,因为是移动js框架嘛还是必须要学习下的,里面封装的方法和jquery很类似,但是底层原理当然是不同的,这里展示的就是一个跑马灯效果,直接上代码和效果图:

      

      样式不怎么好看,在手机端上运行还是可以跑的,可以试试,主要的是贴代码,分享一下效果

      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      5     <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
      6     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
      7     <title>神牛步行3-跑马灯-效果</title>
      8     <link href="//cdn.bootcss.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet" />
      9 
     10 
     11     <style type="text/css">
     12         .bs-glyphicons .glyphicon-class {
     13             display: block;
     14             text-align: center;
     15             word-wrap: break-word;
     16         }
     17 
     18         * {
     19             -webkit-box-sizing: border-box;
     20             -moz-box-sizing: border-box;
     21             box-sizing: border-box;
     22         }
     23 
     24         .bs-glyphicons li {
     25              12.5%;
     26             font-size: 12px;
     27         }
     28 
     29         .bs-glyphicons li {
     30             float: left;
     31              20%;
     32             height: 115px;
     33             padding: 10px;
     34             font-size: 10px;
     35             line-height: 1.4;
     36             text-align: center;
     37             background-color: #f9f9f9;
     38             border: 1px solid #fff;
     39         }
     40 
     41         /*.bs-glyphicons li:hover {
     42                 color: #fff;
     43                 background-color: #563d7c;
     44             }*/
     45 
     46         .loop {
     47             color: #fff;
     48             background-color: #563d7c;
     49         }
     50 
     51         li {
     52             display: list-item;
     53             text-align: -webkit-match-parent;
     54         }
     55 
     56         .bs-glyphicons-list {
     57             padding-left: 0;
     58             list-style: none;
     59         }
     60 
     61         ul, menu, dir {
     62             display: block;
     63             list-style-type: disc;
     64             -webkit-margin-before: 1em;
     65             -webkit-margin-after: 1em;
     66             -webkit-margin-start: 0px;
     67             -webkit-margin-end: 0px;
     68             -webkit-padding-start: 40px;
     69         }
     70 
     71         .defBg {
     72              100%;
     73             height: 100%;
     74         }
     75     </style>
     76 </head>
     77 <body>
     78 
     79     <div class=" container">
     80         <div class="text-center">
     81             <span>每行格子数:</span>
     82             <select id="selGZ" title="每行格子数">
     83                 <option value="5">5</option>
     84                 <option value="7">7</option>
     85                 <option value="9">9</option>
     86                 <option value="11">11</option>
     87             </select>
     88         </div>
     89         <div class="bs-glyphicons">
     90             <ul class="bs-glyphicons-list" id="ulShow"></ul>
     91         </div>
     92     </div>
     93 </body>
     94 </html>
     95 <!--
     96 1 1  1 1 1      1 1 1 1
     97 1 1  1   1      1     1
     98      1 1 1      1     1
     99                 1 1 1 1
    100 -->
    101 <script src="zepto.js"></script>
    102 <script type="text/javascript">
    103 
    104     //自动生成规格
    105     var xmd = function (options) {
    106 
    107         var defOptions = {
    108 
    109             id: "",  //要显示区域的Id
    110             colsSize: 5,   //列数量 自动计算每个格子宽度(注:奇数时最好)
    111             gzName: [],  //每个宫格的title信息   如果数组数量少于总格,剩余的显示无奖品;多余的将不显示  (注:显示的格子数量公式为 (colsSize - 2) * 4 + 4)
    112             gzBgImg: [],  //每个宫格的背景图片(无默认背景色)
    113             defTitle: "放假一天",  //默认奖品
    114             defBg: "放假一天,真欢乐", //默认奖品对应的图片,没有好看的图片展示弄成文字,如需要图片替换即可   <img class='defBg' src='shopping.jpg'/>
    115             speed: 1000  //单位秒
    116         };
    117 
    118         //格式化{0}
    119         var fomart = function (str, arr) {
    120 
    121             for (var i = 0; i < arr.length; i++) {
    122 
    123                 str = str.replace("{" + i + "}", arr[i]);
    124             }
    125             return str;
    126         }
    127 
    128         //获取数组信息
    129         var getArr = function (arr, index, defReturn) {
    130 
    131             if (arr.length <= index) { return defReturn; }
    132 
    133             return arr[index];
    134         }
    135     
    136         //属性合并(一般写插件都需要)
    137         $.extend(defOptions, options);
    138 
    139         //生成样式
    140         console.log(defOptions.colsSize);
    141         if (defOptions.colsSize < 4) { return "<li style='background-color:white'>必须大于3列!</li>" }
    142         if (defOptions.speed < 50) { return "<li style='background-color:white'>跑动速度应该在50以上!</li>" }
    143 
    144         var tab = [];
    145         var count = defOptions.colsSize * defOptions.colsSize;
    146         var midoleVal = Math.ceil(defOptions.colsSize / 2); //中间值
    147         var loop = 0;
    148         var w = 100 / defOptions.colsSize;   //li宽度
    149         console.log(w);
    150         var firstStyle = '<li style=" ' + w + '%;" id="li_{0}" title="{1}">{2}</li>';   //边缘样式
    151         var secondStyle = "<li style='background-color:white; " + w + "%;'></li>";   //中间样式
    152         var threeStyle = "<li  id='liShow' title='选中物品区域' style='line-height:100px;  font-size:larger; " + w + "%;'>选中物品区域</li>";   //展示选中物品样式
    153         var fourStyle = "<li style='background-color:white; " + w + "%; '><button id='btnStart'  class='btn btn-default'>奔跑</button></li>";  //按钮区域
    154         var j = 1;
    155         var totalCount = (defOptions.colsSize - 2) * 4 + 4; //显示总的格子数
    156         var leftColRecord = 0;  //左边列记录数
    157         var bottomColRecord = defOptions.colsSize - 1; //底边列记录数
    158 
    159         for (var i = 0; i < count ; i++) {
    160 
    161 
    162             if (i < defOptions.colsSize) {  //头部
    163 
    164                 var title = getArr(defOptions.gzName, j - 1, defOptions.defTitle);
    165                 var bg = getArr(defOptions.gzBgImg, j - 1, title);
    166                 if (bg.indexOf(".") >= 0) { bg = fomart("<img class='defBg' src='{0}'/>", [bg]); }
    167 
    168                 tab.push(fomart(firstStyle, [j.toString(), title, bg])); j++;
    169             } else if (i >= count - defOptions.colsSize) {   //尾部
    170 
    171                 var index = j + bottomColRecord;
    172                 var title = getArr(defOptions.gzName, index - 1, defOptions.defTitle);
    173                 var bg = getArr(defOptions.gzBgImg, index - 1, title);
    174                 if (bg.indexOf(".") >= 0) { bg = fomart("<img class='defBg' src='{0}'/>", [bg]); }
    175 
    176                 tab.push(fomart(firstStyle, [index.toString(), title, bg]));
    177                 bottomColRecord--;
    178             } else {   //中间
    179 
    180                 if (i % defOptions.colsSize == 0) {   //第一列
    181 
    182                     var index = totalCount - leftColRecord;
    183                     var title = getArr(defOptions.gzName, index - 1, defOptions.defTitle);
    184                     var bg = getArr(defOptions.gzBgImg, index - 1, title);
    185                     if (bg.indexOf(".") >= 0) { bg = fomart("<img class='defBg' src='{0}'/>", [bg]); }
    186 
    187                     tab.push(fomart(firstStyle, [index.toString(), title, bg]));
    188                     leftColRecord++;
    189                 } else if ((i + 1) % defOptions.colsSize == 0) {  //最后一列
    190 
    191                     var index = j;
    192                     var title = getArr(defOptions.gzName, index - 1, defOptions.defTitle);
    193                     var bg = getArr(defOptions.gzBgImg, index - 1, title);
    194                     if (bg.indexOf(".") >= 0) { bg = fomart("<img class='defBg' src='{0}'/>", [bg]); }
    195 
    196                     tab.push(fomart(firstStyle, [index.toString(), title, bg])); j++;
    197                 } else {
    198 
    199                     if ((i + midoleVal) % defOptions.colsSize == 0 && loop == 1 && i > count - 2 * defOptions.colsSize) { tab.push(fourStyle); loop++ } //按钮
    200                     else if ((i + midoleVal) % defOptions.colsSize == 0 && loop == 0 && i > count - 3 * defOptions.colsSize) { tab.push(threeStyle); loop++ }    //如果最中间的增加id,方便选中后展示信息
    201                     else { tab.push(secondStyle); }   //空白信息
    202                 }
    203             }
    204 
    205         }
    206         //显示样式到页面
    207         $("#" + defOptions.id).html(tab.join(''));
    208 
    209         //跑起来
    210         var interval = null;
    211         var go_i = 1;
    212         var go = function () {
    213 
    214 
    215             interval = setInterval(function () {
    216                 //console.log(defOptions.speed);
    217                 //初始化背景
    218                 for (var ii = 1; ii <= totalCount; ii++) {
    219                     $("#li_" + ii).css("background-color", "#f9f9f9");
    220                 }
    221 
    222                 //对当前选中的添加样式
    223                 $("#li_" + go_i).css("background-color", "#563d7c");
    224                 $("#liShow").html($("#li_" + go_i).attr("title"));
    225                 go_i++;
    226 
    227                 if (go_i > totalCount) { go_i = 1; }
    228             }, defOptions.speed);
    229         }
    230 
    231         //绑定开始事件
    232         var slow = null;
    233         var btn = $("button[id='btnStart']");
    234         var orgSpeed = defOptions.speed;
    235         btn.on("click", function () {
    236 
    237             if (interval != null) {
    238 
    239                 if (slow != null) { return; }
    240                 //开始减速-停止
    241                 var stopVal = defOptions.speed * 5;  //时间大于1.2倍后停止
    242                 console.log(stopVal);
    243                 slow = setInterval(function () {
    244 
    245                     defOptions.speed += orgSpeed / 2;
    246                     if (defOptions.speed >= stopVal) {
    247                         btn.html("奔跑");
    248                         if (interval != null) { clearInterval(interval); interval = null; }
    249                         clearInterval(slow);
    250                         slow = null;
    251 
    252                     } else {
    253                         if (interval != null) { clearInterval(interval); interval = null; }
    254                         go();
    255                     }
    256                 }, 500);
    257 
    258                 btn.html("减速");
    259             } else {
    260                 defOptions.speed = orgSpeed;
    261                 btn.html("停止");
    262                 go_i = 1;
    263                 go();
    264             }
    265         });
    266     }
    267 
    268     $(function () {
    269 
    270         //初始化跑马灯配置
    271         var option = {
    272             id: "ulShow",
    273             gzName: ["香蕉", "苹果", "手榴弹", "西瓜", "葡萄", "瓜子", "梨子", "樱桃", "钞票", "番茄"],
    274             gzBgImg: ["香蕉.jpg", "苹果.jpg"],
    275             speed: 100,
    276             colsSize: 5
    277         };
    278         xmd(option);
    279 
    280         $("#selGZ").on("change", function () {
    281 
    282             var selVal = $(this).val();
    283             option.colsSize = selVal;
    284             xmd(option);
    285         });
    286     })
    287 </script>
    View Code

      效果访问地址:http://7xn3fx.com1.z0.glb.clouddn.com/跑马灯.html

  • 相关阅读:
    ubuntu15.10下各种编译环境的搭建(工作平台大转移)
    win7+ubuntu15.10的安装
    Qt之串口通信
    读C++代码必备专业名词
    好书好网站积累着有空看
    大数学家与中小学教育相关的资料(持续更新)
    《x的奇幻之旅》读书笔记
    冯·诺依曼为后生解围
    从一道简单的几何题说起
    Steiner-Lehmus 定理
  • 原文地址:https://www.cnblogs.com/wangrudong003/p/5415970.html
Copyright © 2011-2022 走看看