dmy 6 år sedan
förälder
incheckning
e49415ace8
76 ändrade filer med 3250 tillägg och 10917 borttagningar
  1. 12 1
      2018专题/1806征途专题-商务/src/lib/rem.js
  2. 9 2
      2018专题/LOL赛事竞猜专题通用/src/_index.html
  3. 2 28
      2018专题/LOL赛事竞猜专题通用/src/_pgi1807.html
  4. 19 8
      2018专题/LOL赛事竞猜专题通用/src/modules/page/main.js
  5. 29 21
      2018专题/LOL赛事竞猜专题通用/src/modules/page/pgimatch.js
  6. 6 4
      2018专题/LOL赛事竞猜专题通用/src/sass/global.scss
  7. 1 1
      2018专题/LOL赛事竞猜专题通用/src/tpl/userInfo.tmpl
  8. 1 1
      2018专题/LPL赛事模块通用竞猜顶部/src/_index.html
  9. 1 1
      2018专题/LPL赛事模块通用竞猜顶部/src/_lplsummer.html
  10. 16 2
      2018专题/LPL赛事模块通用竞猜顶部/src/modules/page/common.js
  11. 12 4
      2018专题/LPL赛事模块通用竞猜顶部/src/modules/page/index.js
  12. 16 8
      2018专题/LPL赛事模块通用竞猜顶部/src/modules/page/lplsummer.js
  13. 1 0
      2018专题/LPL赛事模块通用竞猜顶部/src/sass/global.scss
  14. 2 134
      2018专题/球球大作战竞猜/src/_index.html
  15. 206 0
      2018专题/球球大作战竞猜/src/_match08.html
  16. 26 0
      2018专题/球球大作战竞猜/src/_pubswiper.html
  17. 0 0
      2018专题/球球大作战竞猜/src/modules/dwudbproxy/css/dwLoginPopup.css
  18. 0 0
      2018专题/球球大作战竞猜/src/modules/dwudbproxy/css/vhuyaLoginPopup.css
  19. 0 490
      2018专题/球球大作战竞猜/src/modules/dwudbproxy/dwudbproxy.js
  20. 0 35
      2018专题/球球大作战竞猜/src/modules/dwudbproxy/tpl/dwLoginPopup.tmpl
  21. 0 13
      2018专题/球球大作战竞猜/src/modules/dwudbproxy/tpl/vhuyaLoginPopup.tmpl
  22. 313 0
      2018专题/球球大作战竞猜/src/modules/match08/match08.js
  23. 11 0
      2018专题/球球大作战竞猜/src/modules/match08/swiper.min.js
  24. 0 6
      2018专题/球球大作战竞猜/src/modules/page/clipboard.min.js
  25. 0 1276
      2018专题/球球大作战竞猜/src/modules/page/dialog.js
  26. 0 523
      2018专题/球球大作战竞猜/src/modules/page/jquery.gallery.js
  27. 28 19
      2018专题/球球大作战竞猜/src/modules/page/main.js
  28. 165 0
      2018专题/球球大作战竞猜/src/modules/pubswiper/pubswiper.js
  29. 11 0
      2018专题/球球大作战竞猜/src/modules/pubswiper/swiper.min.js
  30. 0 90
      2018专题/球球大作战竞猜/src/modules/sealoader/sealoader.js
  31. 0 636
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/accordion-debug.js
  32. 0 0
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/accordion.js
  33. 0 692
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/carousel-debug.js
  34. 0 0
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/carousel.js
  35. 0 35
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/package.json
  36. 0 612
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/slide-debug.js
  37. 0 0
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/slide.js
  38. 0 601
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/switchable-debug.js
  39. 0 0
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/switchable.js
  40. 0 607
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/tabs-debug.js
  41. 0 0
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/tabs.js
  42. 0 637
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/accordion-debug.js
  43. 0 0
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/accordion.js
  44. 0 693
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/carousel-debug.js
  45. 0 0
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/carousel.js
  46. 0 35
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/package.json
  47. 0 613
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/slide-debug.js
  48. 0 0
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/slide.js
  49. 0 602
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/switchable-debug.js
  50. 0 0
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/switchable.js
  51. 0 608
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/tabs-debug.js
  52. 0 0
      2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/tabs.js
  53. 0 6
      2018专题/球球大作战竞猜/src/modules/switchable/demo/.ftppass
  54. 0 23
      2018专题/球球大作战竞猜/src/modules/switchable/demo/.gitignore
  55. 0 19
      2018专题/球球大作战竞猜/src/modules/switchable/demo/.travis.yml
  56. 0 22
      2018专题/球球大作战竞猜/src/modules/switchable/demo/README.md
  57. 0 144
      2018专题/球球大作战竞猜/src/modules/switchable/demo/examples/accordion.md
  58. 0 271
      2018专题/球球大作战竞猜/src/modules/switchable/demo/examples/index.md
  59. 0 319
      2018专题/球球大作战竞猜/src/modules/switchable/demo/examples/scrollpic.md
  60. 0 84
      2018专题/球球大作战竞猜/src/modules/switchable/demo/examples/scrolltxt.md
  61. 0 138
      2018专题/球球大作战竞猜/src/modules/switchable/demo/examples/tab.md
  62. 0 37
      2018专题/球球大作战竞猜/src/modules/switchable/demo/package.json
  63. 0 755
      2018专题/球球大作战竞猜/src/modules/switchable/demo/src/switchable.css
  64. 0 7
      2018专题/球球大作战竞猜/src/modules/switchable/demo/src/switchable.js
  65. 0 12
      2018专题/球球大作战竞猜/src/modules/switchable/demo/tests/switchable-spec.js
  66. 14 15
      2018专题/球球大作战竞猜/src/sass/index/global.scss
  67. 0 0
      2018专题/球球大作战竞猜/src/sass/index/media.scss
  68. 0 0
      2018专题/球球大作战竞猜/src/sass/index/swiper.css
  69. 532 0
      2018专题/球球大作战竞猜/src/sass/match08/global.scss
  70. 260 0
      2018专题/球球大作战竞猜/src/sass/match08/media.scss
  71. 616 0
      2018专题/球球大作战竞猜/src/sass/match08/swiper.css
  72. 20 0
      2018专题/球球大作战竞猜/src/sass/pubswiper/media.scss
  73. 304 0
      2018专题/球球大作战竞猜/src/sass/pubswiper/pubswiper.scss
  74. 616 0
      2018专题/球球大作战竞猜/src/sass/pubswiper/swiper.css
  75. 0 26
      2018专题/球球大作战竞猜/src/tpl/bindWx.tmpl
  76. 1 1
      2018专题/球球大作战竞猜/src/tpl/userInfo.tmpl

+ 12 - 1
2018专题/1806征途专题-商务/src/lib/rem.js

@@ -1 +1,12 @@
-!function(d,a){var e=d.documentElement,c="orientationchange"in window?"orientationchange":"resize",v=function(){var f=e.clientWidth;if(f){var a=20*(f/320);e.style.fontSize=(70>a?70:a)+"px"}};d.addEventListener&&(a.addEventListener(c,v,!1),d.addEventListener("DOMContentLoaded",v,!1),v())}(document,window);
+! function (d, a) {
+    var e = d.documentElement,
+        c = "orientationchange" in window ? "orientationchange" : "resize",
+        v = function () {
+            var f = e.clientWidth;
+            if (f) {
+                var a = 20 * (f / 320);
+                e.style.fontSize = (70 > a ? 70 : a) + "px"
+            }
+        };
+    d.addEventListener && (a.addEventListener(c, v, !1), d.addEventListener("DOMContentLoaded", v, !1), v())
+}(document, window);

+ 9 - 2
2018专题/LOL赛事竞猜专题通用/src/_index.html

@@ -23,7 +23,7 @@
         data-acid => 竞猜活动ID
         data-boundlist => 是否请求获奖名单接口展示获奖名单
     -->
-    <div class="page-index" data-boundlist="true" data-acid="10">
+    <div class="page-index" data-boundlist="true" data-acid="21">
         <div class="pub-main">
             <!-- 头部 -->
             <div class="page-top">
@@ -51,7 +51,7 @@
             <div class="page-title" id="targetRank">
                 <span class="red">竞猜</span><span class="blue">排行榜</span>
             </div>
-            <div class="rank-wrap" id="subRank">
+            <div class="rank-wrap" id="subRank" data-limit="30">
             </div>
             <!-- 奖品设置 -->
             <div class="page-title">
@@ -224,6 +224,13 @@
                     </div>
                 </div>
                 <div class="form-item clearfix">
+                    <div class="form-title">QQ</div>
+                    <div class="form-text">
+                        <input type="text" class="regist-qq">
+                        <p class="tips">QQ不能为空</p>
+                    </div>
+                </div>
+                <div class="form-item clearfix">
                     <div class="form-title">收货地址</div>
                     <div class="form-text">
                         <textarea class="regist-address"></textarea>

+ 2 - 28
2018专题/LOL赛事竞猜专题通用/src/_pgi1807.html

@@ -193,36 +193,10 @@
             <!-- 获奖名单 -->
             <div id="targetReward" style="display: none;">
                 <div class="page-title">
-                    <span class="red">获奖</span><span class="blue">名单</span>
+                    <span class="red">上轮获奖</span><span class="blue">名单</span>
                 </div>
                 <div class="bonus-wrap clearfix">
-                    <div class="level-box">
-                        <div class="title">特等奖</div>
-                        <div class="level-list special_level">
-                        </div>
-                    </div>
-                    <div class="level-box">
-                        <div class="title">一等奖</div>
-                        <div class="level-list one_level">
-                        </div>
-                    </div>
-                    <div class="level-box">
-                        <div class="title">二等奖</div>
-                        <div class="level-list two_level">
-                        </div>
-                    </div>
-                </div>
-                <div class="bonus-wrap clearfix" style="padding-top: 0;">
-                    <div class="level-box">
-                        <div class="title">三等奖</div>
-                        <div class="level-list three_level">
-                        </div>
-                    </div>
-                    <div class="level-box">
-                        <div class="title">安慰奖</div>
-                        <div class="level-list anwei_level">
-                        </div>
-                    </div>
+                    <div class="waiting-tips">马上公布</div>
                 </div>
             </div>
         </div>

+ 19 - 8
2018专题/LOL赛事竞猜专题通用/src/modules/page/main.js

@@ -1,6 +1,4 @@
-// var Swiper = require('swiper.min.js');//轮播
-
-// ----- 公用模板 -------
+// ----- 竞猜专题 公用模板 -------
 
 var modalGuessTpl = __inline("/src/tpl/modalMyG.tmpl"); //我的竞猜
 var userInfoTpl = __inline("/src/tpl/userInfo.tmpl"); //用户信息
@@ -50,12 +48,10 @@ var C = {
     },
     modalShow: function() {
         // 弹窗
-        // $('#prizeCash').click(function(){
         $(document).on('click', '#prizeCash', function() {
             $('#prizeCashModal').fadeIn();
         })
         $(document).on('click', '#myGue', function() {
-            // $('#myGueModal').html(modalGuessTpl());
             $('#myGueModal').fadeIn();
             M.getMyGuess();
         })
@@ -84,6 +80,8 @@ var C = {
             var name = $('.regist-name').val();
             var phone = $('.regist-phone').val();
             var address = $('.regist-address').val();
+            var qq = $('.regist-qq').val();
+
             if(name == ''){
                 $('.regist-name').next('.tips').show();
                 return false;
@@ -96,12 +94,17 @@ var C = {
                 $('.regist-address').next('.tips').show();
                 return false;
             }
+            if(qq == ''){
+                $('.regist-qq').next('.tips').show();
+                return false;
+            }
             
             var param = {
                 ac_id: 1,
                 realname: name,
                 phone: phone,
-                addr: address
+                addr: address,
+                qq: qq
             }
 
             M.registBonus(param);
@@ -124,6 +127,12 @@ var C = {
                 $(this).next().hide();
             }
         })
+        $('.regist-qq').blur(function() {
+            var val = $(this).val();
+            if(val) {
+                $(this).next().hide();
+            }
+        })
     },
 }
 
@@ -207,9 +216,11 @@ var M = {
                 var name = data.info.realname;
                 var phone = data.info.phone;
                 var addr = data.info.addr;
+                var qq =  data.info.qq;
                 $('.regist-name').val(name);
                 $('.regist-phone').val(phone);
                 $('.regist-address').val(addr);
+                $('.regist-qq').val(qq);
             },
             error: function(){
                 // 登录态失效
@@ -234,9 +245,10 @@ var M = {
     },
     // 用户排行榜
     getRankTable: function() {
+        var limit = $('#subRank').attr('data-limit') ? $('#subRank').attr('data-limit') : 15
         $.ajax({  
             dataType: 'jsonp',  
-            url: API+'/user/sumRank?ac_id='+AC_ID+'&limit=15',  
+            url: API+'/user/sumRank?ac_id='+AC_ID+'&limit='+limit,  
             success: function(data){  
                 V.renderRanktable(data.list);
             }
@@ -302,7 +314,6 @@ var M = {
 
 
                         if(!$bonusLevel[0]) {
-                            console.log(name)
                             var levelHtml = '<div class="level-box">'+
                                                 '<div class="title">'+ title +'</div>'+
                                                 '<div class="level-list bonus-level-'+level+'"></div>'+

+ 29 - 21
2018专题/LOL赛事竞猜专题通用/src/modules/page/pgimatch.js

@@ -235,7 +235,7 @@ var M = {
     getRankTable: function() {
         $.ajax({  
             dataType: 'jsonp',  
-            url: API+'/user/sumRank?ac_id='+AC_ID+'&limit=16',  
+            url: API+'/user/sumRank?ac_id='+AC_ID+'&limit=30',  
             success: function(data){  
                 V.renderRanktable(data.list);
             }
@@ -283,28 +283,36 @@ var M = {
     getBonusList: function() {
         $.ajax({  
             dataType: 'jsonp',  
-            url: API+'/user/bonusList?ac_id='+AC_ID,  
-            // data: {args:param},
+            url: API+'/user/bonusList?ac_id=' + AC_ID ,  
             success: function(data){ 
-                // console.log(data)
                 var list = data.list;
-                $.each(list, function(index, val) {
-                    // console.log(val.bonus_level)
-                    var level = val.bonus_level_desc;
-                    var name = val.nickname + ',';
-                    var nameHtml = '<span class="name">'+ name +'</span>'
-                    if(level == '特等奖') {
-                        $('.special_level').append(nameHtml)
-                    } else if(level == '一等奖') {
-                        $('.one_level').append(nameHtml)
-                    } else if(level == '二等奖') {
-                        $('.two_level').append(nameHtml)
-                    } else if(level == '三等奖') {
-                        $('.three_level').append(nameHtml)
-                    } else if(level == '安慰奖') {
-                        $('.anwei_level').append(nameHtml)
-                    }
-                 })
+                if(list.length) {
+
+                    $('.bonus-wrap').html('')
+
+                    $.each(list, function(index, val) {
+
+                        var level = val.bonus_level;
+                        var name = val.nickname + ',';
+                        var title = val.bonus_level_desc;
+
+                        var $bonusLevel = $('.bonus-level-'+level)
+                        var nameHtml = '<span class="name">'+ name +'</span>'
+
+
+                        if(!$bonusLevel[0]) {
+                            console.log(name)
+                            var levelHtml = '<div class="level-box">'+
+                                                '<div class="title">'+ title +'</div>'+
+                                                '<div class="level-list bonus-level-'+level+'"></div>'+
+                                           ' </div>'
+                            $('.bonus-wrap').append(levelHtml)
+                        }
+
+                        $('.bonus-level-'+level).append(nameHtml)
+                        
+                     })
+                }
             },
             error: function() {
             }

+ 6 - 4
2018专题/LOL赛事竞猜专题通用/src/sass/global.scss

@@ -1,6 +1,6 @@
 @charset "UTF-8";
 @import "base/base.scss";
-@import "swiper.css";
+
 body{
     background-color: #000000;
 }
@@ -70,12 +70,13 @@ body{
             font-size: 18px;
             color: #ffffff;
             margin-left: 10px;
-            margin-right: 20px;
-            width: 90px;
+            margin-right: 10px;
+            width: 130px;
             overflow: hidden;
             text-overflow:ellipsis;
             white-space: nowrap;
             vertical-align: text-bottom;
+            cursor: default;
         }
         .btn{
             display: inline-block;
@@ -87,7 +88,7 @@ body{
     .result-num{
         float: left;
         line-height: 92px;
-        margin-left: 40px;
+        margin-left: 36px;
         .score-icon{
             display: inline-block;
             width: 38px;
@@ -453,6 +454,7 @@ body{
         font-size: 14px;
         background-color: #807d8c;
         border-radius: 4px;
+        cursor: pointer;
     }
     .list-table{
         width: 820px;

+ 1 - 1
2018专题/LOL赛事竞猜专题通用/src/tpl/userInfo.tmpl

@@ -1,7 +1,7 @@
 <% if(data["isLogin"]) { %>
 <div class="user-info">
     <img src="<%=data["avatar"]%>" alt="" class="avater">
-    <div class="name"><%= data["nickname"] %></div>
+    <div class="name" title="<%=data["nickname"]%>" ><%= data["nickname"] %></div>
     <a class="btn loginOut" href="javascript:">注销</a>
 </div>
 <div class="result-num">

+ 1 - 1
2018专题/LPL赛事模块通用竞猜顶部/src/_index.html

@@ -20,7 +20,7 @@
         data-acid: 活动接口的参数ID
     -->
     <div class="page-stake-main">
-        <div class="page-stake" data-group="day" data-acid="20">
+        <div class="page-stake" data-group="day" data-acid="18">
         </div>
     </div>
     <script src="lib/mod.js"></script>

+ 1 - 1
2018专题/LPL赛事模块通用竞猜顶部/src/_lplsummer.html

@@ -20,7 +20,7 @@
         data-match: 联赛类型(LCK,LPL)
     -->
     <div class="page-stake-main">
-        <div class="page-stake" data-group="day" data-match="LPL">
+        <div class="page-stake" data-group="day" data-match="LCK">
         </div>
     </div>
     <script src="lib/mod.js"></script>

+ 16 - 2
2018专题/LPL赛事模块通用竞猜顶部/src/modules/page/common.js

@@ -380,7 +380,13 @@ var M = {
                         var i = V.confirmWeek(MatchListLck.data);
                     }
                     if(type == "day") {
+
                         var i = V.confirmDay(MatchListLck.data);
+
+                        // 特殊情况
+                        if( curtime > starTime(07,30) && curtime < endTime(07,31)) {
+                            i = 7
+                        }
                     }
                     
                     var matchTemp = MatchListLck.data[i];
@@ -501,15 +507,23 @@ var Day = {
         var now = new Date();
         var month = now.getMonth() + 1;
         var day = now.getDate();
+        var year = now.getFullYear();
+
+        var mathchMon = curDay.split('-')[0]
+        var mathchDay = curDay.split('-')[1]
+
         if(month < 10) {
             month = '0' + month
         }
         if(day < 10) {
             day = '0' + day
         }
-        var dayStr = month+'-'+day
+        // var dayStr = month+'-'+day
+
+        var nowTime = new Date(year+'/'+month+'/'+day+' 00:00:00').getTime()
+        var matchTime = new Date(year+'/'+mathchMon+'/'+mathchDay+' 00:00:00').getTime()
 
-        if(curDay == dayStr) {
+        if(nowTime == matchTime || nowTime < matchTime) {
             return true;
         } else {
             return false;

+ 12 - 4
2018专题/LPL赛事模块通用竞猜顶部/src/modules/page/index.js

@@ -1,8 +1,9 @@
+// ---- 竞猜通用面板 ----
+
 var Swiper = require('swiper.min.js');//轮播
 var matchListTpl = __inline("/src/tpl/matchSlider.tmpl"); //比赛列表
 var matchWeekTpl = __inline("/src/tpl/matchWeek.tmpl"); //比赛周列表
 
-
 var UserInfo = {}; //用户信息
 var MatchList = []; //比赛信息
 var swiper = null;
@@ -93,7 +94,6 @@ var C = {
                 alert('还有竞猜没完成哦');
                 return;
             }
-            // $('#Loading').show();
             M.liveQueSubmit(param,$(this));
         })
     }
@@ -331,15 +331,23 @@ var Day = {
         var now = new Date();
         var month = now.getMonth() + 1;
         var day = now.getDate();
+        var year = now.getFullYear();
+
+        var mathchMon = curDay.split('-')[0]
+        var mathchDay = curDay.split('-')[1]
+
         if(month < 10) {
             month = '0' + month
         }
         if(day < 10) {
             day = '0' + day
         }
-        var dayStr = month+'-'+day
+        // var dayStr = month+'-'+day
+
+        var nowTime = new Date(year+'/'+month+'/'+day+' 00:00:00').getTime()
+        var matchTime = new Date(year+'/'+mathchMon+'/'+mathchDay+' 00:00:00').getTime()
 
-        if(curDay == dayStr) {
+        if(nowTime == matchTime || nowTime < matchTime) {
             return true;
         } else {
             return false;

+ 16 - 8
2018专题/LPL赛事模块通用竞猜顶部/src/modules/page/lplsummer.js

@@ -244,13 +244,13 @@ var V = {
         // 没匹配,默认显示第一个key
         if(!flag) {
             // 特殊情况
-            // if( curtime > starTime(07,10) && curtime < endTime(07,11) && matchType == 'LCK') {
-            //     return keyArr[6];
-            // }
-            // 特殊情况
-            if( curtime > starTime(07,19) && curtime < endTime(07,20) && matchType == 'LPL') {
-                return keyArr[3];
+            if( curtime > starTime(07,30) && curtime < endTime(07,31) && matchType == 'LCK') {
+                return keyArr[6];
             }
+            // 特殊情况
+            // if( curtime > starTime(07,19) && curtime < endTime(07,20) && matchType == 'LPL') {
+            //     return keyArr[3];
+            // }
             return keyArr[0];
         }
     },
@@ -404,15 +404,23 @@ var Day = {
         var now = new Date();
         var month = now.getMonth() + 1;
         var day = now.getDate();
+        var year = now.getFullYear();
+
+        var mathchMon = curDay.split('-')[0]
+        var mathchDay = curDay.split('-')[1]
+
         if(month < 10) {
             month = '0' + month
         }
         if(day < 10) {
             day = '0' + day
         }
-        var dayStr = month+'-'+day
+        // var dayStr = month+'-'+day
+
+        var nowTime = new Date(year+'/'+month+'/'+day+' 00:00:00').getTime()
+        var matchTime = new Date(year+'/'+mathchMon+'/'+mathchDay+' 00:00:00').getTime()
 
-        if(curDay == dayStr) {
+        if(nowTime == matchTime || nowTime < matchTime) {
             return true;
         } else {
             return false;

+ 1 - 0
2018专题/LPL赛事模块通用竞猜顶部/src/sass/global.scss

@@ -304,6 +304,7 @@
         line-height: 34px;
         background-color: #807d8c;
         margin-top: 10px;
+        cursor: pointer;
         &:hover{
             background-color: #65636f;
         }

+ 2 - 134
2018专题/球球大作战竞猜/src/_index.html

@@ -9,7 +9,7 @@
     <meta name="Keywords" content="LPL,LPL联赛春季赛,LPL联赛,LPL英雄联盟职业联赛,LPL联赛竞猜">
     <meta name="description" content="">
     <title>【球球大作战赛事竞猜】</title>
-    <link href="sass/global.scss" rel="stylesheet">
+    <link href="sass/index/global.scss" rel="stylesheet">
     <script src="//www.duowan.com/assets/js/jquery.js"></script><!--ignore-->
     <script src="http://pub.dwstatic.com/common/js/dwudbproxy.js"></script><!--ignore-->
 </head>
@@ -46,124 +46,6 @@
                 <span class="red">竞猜</span><span class="blue">排行榜</span>
             </div>
             <div class="rank-wrap" id="subRank">
-                <table class="rank-table">
-                        <thead>
-                            <tr>
-                                <td>当前排名</td>
-                                <td>用户昵称</td>
-                                <td>猜对次数</td>
-                                <td>竞猜积分</td>
-                            </tr>
-                        </thead>
-                        <tbody>
-                            
-                            
-                            <tr>
-                                <td>1</td>
-                                <td>1845164595yy</td>
-                                <td>9次</td>
-                                <td>1500</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>2</td>
-                                <td>余白.</td>
-                                <td>6次</td>
-                                <td>750</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>3</td>
-                                <td>dw_dengmingyu</td>
-                                <td>0次</td>
-                                <td>350</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>4</td>
-                                <td>dw_zhangyi6</td>
-                                <td>0次</td>
-                                <td>300</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>5</td>
-                                <td>Nick</td>
-                                <td>0次</td>
-                                <td>250</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>6</td>
-                                <td>LTRE</td>
-                                <td>0次</td>
-                                <td>200</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>7</td>
-                                <td>dw_yangjiayong</td>
-                                <td>0次</td>
-                                <td>200</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>8</td>
-                                <td>文☆刂 ☆正</td>
-                                <td>0次</td>
-                                <td>200</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>9</td>
-                                <td>大树菠罗luo</td>
-                                <td>0次</td>
-                                <td>150</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>10</td>
-                                <td>loveyuri7777</td>
-                                <td>0次</td>
-                                <td>150</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>11</td>
-                                <td>arsen6</td>
-                                <td>0次</td>
-                                <td>150</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>12</td>
-                                <td>DMY</td>
-                                <td>0次</td>
-                                <td>150</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>13</td>
-                                <td>Augustan</td>
-                                <td>0次</td>
-                                <td>150</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>14</td>
-                                <td>Dz</td>
-                                <td>0次</td>
-                                <td>150</td>
-                            </tr>
-                            
-                            <tr>
-                                <td>15</td>
-                                <td>何起洁</td>
-                                <td>0次</td>
-                                <td>150</td>
-                            </tr>
-                        </tbody>
-                    </table>
             </div>
             <!-- 奖品设置 -->
             <div class="page-title">
@@ -264,21 +146,7 @@
                     <span class="red">获奖</span><span class="blue">名单</span>
                 </div>
                 <div class="bonus-wrap clearfix">
-                    <div class="level-box">
-                        <div class="title">一等奖</div>
-                        <div class="level-list one_level">
-                        </div>
-                    </div>
-                    <div class="level-box">
-                        <div class="title">二等奖</div>
-                        <div class="level-list two_level">
-                        </div>
-                    </div>
-                    <div class="level-box">
-                        <div class="title">三等奖</div>
-                        <div class="level-list three_level">
-                        </div>
-                    </div>
+                    <div class="waiting-tips">马上公布</div>
                 </div>
             </div>
         </div>

+ 206 - 0
2018专题/球球大作战竞猜/src/_match08.html

@@ -0,0 +1,206 @@
+<!doctype html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="renderer" content="webkit">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="Keywords" content="LPL,LPL联赛春季赛,LPL联赛,LPL英雄联盟职业联赛,LPL联赛竞猜">
+    <meta name="description" content="">
+    <title>【球球大作战赛事竞猜】</title>
+    <link href="sass/match08/global.scss" rel="stylesheet">
+    <script src="//www.duowan.com/assets/js/jquery.js"></script><!--ignore-->
+    <script src="http://pub.dwstatic.com/common/js/dwudbproxy.js"></script><!--ignore-->
+</head>
+
+<body>
+    <script src="//pub.dwstatic.com/common/dwNavbar/navbar.js"></script>
+    <div class="page-index" data-announce="false" data-acid="5">
+        <div class="pub-main">
+            <div class="page-top">
+                <div class="topbar"></div>
+                <div class="user clearfix">
+                    <div class="user-wrap">
+
+                    </div>
+                    <div class="page-top-btnwrap">
+                        <!-- <button class="page-top-btn" id="toRewardList">获奖名单</button> -->
+                        <button class="page-top-btn" id="toRule">竞猜规则</button>
+                        <button class="page-top-btn" id="myGue">我的竞猜</button >
+                        <!-- <button class="page-top-btn" id="toRank">排行榜</button> -->
+                        <!-- <button class="page-top-btn" id="prizeCash">收货地址</button> -->
+                    </div>
+                </div>
+            </div>
+            <div class="page-title" id="targetRank">
+                <span class="red">竞猜</span><span class="blue">押注</span>
+            </div>
+            <!-- 押注 -->
+            
+            <!-- 排行榜 -->
+            <div class="page-title" id="targetRank">
+                <span class="red">竞猜</span><span class="blue">排行榜</span>
+            </div>
+            <div class="rank-wrap" id="subRank">
+            </div>
+            <!-- 奖品设置 -->
+            <div class="page-title">
+                <span class="red">奖品</span><span class="blue">设置</span>
+            </div>
+            <!-- PC端 -->
+            <div class="prize-wrap clearfix">
+                <div class="prize-list one">
+                    <div class="prize-list-item">
+                        <img src="" data-src="./img/prize-one-pic.jpg" alt="">
+                        <div class="text-wrap">
+                            <h3 class="prize-name">一等奖</h3>
+                            <p class="prize-tips">罗技G810 RGB炫光机械键盘</p>
+                        </div>
+                    </div>
+                </div>
+                <div class="prize-list two">
+                    <div class="prize-list-item">
+                        <img src="" data-src="./img/prize-one-pic.jpg" alt="">
+                        <div class="text-wrap">
+                            <h3 class="prize-name">一等奖</h3>
+                            <p class="prize-tips">罗技G810 RGB炫光机械键盘</p>
+                        </div>
+                    </div>
+                    <div class="prize-list-item">
+                        <img src="" data-src="./img/prize-one-pic.jpg" alt="">
+                        <div class="text-wrap">
+                            <h3 class="prize-name">一等奖</h3>
+                            <p class="prize-tips">罗技G810 RGB炫光机械键盘</p>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!-- 移动端 -->
+            <div class="prize-wrap-moblie clearfix">
+                <div class="img-wrap">
+                    <div class="cover">
+                        <img src="" data-src="./img/prize-one-pic.jpg" alt="">
+                    </div>
+                    <div class="name">一等奖</div>
+                    <div class="tips">罗技G810 RGB炫光机械键盘</div>
+                </div>
+                <div class="img-wrap">
+                    <div class="cover">
+                        <img src="" data-src="./img/prize-two-pic.jpg" alt="">
+                    </div>
+                    <div class="name">二等奖</div>
+                    <div class="tips">罗技G502竞技游戏鼠标</div>
+                </div>
+                <div class="img-wrap">
+                    <div class="cover">
+                        <img src="" data-src="./img/prize-three-pic_m.jpg" alt="">
+                    </div>
+                    <div class="name">三等奖</div>
+                    <div class="tips">英雄联盟官方手办</div>
+                </div>
+            </div>
+            <!-- 竞猜规则 -->
+            <div class="page-title" id="targetRule">
+                <span class="red">竞猜</span><span class="blue">规则</span>
+            </div>
+            <div class="rule-wrap">
+                <div class="rule-explain">
+                    战马&多玩媒体竞猜规则说明:<span>(lpl春季季后赛竞猜+春季总决赛竞猜)</span>
+                </div>
+                <div class="rule-item clearfix">
+                    <div class="title">1、活动时间:</div>
+                    <div class="text">4月10日—4月17日和4月28日共两个时间段</div>
+                </div>
+                <div class="rule-item clearfix">
+                    <div class="title">2、活动形式:</div>
+                    <div class="text">竞猜预测每场比赛的胜负,并参与答题更多赛事内容</div>
+                </div>
+                <div class="rule-item clearfix">
+                    <div class="title">3、活动规则:</div>
+                    <div class="text">
+                        <p>a. 竞猜每场比赛的胜负,猜对则增加100分,猜错不减分,</p>
+                        <p>b. 除每日比赛胜负竞猜外,用户还可以通过参与每日“趣味问答“来增加积分,每场比赛两道题目,答对第一题加8分,答对第二题加16分。答对第一题加8分,答对第二题加16分。答对第一题加8分,答对第二题加16分。</p>
+                        <p>c. 总决赛开启:为了能让玩家有机会翻盘,总决赛当日所有参加的项目,积分按3倍累计。</p>
+                    </div>
+                </div>
+                <div class="rule-item clearfix">
+                    <div class="title">4、奖励规则:</div>
+                    <div class="text">活动结束后,按照获得积分排出最终名次。如有积分相同,则按照获得积分时间由早到晚排名,超过获奖名额者,则获得下一级别奖品,则按照获得积分时间由早到晚排名,超过获奖名额者,则获得下一级别奖品则按照获得积分时间由早到晚排名,超过获奖名额者,则获得下一级别奖品。</div>
+                </div>
+                <div class="rule-item clearfix">
+                    <div class="title">5、奖品明细:</div>
+                    <div class="text">
+                        <p>一等奖:罗技G810 RGB炫光机械键盘 5个</p>
+                        <p>二等奖:罗技G502竞技游戏鼠标10个</p>
+                        <p>三等奖:英雄联盟官方手办15个</p>
+                    </div>
+                </div>
+            </div>
+            <!-- 获奖名单 -->
+            <div id="targetReward" style="display: none;">
+                <div class="page-title">
+                    <span class="red">获奖</span><span class="blue">名单</span>
+                </div>
+                <div class="bonus-wrap clearfix">
+                    <div class="waiting-tips">马上公布</div>
+                </div>
+            </div>
+        </div>
+     </div>
+    </div>
+    <!-- 中奖登记弹窗 -->
+    <div class="modal-mask" id="prizeCashModal">
+        <div class="pub-modal">
+            <div class="title">中奖登记</div>
+            <div>
+                <div class="form-item clearfix">
+                    <div class="form-title">真实姓名</div>
+                    <div class="form-text">
+                        <input type="text" class="regist-name">
+                        <p class="tips">姓名不能为空</p>
+                    </div>
+                </div>
+                <div class="form-item clearfix">
+                    <div class="form-title">联系电话</div>
+                    <div class="form-text">
+                        <input type="text" class="regist-phone">
+                        <p class="tips">联系电话不能为空</p>
+                    </div>
+                </div>
+                <div class="form-item clearfix">
+                    <div class="form-title">收货地址</div>
+                    <div class="form-text">
+                        <textarea class="regist-address"></textarea>
+                        <p class="tips">收货地址不能为空</p>
+                    </div>
+                </div>
+                <div class="form-item clearfix">
+                    <div class="form-title"> </div>
+                    <div class="form-text">
+                        <button class="submit-btn" id="regist-btn">提交</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!-- 我的竞猜弹窗 -->
+    <div class="modal-mask" id="myGueModal">
+    </div>
+
+    <!-- 移动端底部 -->
+    <div class="m-footer">
+        <p class="link">
+            <a href="javascript:">电脑版</a>
+            <a href="javascript:">关于我们</a>
+        </p>
+        <p class="auth">Copyright © Duowan.com All Rights Reserved</p>
+    </div>
+    <script src="lib/mod.js"></script>
+    <script id="dw-footer-without-gem" charset="utf-8" src="//pub.dwstatic.com/common/dwFoot/duowanFooter.js"></script><!--ignore-->
+    <script>
+        require('modules/match08/match08.js');
+    </script>
+</body>
+
+</html>

+ 26 - 0
2018专题/球球大作战竞猜/src/_pubswiper.html

@@ -0,0 +1,26 @@
+<!doctype html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="renderer" content="webkit">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="Keywords" content="LPL,LPL联赛春季赛,LPL联赛,LPL英雄联盟职业联赛,LPL联赛竞猜">
+    <meta name="description" content="">
+    <title>【球球大作战赛事竞猜】</title>
+    <link href="sass/pubswiper/pubswiper.scss" rel="stylesheet">
+    <script src="//www.duowan.com/assets/js/jquery.js"></script><!--ignore-->
+    <script src="http://pub.dwstatic.com/common/js/dwudbproxy.js"></script><!--ignore-->
+</head>
+<body>
+    <!-- 押注 -->
+    <div class="zt-mod-schedule" data-acid="5" data-ind="106">
+    </div>
+
+    <script src="lib/mod.js"></script>
+    <script>
+        require('modules/pubswiper/pubswiper.js');
+    </script>
+</body>
+</html>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/dwudbproxy/css/dwLoginPopup.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/dwudbproxy/css/vhuyaLoginPopup.css


+ 0 - 490
2018专题/球球大作战竞猜/src/modules/dwudbproxy/dwudbproxy.js

@@ -1,490 +0,0 @@
-(function(window, $){
-    var Config = {
-        multilogin : {
-            domainMap : [
-                    'video.duowan.com',
-                    'duowan.com'
-                ],
-            domainExcludeMap : [
-                 // 'udbproxy.duowan.com',
-                    'ka.duowan.com'
-                ],    
-            urlMap : [
-                    'http://www.duowan.com/s/test_login.html'
-                ]
-        }      
-    };
-    
-    var Util = {
-        loginCallbacks : $.Callbacks('memory'),
-        intervalHandle : 0,
-        
-        getCookie: function(name) {
-            var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
-            if (arr != null) return decodeURI(arr[2]);
-            return null;
-        },
-
-        isLogin : function(){
-            return Util.getCookie('username') ? true : false;
-        },
-        
-        getUsername : function(){
-            var username = Util.getCookie('username');
-            if(!username) return "";
-
-            var arr = username.split('_', 2);
-            if(!arr || !arr[0]) return username;
-            
-            var nickname = Util.getCookie(arr[0] + '_nickname');
-            if(!nickname|| 'null'==nickname) return username;
-            
-            var prefix = "";
-            if( 'newqq'==arr[0] ){
-                prefix = "[QQ网友]";
-            }else if( 'qq'==arr[0] ){
-                prefix = "[微信网友]";
-            }else if( 'sina'==arr[0] ){
-                prefix = "[微博网友]";
-            }else{
-                prefix = "[多玩网友]";
-            }
-            return prefix+nickname;
-
-        },
-        decorateURL : function(url) {
-            if (url) {
-                if (/^http/.test(url)) {
-                    return url;
-                }
-                var protocol = "http://";
-                if (/^https/.test(top.location.href)) {
-                    protocol = "https://"
-                }
-                return protocol + window.location.host + url
-            } else {
-                url = window.location.href;
-                var pos = url.indexOf("#");
-                if (pos != -1) {
-                    url = url.substring(0, pos)
-                }
-                return url;
-            }
-        },
-        intervalCheckLogin : function(intervalTime, tryNum){
-            if( !intervalTime ) intervalTime =100;
-            if( !tryNum ) tryNum = 3000;
-            
-            var that = this;
-            if( that.isLogin() ){
-                that.loginCallbacks.fire();
-            }else{
-                if(that.intervalHandle){
-                    clearInterval(that.intervalHandle); 
-                }
-                var i = 0;
-                that.intervalHandle = setInterval(function(){
-                    i++;
-                    if( that.isLogin() ) {
-                        clearInterval(that.intervalHandle);
-                        that.loginCallbacks.fire();
-                    }
-                    if( i>tryNum ){
-                       clearInterval(that.intervalHandle); 
-                    }
-                }, intervalTime);                 
-            }           
-        },
-
-        handleSuccessURL : function(successURL, closeLoginFunc, reloadPage){
-            var successFunc = function(){};
-            var reloadPageFunc = function(){};
-            var checkLogin = false;
-            
-            if( 'function' == typeof successURL ){
-                successFunc = successURL;
-                successURL = '/?udbSuccessCallback';
-                checkLogin = true;
-            }
-            successURL = this.decorateURL(successURL);
-            
-            if('function' == typeof reloadPage){
-                reloadPageFunc = function(){
-                   reloadPage(successURL);
-                };
-                checkLogin = true;
-            }
-            
-            if(checkLogin){
-                this.loginCallbacks.empty();
-                this.loginCallbacks.add(closeLoginFunc);
-                this.loginCallbacks.add(reloadPageFunc);
-                this.loginCallbacks.add(successFunc);
-                this.intervalCheckLogin();
-            }            
-            return successURL;
-        },
-        
-        isMobile: function(){
-            return false;
-        },
-        
-        useMultiLogin: function(){
-            //排除的域名
-            for(var i in Config.multilogin.domainExcludeMap){
-                if( -1 != location.hostname.indexOf(Config.multilogin.domainExcludeMap[i])   ){
-                    return false;
-                }
-            }
-            //域名白名单
-            for(var i in Config.multilogin.domainMap){
-                if( -1 != location.hostname.indexOf(Config.multilogin.domainMap[i])   ){
-                    return true;
-                }
-            }
-            for(var i in Config.multilogin.urlMap){
-                if( location.href == Config.multilogin.urlMap[i] ){
-                    return true;
-                }
-            }
-            return true;            
-        }      
-    };
-    
-    function UDBLogin(appid, baseURL){
-        this.appid = appid || 5552;
-        this.baseURL = baseURL || 'http://udbproxy.duowan.com/';
-        this.getAuthorizeURL = this.baseURL + 'getAuthorizeURL?appid=' + this.appid;
-        this.callbackURL     = this.baseURL + 'callback?appid=' + this.appid + '&successURL=';
-        this.denyCallbackURL = this.baseURL + 'denyCallback?appid=' + this.appid;
-        this.getDelCookieURL = this.baseURL + 'getDelCookieURL?appid=' + this.appid;     
-        this.UDBCallbacks = $.Callbacks('memory');
-        
-        this.init();
-    }
-    
-    UDBLogin.prototype = {
-        init : function(){
-            if( Util.isMobile() ){
-                this.loadUDBSdk('MWeb'); 
-            }else{
-                this.loadUDBSdk('PCWeb');    
-            }
-        },
-        
-        loadUDBSdk : function(type){
-            var jsMap = {
-                'PCWeb':'/lgn/js/oauth/udbsdk/pcweb/udb.sdk.pcweb.popup.min.js',
-                'MWeb':'/lgn/js/oauth/udbsdk/mweb/udb.sdk.mweb.embed.min.js'
-            }
-            if( !jsMap[type] ) {
-                type = 'PCWeb';
-            }
-            
-            var that = this;
-            var isLoadUDB = function(){
-                if(window.UDB && window.UDB.sdk && window.UDB.sdk[type]){
-                    that.UDBCallbacks.fire(window.UDB.sdk[type]); 
-                }
-            };
-            
-            if( !isLoadUDB() ){
-                $.ajax({
-                    type : "GET",
-                    url : "http://res.udb.duowan.com/" + jsMap[type],
-                    success: function(){
-                        return isLoadUDB();
-                    },
-                    dataType : "script",
-                    cache : true
-                });
-            }
-        },
-        
-        login : function(successURL){
-            var that = this;
-            successURL = Util.handleSuccessURL(successURL, function(){
-                that.UDBCallbacks.add(function(UDBSdk){
-                    UDBSdk.popupCloseLgn && UDBSdk.popupCloseLgn();
-                });
-            });
-            
-            that.UDBCallbacks.add(function(UDBSdk){
-                UDBSdk.jsonpOpenLgn(that.getAuthorizeURL, that.callbackURL + encodeURIComponent(successURL), encodeURI(that.denyCallbackURL));
-            });
-        },
-                
-        embedLogin : function(sel, successURL, UIStyle, closeLoginFunc) {    
-            var that = this;
-            var eq = $(sel);
-            if (eq.length == 0) return;              
-            eq.each(function(){
-                var thisObj = $(this);
-                if (("function" !=typeof successURL) && !successURL) {
-                    successURL = thisObj.data("callback-url");
-                }
-                successURL = Util.handleSuccessURL(successURL, closeLoginFunc);     
-                $.getJSON(that.getAuthorizeURL+'&jsonpcallback=?', {
-                        callbackURL: that.callbackURL + encodeURIComponent(successURL),
-                        denyCallbackURL: that.denyCallbackURL
-                    }, 
-                    function(data) {
-                        if("1" != data.success) {
-                            alert(data.errMsg);
-                            return;
-                        }  
-                        thisObj.append($('<iframe frameborder="0" scrolling="no" allowtransparency="true"></iframe>').attr("src", data.url + "&rdm=" +  Math.random() + "&UIStyle=" + UIStyle));
-                });
-            });
-        },
-        
-        logout : function(successURL){
-            var that = this;
-            successURL = Util.decorateURL(successURL);
-            $.getJSON(that.getDelCookieURL + '&jsonpcallback=?', function(data) {
-                if("1" != data.success) {
-                    alert(data.errMsg);
-                    return;
-                }           
-                that.UDBCallbacks.add(function(UDBSdk){
-                    UDBSdk.deleteCrossmainCookieWithCallBack(
-                    data.delCookieURL,
-                    function(){
-                        top.location.href = successURL;
-                    });
-                });
-            });
-        }
-    };
-    
-    function ThirdLogin(appid, baseURL, loginStyle){
-        this.appid           = appid || 5764;
-        this.baseURL         = baseURL || 'http://udbproxy.duowan.com/thirdlogin';
-        this.loginStyle      = loginStyle || 'duowan';
-        this.callbackURL     = '';
-        this.denyCallbackURL = '';
-        this.minWindow = null;        
-        this.loginPopupObj = null;
-        this.loginMaskObj = null;
-        
-        this.init();
-    }
-    
-    ThirdLogin.prototype = {    
-        init : function(){
-            if( this.isVhuya() ){
-                this.baseURL = 'http://l.huya.com/udb_web/udbport2.php';
-                this.callbackURL = 'http://'+ window.location.host +'/udbcallback.html?do=front3Callback&successURL=';
-                this.denyCallbackURL = 'http://'+ window.location.host+'udbcallback.html?do=front3DenyCallback';
-            }
-        },
-        
-        isVhuya : function(){
-            return 'vhuya'==this.loginStyle ? true : false;
-        },
-        
-        login : function(successURL){
-            if( this.isVhuya() ){
-                this.initVhuyaLoginPopup(successURL);
-            }else{
-                this.initDuowanLoginPopup(successURL);
-            }
-            this.loginPopupObj.show();
-            this.loginMaskObj.show(); 
-        },
-
-        mobileLogin : function(successURL){
-            this.loginOauth('yy', successURL);       
-        },
-        
-        loginOauth : function(loginType, successURL){
-            var that = this;
-            successURL = Util.handleSuccessURL(successURL, function(){
-                that.closeLoginPopup();
-            }, function(successURL){
-                that.reloadPage(successURL);
-            });
-            
-            if('yy'==loginType){
-                var url = 'http://udbproxy.duowan.com/mobile?calbackUrl=' + encodeURIComponent(successURL);
-            }else if( this.isVhuya() ){
-                callbackURL = encodeURIComponent(this.callbackURL + encodeURIComponent(successURL));
-                denyCallbackURL = encodeURIComponent(this.denyCallbackURL);
-                var url = this.baseURL + "?do=dummy3AuthorizeURL&loginType=" + loginType + "&fcbUrl=" + callbackURL + "&fdcbUrl=" + denyCallbackURL;
-            }else{
-                var url = this.baseURL + "?do=dummy3AuthorizeURL&loginType=" + loginType + "&calbackUrl=" + encodeURIComponent(successURL);
-            }
-            
-            this.minWindow = window.open(url, "_loginWin");
-            this.minWindow.focus();
-        },
-        
-        reloadPage : function(successURL) {
-            var that = this;
-            if( null != that.minWindow ){
-               that.minWindow.close(); 
-            }
-         
-            this.writeOtherDomainCookie(function(){
-                if( !successURL ) {
-                    window.location.reload();
-                }
-                if( /udbSuccessCallback/.test(successURL) ){
-                    that.closeLoginPopup();
-                }else{
-                    window.location.href = successURL;
-                }                              
-            });           
-        },
-        
-        writeOtherDomainCookie : function(callback){
-            var fields = ['udb_n','udb_l','udb_oar','yyuid','username','password','osinfo','oauthCookie',
-                'newqq_nickname','qq_nickname','sina_nickname'
-            ];
-            var params = {}, field='', value='';
-            for(var i in fields){
-                field = fields[i];
-                value = Util.getCookie( field );
-                if( value!= null ){
-                     params[field] = value;
-                }      
-            }
-            if( -1 != location.hostname.indexOf('video.huya.com') ){
-                $.getJSON('http://udbproxy.duowan.com/writeDuowanCookie?callback=?', params, function(){
-                    callback();
-                });
-            }else{
-                callback();
-            }            
-        },
-
-        initVhuyaLoginPopup : function(successURL){
-            if( $(".account-login-pop").length !=0 ) return ;
-            var cssStyle = __inline("./css/vhuyaLoginPopup.css");
-            var vhuyaLoginPopup = __inline("./tpl/vhuyaLoginPopup.tmpl");
-           
-            $("body").append('<style>'+cssStyle+'</style>');
-            $("body").append(vhuyaLoginPopup());           
-            
-            var that = this;
-            that.loginPopupObj = $(".account-login-pop");
-            that.loginMaskObj = $(".account-login-mask");
-            that.loginPopupObj.on("click", ".account-login-yy a",function(e) {
-                e.preventDefault(),
-                that.closeLoginPopup();
-                __UDBLogin.login(successURL);
-            }).on("click", ".account-login-qq a",function(e) {
-                e.preventDefault(),
-                that.loginOauth("qq", successURL)
-            }).on("click", ".account-login-weibo a",function(e) {
-                e.preventDefault(),
-                that.loginOauth("weibo", successURL)
-            }).on("click", ".account-login-pop-close",function(e) {
-                e.preventDefault(),
-                that.closeLoginPopup();
-            });            
-        },
-
-        initDuowanLoginPopup : function(successURL){
-            if( $(".account-login-pop").length !=0 ) return ;
-            var cssStyle = __inline("./css/dwLoginPopup.css");
-            var dwLoginPopup = __inline("./tpl/dwLoginPopup.tmpl");
-           
-            $("body").append('<style>'+cssStyle+'</style>');
-            $("body").append(dwLoginPopup());
-            
-            var that = this;
-            that.loginPopupObj = $(".account-login-pop");
-            that.loginMaskObj = $(".account-login-mask");
-            
-            __UDBLogin.embedLogin("#udbsdk_login_content .udbsdk_login", successURL, 'xelogin', function(){
-                that.closeLoginPopup();
-            });
-            that.loginPopupObj.on("click", ".login-btn-wechat",function(e) {
-                e.preventDefault(),
-                that.loginOauth("weixin", successURL)
-            }).on("click", ".login-btn-qq",function(e) {
-                e.preventDefault(),
-                that.loginOauth("qq", successURL)
-            }).on("click", ".login-btn-weibo",function(e) {
-                e.preventDefault(),
-                that.loginOauth("weibo", successURL)
-            }).on("click", ".close",function(e) {
-                e.preventDefault(),
-                that.closeLoginPopup()
-            });             
-        },
-        closeLoginPopup: function(){
-            if(this.loginPopupObj) this.loginPopupObj.hide();
-            if(this.loginMaskObj) this.loginMaskObj.hide();             
-        }     
-    };
-    
-    var _appid = '', _baseURL = '', _thirdLoginStyle= 'duowan';
-    if( 'ka.duowan.com' == location.hostname ) _appid = 5033;            
-    if('undefined' != typeof UDB_APPID) _appid = UDB_APPID;
-    if('undefined' != typeof UDB_BASEURL) _baseURL = UDB_BASEURL;
-    if( -1 != location.hostname.indexOf('video.huya.com') ) _thirdLoginStyle = 'vhuya';
-
-    var __UDBLogin = new UDBLogin(_appid, _baseURL);
-    var __ThirdLogin = new ThirdLogin(_appid, _baseURL, _thirdLoginStyle);
-
-    var dwUDBProxy = {
-        login: function(successURL){
-            try{
-                if( Util.useMultiLogin() ){
-                   return this.multiLogin(successURL);  
-                }else{
-                   return __UDBLogin.login(successURL);  
-                }                  
-            }catch(e){}       
-        },
-        multiLogin: function(successURL){ 
-            try{ 
-                return __ThirdLogin.login(successURL); 
-            }catch(e){}  
-        },
-        mobileLogin: function(successURL){
-            return __ThirdLogin.mobileLogin(successURL);
-        },
-        logout: function(successURL){ 
-            try{
-                return __UDBLogin.logout(successURL);
-            }catch(e){}             
-        },
-        reloadPage: function(successURL){ 
-            try{
-                //return __ThirdLogin.reloadPage(successURL);
-            }catch(e){}              
-        },
-        isLogin: function(){ 
-            try{
-                return Util.isLogin();
-            }catch(e){
-                return false;
-            }             
-        },
-        getCookie: function(name){ 
-            try{
-                if( 'username'==name ){
-                    return Util.getUsername(); 
-                }else{
-                    return Util.getCookie(name); 
-                }
-            }catch(e){
-                return "";
-            }  
-        },
-        getUsername: function(){ 
-            return Util.getUsername(); 
-        }
-    };
-
-    $(function(){
-        __UDBLogin.embedLogin("#login-embed", '', 'xelogin');
-        __UDBLogin.embedLogin("#mlogin-embed", '', 'xemlogin');        
-    })
-
-    module.exports = dwUDBProxy;
-    window.dwUDBProxy = dwUDBProxy;
-})(window, $);

+ 0 - 35
2018专题/球球大作战竞猜/src/modules/dwudbproxy/tpl/dwLoginPopup.tmpl

@@ -1,35 +0,0 @@
-<div class="account-login-pop">
-    <div class="login">
-        <div class="login-main">
-            <div class="login-hd">
-                <a class="tab-btn active" id="login-btn">登录</a>
-                <a class="tab-btn" id="register-btn" href="https://aq.yy.com/p/reg/mobile.do?fromadv=lgn&appid=5764" target="_blank">注册</a>
-                <i class="line" id="line"></i>
-            </div>
-            <div class="login-bd">
-                <div class="login-content">
-                    <div class="tab-unit" style="display:block;">
-                        <div id="login-tab">
-                            <h2 class="login-title">帐号登录</h2>
-                            <div id="udbsdk_login_content">
-                                <div id="udbsdk_login_normal" class="udbsdk_login"  style="display: block;">
-                                </div>
-                            </div>   
-                        </div>
-                    </div>
-                </div>
-                <i class="login-loading"></i>
-            </div>
-        </div>
-        <div class="login-sidebar">
-            <h2 class="title">合作账号登录</h2>
-            <div class="other-login">
-                <a class="login-btn login-btn-wechat clickstat" eid="click/nav/weixinlogin" eid_desc="点击/导航/微信账号登录"><i class="icon"></i>微信帐号登录</a>
-                <a class="login-btn login-btn-qq hiido_stat clickstat" hiido_code="10003435" eid="click/nav/qqlogin" eid_desc="点击/导航/QQ账号登录" login-type="qq"><i class="icon"></i>QQ帐号登录</a>
-                <a class="login-btn login-btn-weibo hiido_stat clickstat" hiido_code="10003437" eid="click/nav/weibologin" eid_desc="点击/导航/新浪微博登录" login-type="weibo"><i class="icon"></i>微博帐号登录</a>
-            </div>
-        </div>
-    </div>
-    <a class="close" title="关闭"></a>
-</div>
-<div class="account-login-mask" style="display:none;"></div>

+ 0 - 13
2018专题/球球大作战竞猜/src/modules/dwudbproxy/tpl/vhuyaLoginPopup.tmpl

@@ -1,13 +0,0 @@
-<div class="account-login-pop">
-    <h2>帐号登录</h2>
-    <div class="account-login-cont">
-        <div class="account-login-yy"><a href="#" login-type="yy"><i></i>YY账号登录</a></div>
-        <div class="account-login-qq"><a href="#" login-type="qq"><i></i>QQ账号登录</a></div>
-        <div class="account-login-weibo"><a href="#" login-type="weibo"><i></i>新浪微博登录</a></div>
-    </div>
-    <a href="#" class="account-login-pop-close">&times;</a>
-</div>
-<div class="account-login-iframe">
-    <iframe src="about:blank" frameborder="0"></iframe>
-</div>
-<div class="account-login-mask"></div>

+ 313 - 0
2018专题/球球大作战竞猜/src/modules/match08/match08.js

@@ -0,0 +1,313 @@
+
+var modalGuessTpl = __inline("/src/tpl/modalMyG.tmpl"); //我的竞猜
+var userInfoTpl = __inline("/src/tpl/userInfo.tmpl"); //用户信息
+var rankTableTpl = __inline("/src/tpl/ranktable.tmpl"); //用户排名
+
+var UserInfo = {}; //用户信息
+var MatchList = []; //比赛信息
+var API = '//match-guess.duowan.com'; 
+var AC_ID = $('.page-index').attr('data-acid')
+var announce = $('.page-index').attr('data-announce')
+
+var C = {
+    init: function() {
+        this.modalShow();
+        this.loginOut();
+        this.loginIn();
+
+        this.submitRegist();
+        this.toRewardList();
+
+        // 签到
+        $(window).load(function() {
+            M.doSign();
+        })
+    },
+    // 获奖名单
+    toRewardList: function() {
+        $(document).on('click', '#toRewardList', function() {
+            $("html, body").animate({
+                scrollTop: $("#targetReward").offset().top - 50 }, 
+                {duration: 500,easing: "swing"});
+                return false;
+        })
+        $(document).on('click', '#toRule', function() {
+            $("html, body").animate({
+                scrollTop: $("#targetRule").offset().top - 50 }, 
+                {duration: 500,easing: "swing"});
+                return false;
+        })
+        $(document).on('click', '#toRank', function() {
+            $("html, body").animate({
+                scrollTop: $("#targetRank").offset().top - 50 }, 
+                {duration: 500,easing: "swing"});
+                return false;
+        })
+    },
+    modalShow: function() {
+        // 弹窗
+        $(document).on('click', '#prizeCash', function() {
+            $('#prizeCashModal').fadeIn();
+        })
+        $(document).on('click', '#myGue', function() {
+            $('#myGueModal').fadeIn();
+            M.getMyGuess();
+        })
+        $('.pub-modal').click(function(e) {
+            e.stopPropagation();
+        })
+        $('.modal-mask').click(function() {
+            $(this).fadeOut();
+        })
+    },
+    // 注销
+    loginOut: function() {
+        $('.user-wrap').on('click', '.loginOut', function() {
+            dwUDBProxy.logout("");
+        })
+    },
+    // 登录
+    loginIn: function() {
+        $('.user-wrap').on('click', '.loginIn', function() {
+            dwUDBProxy.login("") 
+        })
+    },
+    // 中奖登记
+    submitRegist: function() {
+        $('#regist-btn').click(function() {
+            var name = $('.regist-name').val();
+            var phone = $('.regist-phone').val();
+            var address = $('.regist-address').val();
+            if(name == ''){
+                $('.regist-name').next('.tips').show();
+                return false;
+            }
+            if(phone == ''){
+                $('.regist-phone').next('.tips').show();
+                return false;
+            }
+            if(address == ''){
+                $('.regist-address').next('.tips').show();
+                return false;
+            }
+            
+            var param = {
+                ac_id: 1,
+                realname: name,
+                phone: phone,
+                addr: address
+            }
+
+            M.registBonus(param);
+        })
+        $('.regist-name').blur(function() {
+            var val = $(this).val();
+            if(val) {
+                $(this).next().hide();
+            }
+        })
+        $('.regist-phone').blur(function() {
+            var val = $(this).val();
+            if(val) {
+                $(this).next().hide();
+            }
+        })
+        $('.regist-address').blur(function() {
+            var val = $(this).val();
+            if(val) {
+                $(this).next().hide();
+            }
+        })
+    },
+}
+
+var V = {
+    init: function() {
+        this.screenInit();
+        this.login();
+
+        M.getUserInfo();
+        M.getRankTable();
+        
+        if(announce == 'true') {
+            $('#targetReward').show()
+            M.getBonusList();
+        }
+    },
+    // 图片赋值
+    initImg: function(className) {
+        $('.'+className).find('img').each(function() {
+            var imgUrl = $(this).attr('data-src');
+            $(this).attr('src', imgUrl);
+        })
+    },
+    screenInit: function() {
+        // 页面初始化设置
+        var winWidth = $(window).width();
+        if(winWidth > 750) {
+            this.initImg('prize-wrap')
+        }else {
+            this.initImg('prize-wrap-moblie')
+        }
+    },
+    // 登录
+    login: function() {
+        if(dwUDBProxy.isLogin()) {
+            //若登录,获取用户信息
+            UserInfo.islogin = true;
+        } else {
+            UserInfo.islogin = false;
+            dwUDBProxy.login("") //登录成功地址,默认当前页
+        }
+    },
+    // 个人信息
+    renderUserInfo: function(obj) {
+        var dom = userInfoTpl({data: obj});
+        $('.user-wrap').append(dom);
+    },
+    // 我的竞猜
+    renderGuessModal: function(obj) {
+        var dom = modalGuessTpl({data: obj});
+        $('#myGueModal').html('');
+        $('#myGueModal').append(dom);
+    },
+    // 用户排行
+    renderRanktable: function(obj) {
+        var dom = rankTableTpl({data: obj});
+        $('#subRank').append(dom);
+    },
+}
+
+var M = { // 比赛列表
+    // 个人信息
+    getUserInfo: function() {
+        $.ajax({  
+            dataType: 'jsonp',  
+            url: API+'/user/info?ac_id='+AC_ID,  
+            success: function(data){  
+                data.info.isLogin = true;
+                V.renderUserInfo(data.info);
+                if(data.info.rankNo != 0) {
+                    $('.page-top-btnwrap').append('<button class="page-top-btn" id="prizeCash">收货地址<i class="jump-tips">领奖啦</i></button>')
+                } else {
+                    $('.page-top-btnwrap').append('<button class="page-top-btn" id="prizeCash">收货地址</button>')
+                }
+                // console.log(data)
+                var name = data.info.realname;
+                var phone = data.info.phone;
+                var addr = data.info.addr;
+                $('.regist-name').val(name);
+                $('.regist-phone').val(phone);
+                $('.regist-address').val(addr);
+            },
+            error: function(){
+                // 登录态失效
+                V.renderUserInfo({isLogin: false});
+            }
+        });  
+    },
+    // 我的竞猜
+    getMyGuess: function() {
+        $.ajax({  
+            dataType: 'jsonp',  
+            url: API+'/guess/MyRecords?ac_id='+AC_ID,  
+            success: function(data){  
+                data.isLogin = true;
+                V.renderGuessModal(data);
+            },
+            error: function(){
+                // 登录态失效
+                V.renderGuessModal({isLogin: false});
+            }
+        }); 
+    },
+    // 用户排行榜
+    getRankTable: function() {
+        $.ajax({  
+            dataType: 'jsonp',  
+            url: API+'/user/sumRank?ac_id='+AC_ID+'&limit=10',  
+            success: function(data){  
+                V.renderRanktable(data.list);
+            }
+        }); 
+    },
+    // 中奖登记
+    registBonus: function(param) {
+        $.ajax({  
+            dataType: 'jsonp',  
+            url: API+'/user/registBonus?ac_id='+AC_ID,  
+            data: param,
+            success: function(data){  
+                alert(data.msg);
+                if(data.rs){
+                    $('#prizeCashModal').hide();
+                }
+            },
+            error: function() {
+                dwUDBProxy.login("") //登录成功地址,默认当前页
+            }
+        }); 
+    },
+    // 签到
+    doSign: function() {
+        if(dwUDBProxy.isLogin()){
+            $.ajax({  
+                dataType: 'jsonp',  
+                url: API+'/sign/do?ac_id='+AC_ID, 
+                success: function(data){ 
+                    if(data.rs) {
+                        // 更新积分
+                        $.ajax({  
+                            dataType: 'jsonp',  
+                            url: API+'/user/info?ac_id='+AC_ID,  
+                            success: function(data){  
+                                $('#myScore').html(data.info.score+'分')
+                            }
+                        }); 
+                    }
+                }
+            }); 
+        }
+    },
+    //获奖名单
+    getBonusList: function() {
+        $.ajax({  
+            dataType: 'jsonp',  
+            url: API+'/user/bonusList?ac_id=' + AC_ID ,  
+            success: function(data){ 
+                var list = data.list;
+                if(list.length) {
+
+                    $('.bonus-wrap').html('')
+
+                    $.each(list, function(index, val) {
+
+                        var level = val.bonus_level;
+                        var name = val.nickname + ',';
+                        var title = val.bonus_level_desc;
+
+                        var $bonusLevel = $('.bonus-level-'+level)
+                        var nameHtml = '<span class="name">'+ name +'</span>'
+
+
+                        if(!$bonusLevel[0]) {
+                            var levelHtml = '<div class="level-box">'+
+                                                '<div class="title">'+ title +'</div>'+
+                                                '<div class="level-list bonus-level-'+level+'"></div>'+
+                                           ' </div>'
+                            $('.bonus-wrap').append(levelHtml)
+                        }
+
+                        $('.bonus-level-'+level).append(nameHtml)
+                        
+                     })
+                }
+            },
+            error: function() {
+            }
+        }); 
+    }
+}
+
+C.init();
+V.init();

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 11 - 0
2018专题/球球大作战竞猜/src/modules/match08/swiper.min.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 6
2018专题/球球大作战竞猜/src/modules/page/clipboard.min.js


+ 0 - 1276
2018专题/球球大作战竞猜/src/modules/page/dialog.js

@@ -1,1276 +0,0 @@
-!(function () {
-
-var __modules__ = {};
-
-function _require (id) {
-    var mod = __modules__[id];
-    var exports = 'exports';
-
-    if (typeof mod === 'object') {
-        return mod;
-    }
-
-    if (!mod[exports]) {
-        mod[exports] = {};
-        mod[exports] = mod.call(mod[exports], _require, mod[exports], mod) || mod[exports];
-    }
-
-    return mod[exports];
-}
-
-function _define (path, fn) {
-    __modules__[path] = fn;
-}
-
-
-
-_define("jquery", function () {
-    return $;
-});
-
-
-/*!
- * PopupJS
- * Date: 2014-11-09
- * https://github.com/aui/popupjs
- * (c) 2009-2014 TangBin, http://www.planeArt.cn
- *
- * This is licensed under the GNU LGPL, version 2.1 or later.
- * For details, see: http://www.gnu.org/licenses/lgpl-2.1.html
- */
-
-_define("popup", function (_require) {
-
-var $ = _require("jquery");
-
-var _count = 0;
-var _isIE6 = !('minWidth' in $('html')[0].style);
-var _isFixed = !_isIE6;
-
-
-function Popup () {
-
-    this.destroyed = false;
-
-
-    this.__popup = $('<div />')
-    /*使用 <dialog /> 元素可能导致 z-index 永远置顶的问题(chrome)*/
-    .css({
-        display: 'none',
-        position: 'absolute',
-        /*
-        left: 0,
-        top: 0,
-        bottom: 'auto',
-        right: 'auto',
-        margin: 0,
-        padding: 0,
-        border: '0 none',
-        background: 'transparent'
-        */
-        outline: 0
-    })
-    .attr('tabindex', '-1')
-    .html(this.innerHTML)
-    .appendTo('body');
-
-
-    this.__backdrop = this.__mask = $('<div />')
-    .css({
-        opacity: .7,
-        background: '#000'
-    });
-
-
-    // 使用 HTMLElement 作为外部接口使用,而不是 jquery 对象
-    // 统一的接口利于未来 Popup 移植到其他 DOM 库中
-    this.node = this.__popup[0];
-    this.backdrop = this.__backdrop[0];
-
-    _count ++;
-}
-
-
-$.extend(Popup.prototype, {
-    
-    /**
-     * 初始化完毕事件,在 show()、showModal() 执行
-     * @name Popup.prototype.onshow
-     * @event
-     */
-
-    /**
-     * 关闭事件,在 close() 执行
-     * @name Popup.prototype.onclose
-     * @event
-     */
-
-    /**
-     * 销毁前事件,在 remove() 前执行
-     * @name Popup.prototype.onbeforeremove
-     * @event
-     */
-
-    /**
-     * 销毁事件,在 remove() 执行
-     * @name Popup.prototype.onremove
-     * @event
-     */
-
-    /**
-     * 重置事件,在 reset() 执行
-     * @name Popup.prototype.onreset
-     * @event
-     */
-
-    /**
-     * 焦点事件,在 foucs() 执行
-     * @name Popup.prototype.onfocus
-     * @event
-     */
-
-    /**
-     * 失焦事件,在 blur() 执行
-     * @name Popup.prototype.onblur
-     * @event
-     */
-
-    /** 浮层 DOM 素节点[*] */
-    node: null,
-
-    /** 遮罩 DOM 节点[*] */
-    backdrop: null,
-
-    /** 是否开启固定定位[*] */
-    fixed: false,
-
-    /** 判断对话框是否删除[*] */
-    destroyed: true,
-
-    /** 判断对话框是否显示 */
-    open: false,
-
-    /** close 返回值 */
-    returnValue: '',
-
-    /** 是否自动聚焦 */
-    autofocus: true,
-
-    /** 对齐方式[*] */
-    align: 'bottom left',
-
-    /** 内部的 HTML 字符串 */
-    innerHTML: '',
-
-    /** CSS 类名 */
-    className: 'ui-popup',
-
-    /**
-     * 显示浮层
-     * @param   {HTMLElement, Event}  指定位置(可选)
-     */
-    show: function (anchor) {
-
-        if (this.destroyed) {
-            return this;
-        }
-
-        var that = this;
-        var popup = this.__popup;
-        var backdrop = this.__backdrop;
-
-        this.__activeElement = this.__getActive();
-
-        this.open = true;
-        this.follow = anchor || this.follow;
-
-
-        // 初始化 show 方法
-        if (!this.__ready) {
-
-            popup
-            .addClass(this.className)
-            .attr('role', this.modal ? 'alertdialog' : 'dialog')
-            .css('position', this.fixed ? 'fixed' : 'absolute');
-
-            if (!_isIE6) {
-                $(window).on('resize', $.proxy(this.reset, this));
-            }
-
-            // 模态浮层的遮罩
-            if (this.modal) {
-                var backdropCss = {
-                    position: 'fixed',
-                    left: 0,
-                    top: 0,
-                    width: '100%',
-                    height: '100%',
-                    overflow: 'hidden',
-                    userSelect: 'none',
-                    zIndex: this.zIndex || Popup.zIndex
-                };
-
-
-                popup.addClass(this.className + '-modal');
-
-
-                if (!_isFixed) {
-                    $.extend(backdropCss, {
-                        position: 'absolute',
-                        width: $(window).width() + 'px',
-                        height: $(document).height() + 'px'
-                    });
-                }
-
-
-                backdrop
-                .css(backdropCss)
-                .attr({tabindex: '0'})
-                .on('focus', $.proxy(this.focus, this));
-
-                // 锁定 tab 的焦点操作
-                this.__mask = backdrop
-                .clone(true)
-                .attr('style', '')
-                .insertAfter(popup);
-
-                backdrop
-                .addClass(this.className + '-backdrop')
-                .insertBefore(popup);
-
-                this.__ready = true;
-            }
-
-
-            if (!popup.html()) {
-                popup.html(this.innerHTML);
-            }
-        }
-
-
-        popup
-        .addClass(this.className + '-show')
-        .show();
-
-        backdrop.show();
-
-
-        this.reset().focus();
-        this.__dispatchEvent('show');
-
-        return this;
-    },
-
-
-    /** 显示模态浮层。参数参见 show() */
-    showModal: function () {
-        this.modal = true;
-        return this.show.apply(this, arguments);
-    },
-    
-    
-    /** 关闭浮层 */
-    close: function (result) {
-        
-        if (!this.destroyed && this.open) {
-            
-            if (result !== undefined) {
-                this.returnValue = result;
-            }
-            
-            this.__popup.hide().removeClass(this.className + '-show');
-            this.__backdrop.hide();
-            this.open = false;
-            this.blur();// 恢复焦点,照顾键盘操作的用户
-            this.__dispatchEvent('close');
-        }
-    
-        return this;
-    },
-
-
-    /** 销毁浮层 */
-    remove: function () {
-
-        if (this.destroyed) {
-            return this;
-        }
-
-        this.__dispatchEvent('beforeremove');
-        
-        if (Popup.current === this) {
-            Popup.current = null;
-        }
-
-
-        // 从 DOM 中移除节点
-        this.__popup.remove();
-        this.__backdrop.remove();
-        this.__mask.remove();
-
-
-        if (!_isIE6) {
-            $(window).off('resize', this.reset);
-        }
-
-
-        this.__dispatchEvent('remove');
-
-        for (var i in this) {
-            delete this[i];
-        }
-
-        return this;
-    },
-
-
-    /** 重置位置 */
-    reset: function () {
-
-        var elem = this.follow;
-
-        if (elem) {
-            this.__follow(elem);
-        } else {
-            this.__center();
-        }
-
-        this.__dispatchEvent('reset');
-
-        return this;
-    },
-
-
-    /** 让浮层获取焦点 */
-    focus: function () {
-
-        var node = this.node;
-        var popup = this.__popup;
-        var current = Popup.current;
-        var index = this.zIndex = Popup.zIndex ++;
-
-        if (current && current !== this) {
-            current.blur(false);
-        }
-
-        // 检查焦点是否在浮层里面
-        if (!$.contains(node, this.__getActive())) {
-            var autofocus = popup.find('[autofocus]')[0];
-
-            if (!this._autofocus && autofocus) {
-                this._autofocus = true;
-            } else {
-                autofocus = node;
-            }
-
-            this.__focus(autofocus);
-        }
-
-        // 设置叠加高度
-        popup.css('zIndex', index);
-        //this.__backdrop.css('zIndex', index);
-
-        Popup.current = this;
-        popup.addClass(this.className + '-focus');
-
-        this.__dispatchEvent('focus');
-
-        return this;
-    },
-
-
-    /** 让浮层失去焦点。将焦点退还给之前的元素,照顾视力障碍用户 */
-    blur: function () {
-
-        var activeElement = this.__activeElement;
-        var isBlur = arguments[0];
-
-
-        if (isBlur !== false) {
-            this.__focus(activeElement);
-        }
-
-        this._autofocus = false;
-        this.__popup.removeClass(this.className + '-focus');
-        this.__dispatchEvent('blur');
-
-        return this;
-    },
-
-
-    /**
-     * 添加事件
-     * @param   {String}    事件类型
-     * @param   {Function}  监听函数
-     */
-    addEventListener: function (type, callback) {
-        this.__getEventListener(type).push(callback);
-        return this;
-    },
-
-
-    /**
-     * 删除事件
-     * @param   {String}    事件类型
-     * @param   {Function}  监听函数
-     */
-    removeEventListener: function (type, callback) {
-        var listeners = this.__getEventListener(type);
-        for (var i = 0; i < listeners.length; i ++) {
-            if (callback === listeners[i]) {
-                listeners.splice(i--, 1);
-            }
-        }
-        return this;
-    },
-
-
-    // 获取事件缓存
-    __getEventListener: function (type) {
-        var listener = this.__listener;
-        if (!listener) {
-            listener = this.__listener = {};
-        }
-        if (!listener[type]) {
-            listener[type] = [];
-        }
-        return listener[type];
-    },
-
-
-    // 派发事件
-    __dispatchEvent: function (type) {
-        var listeners = this.__getEventListener(type);
-
-        if (this['on' + type]) {
-            this['on' + type]();
-        }
-
-        for (var i = 0; i < listeners.length; i ++) {
-            listeners[i].call(this);
-        }
-    },
-
-
-    // 对元素安全聚焦
-    __focus: function (elem) {
-        // 防止 iframe 跨域无权限报错
-        // 防止 IE 不可见元素报错
-        try {
-            // ie11 bug: iframe 页面点击会跳到顶部
-            if (this.autofocus && !/^iframe$/i.test(elem.nodeName)) {
-                elem.focus();
-            }
-        } catch (e) {}
-    },
-
-
-    // 获取当前焦点的元素
-    __getActive: function () {
-        try {// try: ie8~9, iframe #26
-            var activeElement = document.activeElement;
-            var contentDocument = activeElement.contentDocument;
-            var elem = contentDocument && contentDocument.activeElement || activeElement;
-            return elem;
-        } catch (e) {}
-    },
-
-
-    // 居中浮层
-    __center: function () {
-    
-        var popup = this.__popup;
-        var $window = $(window);
-        var $document = $(document);
-        var fixed = this.fixed;
-        var dl = fixed ? 0 : $document.scrollLeft();
-        var dt = fixed ? 0 : $document.scrollTop();
-        var ww = $window.width();
-        var wh = $window.height();
-        var ow = popup.width();
-        var oh = popup.height();
-        var left = (ww - ow) / 2 + dl;
-        var top = (wh - oh) * 382 / 1000 + dt;// 黄金比例
-        var style = popup[0].style;
-
-        
-        style.left = Math.max(parseInt(left), dl) + 'px';
-        style.top = Math.max(parseInt(top), dt) + 'px';
-    },
-    
-    
-    // 指定位置 @param    {HTMLElement, Event}  anchor
-    __follow: function (anchor) {
-        
-        var $elem = anchor.parentNode && $(anchor);
-        var popup = this.__popup;
-        
-
-        if (this.__followSkin) {
-            popup.removeClass(this.__followSkin);
-        }
-
-
-        // 隐藏元素不可用
-        if ($elem) {
-            var o = $elem.offset();
-            if (o.left * o.top < 0) {
-                return this.__center();
-            }
-        }
-        
-        var that = this;
-        var fixed = this.fixed;
-
-        var $window = $(window);
-        var $document = $(document);
-        var winWidth = $window.width();
-        var winHeight = $window.height();
-        var docLeft =  $document.scrollLeft();
-        var docTop = $document.scrollTop();
-
-
-        var popupWidth = popup.width();
-        var popupHeight = popup.height();
-        var width = $elem ? $elem.outerWidth() : 0;
-        var height = $elem ? $elem.outerHeight() : 0;
-        var offset = this.__offset(anchor);
-        var x = offset.left;
-        var y = offset.top;
-        var left =  fixed ? x - docLeft : x;
-        var top = fixed ? y - docTop : y;
-
-
-        var minLeft = fixed ? 0 : docLeft;
-        var minTop = fixed ? 0 : docTop;
-        var maxLeft = minLeft + winWidth - popupWidth;
-        var maxTop = minTop + winHeight - popupHeight;
-
-
-        var css = {};
-        var align = this.align.split(' ');
-        var className = this.className + '-';
-        var reverse = {top: 'bottom', bottom: 'top', left: 'right', right: 'left'};
-        var name = {top: 'top', bottom: 'top', left: 'left', right: 'left'};
-
-
-        var temp = [{
-            top: top - popupHeight,
-            bottom: top + height,
-            left: left - popupWidth,
-            right: left + width
-        }, {
-            top: top,
-            bottom: top - popupHeight + height,
-            left: left,
-            right: left - popupWidth + width
-        }];
-
-
-        var center = {
-            left: left + width / 2 - popupWidth / 2,
-            top: top + height / 2 - popupHeight / 2
-        };
-
-        
-        var range = {
-            left: [minLeft, maxLeft],
-            top: [minTop, maxTop]
-        };
-
-
-        // 超出可视区域重新适应位置
-        $.each(align, function (i, val) {
-
-            // 超出右或下边界:使用左或者上边对齐
-            if (temp[i][val] > range[name[val]][1]) {
-                val = align[i] = reverse[val];
-            }
-
-            // 超出左或右边界:使用右或者下边对齐
-            if (temp[i][val] < range[name[val]][0]) {
-                align[i] = reverse[val];
-            }
-
-        });
-
-
-        // 一个参数的情况
-        if (!align[1]) {
-            name[align[1]] = name[align[0]] === 'left' ? 'top' : 'left';
-            temp[1][align[1]] = center[name[align[1]]];
-        }
-
-
-        //添加follow的css, 为了给css使用
-        className += align.join('-') + ' '+ this.className+ '-follow';
-        
-        that.__followSkin = className;
-
-
-        if ($elem) {
-            popup.addClass(className);
-        }
-
-        
-        css[name[align[0]]] = parseInt(temp[0][align[0]]);
-        css[name[align[1]]] = parseInt(temp[1][align[1]]);
-        popup.css(css);
-
-    },
-
-
-    // 获取元素相对于页面的位置(包括iframe内的元素)
-    // 暂时不支持两层以上的 iframe 套嵌
-    __offset: function (anchor) {
-
-        var isNode = anchor.parentNode;
-        var offset = isNode ? $(anchor).offset() : {
-            left: anchor.pageX,
-            top: anchor.pageY
-        };
-
-
-        anchor = isNode ? anchor : anchor.target;
-        var ownerDocument = anchor.ownerDocument;
-        var defaultView = ownerDocument.defaultView || ownerDocument.parentWindow;
-        
-        if (defaultView == window) {// IE <= 8 只能使用两个等于号
-            return offset;
-        }
-
-        // {Element: Ifarme}
-        var frameElement = defaultView.frameElement;
-        var $ownerDocument = $(ownerDocument);
-        var docLeft =  $ownerDocument.scrollLeft();
-        var docTop = $ownerDocument.scrollTop();
-        var frameOffset = $(frameElement).offset();
-        var frameLeft = frameOffset.left;
-        var frameTop = frameOffset.top;
-        
-        return {
-            left: offset.left + frameLeft - docLeft,
-            top: offset.top + frameTop - docTop
-        };
-    }
-    
-});
-
-
-/** 当前叠加高度 */
-Popup.zIndex = 1024;
-
-
-/** 顶层浮层的实例 */
-Popup.current = null;
-
-
-return Popup;
-
-});
-
-// artDialog - 默认配置
-_define("dialog-config", {
-
-    /* -----已注释的配置继承自 popup.js,仍可以再这里重新定义它----- */
-
-    // 对齐方式
-    //align: 'bottom left',
-    
-    // 是否固定定位
-    //fixed: false,
-    
-    // 对话框叠加高度值(重要:此值不能超过浏览器最大限制)
-    //zIndex: 1024,
-
-    // 设置遮罩背景颜色
-    backdropBackground: '#000',
-
-    // 设置遮罩透明度
-    backdropOpacity: 0.7,
-
-    // 消息内容
-    content: '<span class="ui-dialog-loading">Loading..</span>',
-    
-    // 标题
-    title: '',
-
-    // 对话框状态栏区域 HTML 代码
-    statusbar: '',
-    
-    // 自定义按钮
-    button: null,
-    
-    // 确定按钮回调函数
-    ok: null,
-    
-    // 取消按钮回调函数
-    cancel: null,
-
-    // 确定按钮文本
-    okValue: 'ok',
-    
-    // 取消按钮文本
-    cancelValue: 'cancel',
-
-    cancelDisplay: true,
-    
-    // 内容宽度
-    width: '',
-    
-    // 内容高度
-    height: '',
-    
-    // 内容与边界填充距离
-    padding: '',
-    
-    // 对话框自定义 className
-    skin: '',
-
-    // 是否支持快捷关闭(点击遮罩层自动关闭)
-    quickClose: false,
-
-    // css 文件路径,留空则不会使用 js 自动加载样式
-    // 注意:css 只允许加载一个
-    cssUri: '../css/ui-dialog.css',
-
-    // 模板(使用 table 解决 IE7 宽度自适应的 BUG)
-    // js 使用 i="***" 属性识别结构,其余的均可自定义
-    innerHTML:
-        '<div i="dialog" class="ui-dialog">'
-        +       '<div class="ui-dialog-arrow-a"></div>'
-        +       '<div class="ui-dialog-arrow-b"></div>'
-        +       '<table class="ui-dialog-grid">'
-        +           '<tr>'
-        +               '<td i="header" class="ui-dialog-header">'
-        +                   '<button i="close" class="ui-dialog-close">&#215;</button>'
-        +                   '<div i="title" class="ui-dialog-title"></div>'
-        +               '</td>'
-        +           '</tr>'
-        +           '<tr>'
-        +               '<td i="body" class="ui-dialog-body">'
-        +                   '<div i="content" class="ui-dialog-content"></div>'
-        +               '</td>'
-        +           '</tr>'
-        +           '<tr>'
-        +               '<td i="footer" class="ui-dialog-footer">'
-        +                   '<div i="statusbar" class="ui-dialog-statusbar"></div>'
-        +                   '<div i="button" class="ui-dialog-button"></div>'
-        +               '</td>'
-        +           '</tr>'
-        +       '</table>'
-        +'</div>'
-    
-});
-
-/*!
- * artDialog
- * Date: 2014-11-09
- * https://github.com/aui/artDialog
- * (c) 2009-2014 TangBin, http://www.planeArt.cn
- *
- * This is licensed under the GNU LGPL, version 2.1 or later.
- * For details, see: http://www.gnu.org/licenses/lgpl-2.1.html
- */
-_define("dialog", function (_require) {
-
-var $ = _require("jquery");
-var Popup = _require("popup");
-var defaults = _require("dialog-config");
-var css = defaults.cssUri;
-
-
-// css loader: RequireJS & SeaJS
-if (css) {
-    var fn = _require[_require.toUrl ? 'toUrl' : 'resolve'];
-    if (fn) {
-        css = fn(css);
-        css = '<link rel="stylesheet" href="' + css + '" />';
-        if ($('base')[0]) {
-            $('base').before(css);
-        } else {
-            $('head').append(css);
-        } 
-    }
-}
-
-
-var _count = 0;
-var _expando = new Date() - 0; // Date.now()
-var _isIE6 = !('minWidth' in $('html')[0].style);
-var _isMobile = 'createTouch' in document && !('onmousemove' in document)
-    || /(iPhone|iPad|iPod)/i.test(navigator.userAgent);
-var _isFixed = !_isIE6 && !_isMobile;
-
-
-var artDialog = function (options, ok, cancel) {
-
-    var originalOptions = options = options || {};
-    
-
-    if (typeof options === 'string' || options.nodeType === 1) {
-    
-        options = {content: options, fixed: !_isMobile};
-    }
-    
-
-    options = $.extend(true, {}, artDialog.defaults, options);
-    options.original = originalOptions;
-
-    var id = options.id = options.id || _expando + _count;
-    var api = artDialog.get(id);
-    
-    
-    // 如果存在同名的对话框对象,则直接返回
-    if (api) {
-        return api.focus();
-    }
-    
-    
-    // 目前主流移动设备对fixed支持不好,禁用此特性
-    if (!_isFixed) {
-        options.fixed = false;
-    }
-
-
-    // 快捷关闭支持:点击对话框外快速关闭对话框
-    if (options.quickClose) {
-        options.modal = true;
-        options.backdropOpacity = 0;
-    }
-    
-
-    // 按钮组
-    if (!$.isArray(options.button)) {
-        options.button = [];
-    }
-
-
-    // 取消按钮
-    if (cancel !== undefined) {
-        options.cancel = cancel;
-    }
-    
-    if (options.cancel) {
-        options.button.push({
-            id: 'cancel',
-            value: options.cancelValue,
-            callback: options.cancel,
-            display: options.cancelDisplay
-        });
-    }
-    
-    
-    // 确定按钮
-    if (ok !== undefined) {
-        options.ok = ok;
-    }
-    
-    if (options.ok) {
-        options.button.push({
-            id: 'ok',
-            value: options.okValue,
-            callback: options.ok,
-            autofocus: true
-        });
-    }
-    
-
-    return artDialog.list[id] = new artDialog.create(options);
-};
-
-var popup = function () {};
-popup.prototype = Popup.prototype;
-var prototype = artDialog.prototype = new popup();
-
-artDialog.create = function (options) {
-    var that = this;
-
-    $.extend(this, new Popup());
-
-    var originalOptions = options.original;
-    var $popup = $(this.node).html(options.innerHTML);
-    var $backdrop = $(this.backdrop);
-
-    this.options = options;
-    this._popup = $popup;
-
-    
-    $.each(options, function (name, value) {
-        if (typeof that[name] === 'function') {
-            that[name](value);
-        } else {
-            that[name] = value;
-        }
-    });
-
-
-    // 更新 zIndex 全局配置
-    if (options.zIndex) {
-        Popup.zIndex = options.zIndex;
-    }
-
-
-    // 设置 ARIA 信息
-    $popup.attr({
-        'aria-labelledby': this._$('title')
-            .attr('id', 'title:' + this.id).attr('id'),
-        'aria-describedby': this._$('content')
-            .attr('id', 'content:' + this.id).attr('id')
-    });
-
-
-    // 关闭按钮
-    this._$('close')
-    .css('display', this.cancel === false ? 'none' : '')
-    .attr('title', this.cancelValue)
-    .on('click', function (event) {
-        that._trigger('cancel');
-        event.preventDefault();
-    });
-    
-
-    // 添加视觉参数
-    this._$('dialog').addClass(this.skin);
-    this._$('body').css('padding', this.padding);
-
-
-    // 点击任意空白处关闭对话框
-    if (options.quickClose) {
-        $backdrop
-        .on(
-            'onmousedown' in document ? 'mousedown' : 'click',
-            function () {
-            that._trigger('cancel');
-            return false;// 阻止抢夺焦点
-        });
-    }
-
-
-    // 遮罩设置
-    this.addEventListener('show', function () {
-        $backdrop.css({
-            opacity: 0,
-            background: options.backdropBackground
-        }).animate(
-            {opacity: options.backdropOpacity}
-        , 150);
-    });
-
-
-    // ESC 快捷键关闭对话框
-    this._esc = function (event) {
-        var target = event.target;
-        var nodeName = target.nodeName;
-        var rinput = /^input|textarea$/i;
-        var isTop = Popup.current === that;
-        var keyCode = event.keyCode;
-
-        // 避免输入状态中 ESC 误操作关闭
-        if (!isTop || rinput.test(nodeName) && target.type !== 'button') {
-            return;
-        }
-        
-        if (keyCode === 27) {
-            that._trigger('cancel');
-        }
-    };
-
-    // 点击遮罩层关闭弹窗
-    $(this.__mask).on("click", function() {
-        that._trigger('cancel');
-    })
-
-    $(document).on('keydown', this._esc);
-    this.addEventListener('remove', function () {
-        $(document).off('keydown', this._esc);
-        delete artDialog.list[this.id];
-    });
-
-
-    _count ++;
-    
-    artDialog.oncreate(this);
-
-    return this;
-};
-
-
-artDialog.create.prototype = prototype;
-
-
-
-$.extend(prototype, {
-
-    /**
-     * 显示对话框
-     * @name artDialog.prototype.show
-     * @param   {HTMLElement Object, Event Object}  指定位置(可选)
-     */
-    
-    /**
-     * 显示对话框(模态)
-     * @name artDialog.prototype.showModal
-     * @param   {HTMLElement Object, Event Object}  指定位置(可选)
-     */
-
-    /**
-     * 关闭对话框
-     * @name artDialog.prototype.close
-     * @param   {String, Number}    返回值,可被 onclose 事件收取(可选)
-     */
-
-    /**
-     * 销毁对话框
-     * @name artDialog.prototype.remove
-     */
-
-    /**
-     * 重置对话框位置
-     * @name artDialog.prototype.reset
-     */
-
-    /**
-     * 让对话框聚焦(同时置顶)
-     * @name artDialog.prototype.focus
-     */
-
-    /**
-     * 让对话框失焦(同时置顶)
-     * @name artDialog.prototype.blur
-     */
-
-    /**
-     * 添加事件
-     * @param   {String}    事件类型
-     * @param   {Function}  监听函数
-     * @name artDialog.prototype.addEventListener
-     */
-
-    /**
-     * 删除事件
-     * @param   {String}    事件类型
-     * @param   {Function}  监听函数
-     * @name artDialog.prototype.removeEventListener
-     */
-
-    /**
-     * 对话框显示事件,在 show()、showModal() 执行
-     * @name artDialog.prototype.onshow
-     * @event
-     */
-
-    /**
-     * 关闭事件,在 close() 执行
-     * @name artDialog.prototype.onclose
-     * @event
-     */
-
-    /**
-     * 销毁前事件,在 remove() 前执行
-     * @name artDialog.prototype.onbeforeremove
-     * @event
-     */
-
-    /**
-     * 销毁事件,在 remove() 执行
-     * @name artDialog.prototype.onremove
-     * @event
-     */
-
-    /**
-     * 重置事件,在 reset() 执行
-     * @name artDialog.prototype.onreset
-     * @event
-     */
-
-    /**
-     * 焦点事件,在 foucs() 执行
-     * @name artDialog.prototype.onfocus
-     * @event
-     */
-
-    /**
-     * 失焦事件,在 blur() 执行
-     * @name artDialog.prototype.onblur
-     * @event
-     */
-
-    
-    /**
-     * 设置内容
-     * @param    {String, HTMLElement}   内容
-     */
-    content: function (html) {
-    
-        var $content = this._$('content');
-
-        // HTMLElement
-        if (typeof html === 'object') {
-            html = $(html);
-            $content.empty('').append(html.show());
-            this.addEventListener('beforeremove', function () {
-                $('body').append(html.hide());
-            });
-        // String
-        } else {
-            $content.html(html);
-        }
-                
-        return this.reset();
-    },
-    
-    
-    /**
-     * 设置标题
-     * @param    {String}   标题内容
-     */
-    title: function (text) {
-        this._$('title').text(text);
-        this._$('header')[text ? 'show' : 'hide']();
-        return this;
-    },
-
-
-    /** 设置宽度 */
-    width: function (value) {
-        this._$('content').css('width', value);
-        return this.reset();
-    },
-
-
-    /** 设置高度 */
-    height: function (value) {
-        this._$('content').css('height', value);
-        return this.reset();
-    },
-
-
-    /**
-     * 设置按钮组
-     * @param   {Array, String}
-     * Options: value, callback, autofocus, disabled 
-     */
-    button: function (args) {
-        args = args || [];
-        var that = this;
-        var html = '';
-        var number = 0;
-        this.callbacks = {};
-        
-           
-        if (typeof args === 'string') {
-            html = args;
-            number ++;
-        } else {
-            $.each(args, function (i, val) {
-
-                var id = val.id = val.id || val.value;
-                var style = '';
-                that.callbacks[id] = val.callback;
-
-
-                if (val.display === false) {
-                    style = ' style="display:none"';
-                } else {
-                    number ++;
-                }
-
-                html +=
-                  '<button'
-                + ' type="button"'
-                + ' i-id="' + id + '"'
-                + style
-                + (val.disabled ? ' disabled' : '')
-                + (val.autofocus ? ' autofocus class="ui-dialog-autofocus"' : '')
-                + '>'
-                +   val.value
-                + '</button>';
-
-                that._$('button')
-                .on('click', '[i-id=' + id +']', function (event) {                
-                    var $this = $(this);
-                    if (!$this.attr('disabled')) {// IE BUG
-                        that._trigger(id);
-                    }
-                
-                    event.preventDefault();
-                });
-
-            });
-        }
-
-        this._$('button').html(html);
-        this._$('footer')[number ? 'show' : 'hide']();
-
-        return this;
-    },
-
-
-    statusbar: function (html) {
-        this._$('statusbar')
-        .html(html)[html ? 'show' : 'hide']();
-
-        return this;
-    },
-
-
-    _$: function (i) {
-        return this._popup.find('[i=' + i + ']');
-    },
-    
-    
-    // 触发按钮回调函数
-    _trigger: function (id) {
-        var fn = this.callbacks[id];
-            
-        return typeof fn !== 'function' || fn.call(this) !== false ?
-            this.close().remove() : this;
-    }
-    
-});
-
-
-
-artDialog.oncreate = $.noop;
-
-
-
-/** 获取最顶层的对话框API */
-artDialog.getCurrent = function () {
-    return Popup.current;
-};
-
-
-
-/**
- * 根据 ID 获取某对话框 API
- * @param    {String}    对话框 ID
- * @return   {Object}    对话框 API (实例)
- */
-artDialog.get = function (id) {
-    return id === undefined
-    ? artDialog.list
-    : artDialog.list[id];
-};
-
-artDialog.list = {};
-
-
-
-/**
- * 默认配置
- */
-artDialog.defaults = defaults;
-
-
-
-return artDialog;
-
-});
-
-
-
-module.exports = _require("dialog");
-
-})();

+ 0 - 523
2018专题/球球大作战竞猜/src/modules/page/jquery.gallery.js

@@ -1,523 +0,0 @@
-/**
- * jquery.gallery.js
- * http://www.codrops.com
- *
- * Copyright 2011, Pedro Botelho / Codrops
- * Free to use under the MIT license.
- *
- * Date: Mon Jan 30 2012
- */
-require('modernizr.custom.53451.js');
-
-(function( $, undefined ) {
-	
-	/*
-	 * Gallery object.
-	 */
-	$.Gallery 				= function( options, element ) {
-	
-		this.$el	= $( element );
-		this._init( options );
-		
-	};
-	
-	$.Gallery.defaults 		= {
-		current		: 0,	// index of current item
-		autoplay	: false,// slideshow on / off
-		interval	: 2000  // time between transitions
-    };
-	
-	$.Gallery.prototype 	= {
-		_init 				: function( options ) {
-			
-			this.options 		= $.extend( true, {}, $.Gallery.defaults, options );
-			
-			// support for 3d / 2d transforms and transitions
-			this.support3d		= Modernizr.csstransforms3d;
-			this.support2d		= Modernizr.csstransforms;
-			this.supportTrans	= Modernizr.csstransitions;
-			
-			this.$wrapper		= this.$el.find('.dg-wrapper');
-			
-			this.$items			= this.$wrapper.children();
-			this.itemsCount		= this.$items.length;
-			
-			this.$nav			= this.$el.find('nav');
-			this.$navPrev		= this.$nav.find('.dg-prev');
-			this.$navNext		= this.$nav.find('.dg-next');
-			
-			// minimum of 3 items
-			if( this.itemsCount < 3 ) {
-					
-				this.$nav.remove();
-				return false;
-			
-			}	
-			
-			this.current		= this.options.current;
-			
-			this.isAnim			= false;
-			
-			this.$items.css({
-				'opacity'	: 0,
-				'visibility': 'hidden'
-			});
-			
-			this._validate();
-			
-			this._layout();
-			
-			// load the events
-			this._loadEvents();
-			
-			// slideshow
-			if( this.options.autoplay ) {
-			
-				this._startSlideshow();
-			
-			}
-			
-		},
-		_validate			: function() {
-		
-			if( this.options.current < 0 || this.options.current > this.itemsCount - 1 ) {
-				
-				this.current = 0;
-			
-			}	
-		
-		},
-		_layout				: function() {
-			
-			// current, left and right items
-			this._setItems();
-			
-			// current item is not changed
-			// left and right one are rotated and translated
-			var leftCSS, rightCSS, currentCSS;
-			
-			if( this.support3d && this.supportTrans ) {
-			
-				leftCSS 	= {
-					'-webkit-transform'	: 'translateX(-250px) translateZ(-200px) rotateY(45deg) scale(0.82)',
-					'-moz-transform'	: 'translateX(-250px) translateZ(-200px) rotateY(45deg) scale(0.82)',
-					'-o-transform'		: 'translateX(-250px) translateZ(-200px) rotateY(45deg) scale(0.82)',
-					'-ms-transform'		: 'translateX(-250px) translateZ(-200px) rotateY(45deg) scale(0.82)',
-					'transform'			: 'translateX(-250px) translateZ(-200px) rotateY(45deg) scale(0.82)'
-				};
-				
-				rightCSS	= {
-					'-webkit-transform'	: 'translateX(250px) translateZ(-200px) rotateY(-45deg) scale(0.82)',
-					'-moz-transform'	: 'translateX(250px) translateZ(-200px) rotateY(-45deg) scale(0.82)',
-					'-o-transform'		: 'translateX(250px) translateZ(-200px) rotateY(-45deg) scale(0.82)',
-					'-ms-transform'		: 'translateX(250px) translateZ(-200px) rotateY(-45deg) scale(0.82)',
-					'transform'			: 'translateX(250px) translateZ(-200px) rotateY(-45deg) scale(0.82)'
-				};
-				
-				leftCSS.opacity		= 1;
-				leftCSS.visibility	= 'visible';
-				rightCSS.opacity	= 1;
-				rightCSS.visibility	= 'visible';
-			
-			}
-			else if( this.support2d && this.supportTrans ) {
-				
-				leftCSS 	= {
-					'-webkit-transform'	: 'translate(-350px) scale(0.8)',
-					'-moz-transform'	: 'translate(-350px) scale(0.8)',
-					'-o-transform'		: 'translate(-350px) scale(0.8)',
-					'-ms-transform'		: 'translate(-350px) scale(0.8)',
-					'transform'			: 'translate(-350px) scale(0.8)'
-				};
-				
-				rightCSS	= {
-					'-webkit-transform'	: 'translate(350px) scale(0.8)',
-					'-moz-transform'	: 'translate(350px) scale(0.8)',
-					'-o-transform'		: 'translate(350px) scale(0.8)',
-					'-ms-transform'		: 'translate(350px) scale(0.8)',
-					'transform'			: 'translate(350px) scale(0.8)'
-				};
-				
-				currentCSS	= {
-					'z-index'			: 999
-				};
-				
-				leftCSS.opacity		= 1;
-				leftCSS.visibility	= 'visible';
-				rightCSS.opacity	= 1;
-				rightCSS.visibility	= 'visible';
-			
-			}
-			
-			this.$leftItm.css( leftCSS || {} );
-			this.$rightItm.css( rightCSS || {} );
-			
-			this.$currentItm.css( currentCSS || {} ).css({
-				'opacity'	: 1,
-				'visibility': 'visible'
-			}).addClass('dg-center');
-			
-		},
-		_setItems			: function() {
-			
-			this.$items.removeClass('dg-center');
-			
-			this.$currentItm	= this.$items.eq( this.current );
-			this.$leftItm		= ( this.current === 0 ) ? this.$items.eq( this.itemsCount - 1 ) : this.$items.eq( this.current - 1 );
-			this.$rightItm		= ( this.current === this.itemsCount - 1 ) ? this.$items.eq( 0 ) : this.$items.eq( this.current + 1 );
-			
-			if( !this.support3d && this.support2d && this.supportTrans ) {
-			
-				this.$items.css( 'z-index', 1 );
-				this.$currentItm.css( 'z-index', 999 );
-			
-			}
-			
-			// next & previous items
-			if( this.itemsCount > 3 ) {
-			
-				// next item
-				this.$nextItm		= ( this.$rightItm.index() === this.itemsCount - 1 ) ? this.$items.eq( 0 ) : this.$rightItm.next();
-				this.$nextItm.css( this._getCoordinates('outright') );
-				
-				// previous item
-				this.$prevItm		= ( this.$leftItm.index() === 0 ) ? this.$items.eq( this.itemsCount - 1 ) : this.$leftItm.prev();
-				this.$prevItm.css( this._getCoordinates('outleft') );
-			
-			}
-			
-		},
-		_loadEvents			: function() {
-			
-			var _self	= this;
-			
-			this.$navPrev.on( 'click.gallery', function( event ) {
-				
-				if( _self.options.autoplay ) {
-				
-					clearTimeout( _self.slideshow );
-					_self.options.autoplay	= false;
-				
-				}
-				
-				_self._navigate('prev');
-				return false;
-				
-			});
-			
-			this.$navNext.on( 'click.gallery', function( event ) {
-				
-				if( _self.options.autoplay ) {
-				
-					clearTimeout( _self.slideshow );
-					_self.options.autoplay	= false;
-				
-				}
-				
-				_self._navigate('next');
-				return false;
-				
-			});
-			
-			this.$wrapper.on( 'webkitTransitionEnd.gallery transitionend.gallery OTransitionEnd.gallery', function( event ) {
-				
-				_self.$currentItm.addClass('dg-center');
-				_self.$items.removeClass('dg-transition');
-				_self.isAnim	= false;
-				
-			});
-			
-		},
-		_getCoordinates		: function( position ) {
-			
-			if( this.support3d && this.supportTrans ) {
-			
-				switch( position ) {
-					case 'outleft':
-						return {
-							'-webkit-transform'	: 'translateX(-250px) translateZ(-300px) rotateY(45deg) scale(0.82)',
-							'-moz-transform'	: 'translateX(-250px) translateZ(-300px) rotateY(45deg) scale(0.82)',
-							'-o-transform'		: 'translateX(-250px) translateZ(-300px) rotateY(45deg) scale(0.82)',
-							'-ms-transform'		: 'translateX(-250px) translateZ(-300px) rotateY(45deg) scale(0.82)',
-							'transform'			: 'translateX(-250px) translateZ(-300px) rotateY(45deg) scale(0.82)',
-							'opacity'			: 0,
-							'visibility'		: 'hidden'
-						};
-						break;
-					case 'outright':
-						return {
-							'-webkit-transform'	: 'translateX(250px) translateZ(-300px) rotateY(-45deg) scale(0.82)',
-							'-moz-transform'	: 'translateX(250px) translateZ(-300px) rotateY(-45deg) scale(0.82)',
-							'-o-transform'		: 'translateX(250px) translateZ(-300px) rotateY(-45deg) scale(0.82)',
-							'-ms-transform'		: 'translateX(250px) translateZ(-300px) rotateY(-45deg) scale(0.82)',
-							'transform'			: 'translateX(250px) translateZ(-300px) rotateY(-45deg) scale(0.82)',
-							'opacity'			: 0,
-							'visibility'		: 'hidden'
-						};
-						break;
-					case 'left':
-						return {
-							'-webkit-transform'	: 'translateX(-250px) translateZ(-200px) rotateY(45deg) scale(0.82)',
-							'-moz-transform'	: 'translateX(-250px) translateZ(-200px) rotateY(45deg) scale(0.82)',
-							'-o-transform'		: 'translateX(-250px) translateZ(-200px) rotateY(45deg) scale(0.82)',
-							'-ms-transform'		: 'translateX(-250px) translateZ(-200px) rotateY(45deg) scale(0.82)',
-							'transform'			: 'translateX(-250px) translateZ(-200px) rotateY(45deg) scale(0.82)',
-							'opacity'			: 1,
-							'visibility'		: 'visible'
-						};
-						break;
-					case 'right':
-						return {
-							'-webkit-transform'	: 'translateX(250px) translateZ(-200px) rotateY(-45deg) scale(0.82)',
-							'-moz-transform'	: 'translateX(250px) translateZ(-200px) rotateY(-45deg) scale(0.82)',
-							'-o-transform'		: 'translateX(250px) translateZ(-200px) rotateY(-45deg) scale(0.82)',
-							'-ms-transform'		: 'translateX(250px) translateZ(-200px) rotateY(-45deg) scale(0.82)',
-							'transform'			: 'translateX(250px) translateZ(-200px) rotateY(-45deg) scale(0.82)',
-							'opacity'			: 1,
-							'visibility'		: 'visible'
-						};
-						break;
-					case 'center':
-						return {
-							'-webkit-transform'	: 'translateX(0px) translateZ(0px) rotateY(0deg)',
-							'-moz-transform'	: 'translateX(0px) translateZ(0px) rotateY(0deg)',
-							'-o-transform'		: 'translateX(0px) translateZ(0px) rotateY(0deg)',
-							'-ms-transform'		: 'translateX(0px) translateZ(0px) rotateY(0deg)',
-							'transform'			: 'translateX(0px) translateZ(0px) rotateY(0deg)',
-							'opacity'			: 1,
-							'visibility'		: 'visible'
-						};
-						break;
-				};
-			
-			}
-			else if( this.support2d && this.supportTrans ) {
-			
-				switch( position ) {
-					case 'outleft':
-						return {
-							'-webkit-transform'	: 'translate(-450px) scale(0.7)',
-							'-moz-transform'	: 'translate(-450px) scale(0.7)',
-							'-o-transform'		: 'translate(-450px) scale(0.7)',
-							'-ms-transform'		: 'translate(-450px) scale(0.7)',
-							'transform'			: 'translate(-450px) scale(0.7)',
-							'opacity'			: 0,
-							'visibility'		: 'hidden'
-						};
-						break;
-					case 'outright':
-						return {
-							'-webkit-transform'	: 'translate(450px) scale(0.7)',
-							'-moz-transform'	: 'translate(450px) scale(0.7)',
-							'-o-transform'		: 'translate(450px) scale(0.7)',
-							'-ms-transform'		: 'translate(450px) scale(0.7)',
-							'transform'			: 'translate(450px) scale(0.7)',
-							'opacity'			: 0,
-							'visibility'		: 'hidden'
-						};
-						break;
-					case 'left':
-						return {
-							'-webkit-transform'	: 'translate(-350px) scale(0.8)',
-							'-moz-transform'	: 'translate(-350px) scale(0.8)',
-							'-o-transform'		: 'translate(-350px) scale(0.8)',
-							'-ms-transform'		: 'translate(-350px) scale(0.8)',
-							'transform'			: 'translate(-350px) scale(0.8)',
-							'opacity'			: 1,
-							'visibility'		: 'visible'
-						};
-						break;
-					case 'right':
-						return {
-							'-webkit-transform'	: 'translate(350px) scale(0.8)',
-							'-moz-transform'	: 'translate(350px) scale(0.8)',
-							'-o-transform'		: 'translate(350px) scale(0.8)',
-							'-ms-transform'		: 'translate(350px) scale(0.8)',
-							'transform'			: 'translate(350px) scale(0.8)',
-							'opacity'			: 1,
-							'visibility'		: 'visible'
-						};
-						break;
-					case 'center':
-						return {
-							'-webkit-transform'	: 'translate(0px) scale(1)',
-							'-moz-transform'	: 'translate(0px) scale(1)',
-							'-o-transform'		: 'translate(0px) scale(1)',
-							'-ms-transform'		: 'translate(0px) scale(1)',
-							'transform'			: 'translate(0px) scale(1)',
-							'opacity'			: 1,
-							'visibility'		: 'visible'
-						};
-						break;
-				};
-			
-			}
-			else {
-			
-				switch( position ) {
-					case 'outleft'	: 
-					case 'outright'	: 
-					case 'left'		: 
-					case 'right'	:
-						return {
-							'opacity'			: 0,
-							'visibility'		: 'hidden'
-						};
-						break;
-					case 'center'	:
-						return {
-							'opacity'			: 1,
-							'visibility'		: 'visible'
-						};
-						break;
-				};
-			
-			}
-		
-		},
-		_navigate			: function( dir ) {
-			
-			if( this.supportTrans && this.isAnim )
-				return false;
-				
-			this.isAnim	= true;
-			
-			switch( dir ) {
-			
-				case 'next' :
-					
-					this.current	= this.$rightItm.index();
-					
-					// current item moves left
-					this.$currentItm.addClass('dg-transition').css( this._getCoordinates('left') );
-					
-					// right item moves to the center
-					this.$rightItm.addClass('dg-transition').css( this._getCoordinates('center') );	
-					
-					// next item moves to the right
-					if( this.$nextItm ) {
-						
-						// left item moves out
-						this.$leftItm.addClass('dg-transition').css( this._getCoordinates('outleft') );
-						
-						this.$nextItm.addClass('dg-transition').css( this._getCoordinates('right') );
-						
-					}
-					else {
-					
-						// left item moves right
-						this.$leftItm.addClass('dg-transition').css( this._getCoordinates('right') );
-					
-					}
-					break;
-					
-				case 'prev' :
-				
-					this.current	= this.$leftItm.index();
-					
-					// current item moves right
-					this.$currentItm.addClass('dg-transition').css( this._getCoordinates('right') );
-					
-					// left item moves to the center
-					this.$leftItm.addClass('dg-transition').css( this._getCoordinates('center') );
-					
-					// prev item moves to the left
-					if( this.$prevItm ) {
-						
-						// right item moves out
-						this.$rightItm.addClass('dg-transition').css( this._getCoordinates('outright') );
-					
-						this.$prevItm.addClass('dg-transition').css( this._getCoordinates('left') );
-						
-					}
-					else {
-					
-						// right item moves left
-						this.$rightItm.addClass('dg-transition').css( this._getCoordinates('left') );
-					
-					}
-					break;	
-					
-			};
-			
-			this._setItems();
-			
-			if( !this.supportTrans )
-				this.$currentItm.addClass('dg-center');
-			
-		},
-		_startSlideshow		: function() {
-		
-			var _self	= this;
-			
-			this.slideshow	= setTimeout( function() {
-				
-				_self._navigate( 'next' );
-				
-				if( _self.options.autoplay ) {
-				
-					_self._startSlideshow();
-				
-				}
-			
-			}, this.options.interval );
-		
-		},
-		destroy				: function() {
-			
-			this.$navPrev.off('.gallery');
-			this.$navNext.off('.gallery');
-			this.$wrapper.off('.gallery');
-			
-		}
-	};
-	
-	var logError 			= function( message ) {
-		if ( this.console ) {
-			console.error( message );
-		}
-	};
-	
-	$.fn.gallery			= function( options ) {
-	
-		if ( typeof options === 'string' ) {
-			
-			var args = Array.prototype.slice.call( arguments, 1 );
-			
-			this.each(function() {
-			
-				var instance = $.data( this, 'gallery' );
-				
-				if ( !instance ) {
-					logError( "cannot call methods on gallery prior to initialization; " +
-					"attempted to call method '" + options + "'" );
-					return;
-				}
-				
-				if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {
-					logError( "no such method '" + options + "' for gallery instance" );
-					return;
-				}
-				
-				instance[ options ].apply( instance, args );
-			
-			});
-		
-		} 
-		else {
-		
-			this.each(function() {
-			
-				var instance = $.data( this, 'gallery' );
-				if ( !instance ) {
-					$.data( this, 'gallery', new $.Gallery( options, this ) );
-				}
-			});
-		
-		}
-		
-		return this;
-		
-	};
-	
-})( jQuery );

+ 28 - 19
2018专题/球球大作战竞猜/src/modules/page/main.js

@@ -182,11 +182,8 @@ var V = {
         this.screenInit();
         this.login();
 
-        // 比赛列表
-        // this.initMathList();
-
         M.getUserInfo();
-        // M.getRankTable();
+        M.getRankTable();
         
         if(announce == 'true') {
             $('#targetReward').show()
@@ -420,23 +417,35 @@ var M = { // 比赛列表
     getBonusList: function() {
         $.ajax({  
             dataType: 'jsonp',  
-            url: API+'/user/bonusList?ac_id='+AC_ID,  
+            url: API+'/user/bonusList?ac_id=' + AC_ID ,  
             success: function(data){ 
                 var list = data.list;
-                $.each(list, function(index, val) {
-                    var level = val.bonus_level;
-                    var name = val.nickname + ',';
-                    var nameHtml = '<span class="name">'+ name +'</span>'
-                    if(level == 1) {
-                        $('.one_level').append(nameHtml)
-                    } else if(level == 2) {
-                        $('.two_level').append(nameHtml)
-                    } else if(level == 3) {
-                        $('.three_level').append(nameHtml)
-                    } else if(level == 0) {
-                        $('.four_level').append(nameHtml)
-                    } 
-                 })
+                if(list.length) {
+
+                    $('.bonus-wrap').html('')
+
+                    $.each(list, function(index, val) {
+
+                        var level = val.bonus_level;
+                        var name = val.nickname + ',';
+                        var title = val.bonus_level_desc;
+
+                        var $bonusLevel = $('.bonus-level-'+level)
+                        var nameHtml = '<span class="name">'+ name +'</span>'
+
+
+                        if(!$bonusLevel[0]) {
+                            var levelHtml = '<div class="level-box">'+
+                                                '<div class="title">'+ title +'</div>'+
+                                                '<div class="level-list bonus-level-'+level+'"></div>'+
+                                           ' </div>'
+                            $('.bonus-wrap').append(levelHtml)
+                        }
+
+                        $('.bonus-level-'+level).append(nameHtml)
+                        
+                     })
+                }
             },
             error: function() {
             }

+ 165 - 0
2018专题/球球大作战竞猜/src/modules/pubswiper/pubswiper.js

@@ -0,0 +1,165 @@
+var Swiper = require('swiper.min.js');//轮播
+
+var matchListTpl = __inline("/src/tpl/matchList.tmpl"); //比赛列表
+
+var API = '//match-guess.duowan.com'; 
+var AC_ID = $('.zt-mod-schedule').attr('data-acid')
+
+var swiper = null
+
+var C = {
+    init: function() {
+        this.liveQueSubmit();
+        this.guessClick();
+    },
+    // 实况问题提交
+    liveQueSubmit: function() {
+        $(document).on('click', '.live-que-submit', function() {
+            var param = [];
+            var $quewrap = $(this).parent('.schedule-guess');
+            var matchId = $(this).parents('.swiper-slide').attr('data-match');
+            // var step = 0;
+            var queSum = $quewrap.find('.que-radio').length;
+            var guessId= '';
+            var optionId = '';
+            $quewrap.find('.que-radio').each(function() {
+                var $radio = $(this).find('input[type="radio"]');
+                $radio.each(function() {
+                    // 选中
+                    if($(this).is(':checked')){
+                        guessId = $(this).attr('data-guess');
+                        optionId = $(this).attr('data-option');
+                        param.push({
+                            guess_id: guessId,
+                            option_id: optionId,
+                            match_id: matchId
+                        })
+                    }
+                })
+            })
+            if(param.length != queSum){
+                alert('还有竞猜没完成哦');
+                return;
+            }
+            M.liveQueSubmit(param,$(this));
+        })
+    },
+    // 更多竞猜
+    guessClick() {
+        $(document).on('click', '.attach-guess-btn', function() {
+            var $this = $(this)
+            var guessbox = $this.parent().find('.schedule-guess')
+            if(guessbox[0]){
+                $this.next().slideToggle()
+                var $arrow = $this.find('.arrow-icon')
+                if($arrow.hasClass('rotate')){
+                    $arrow.removeClass('rotate')
+                } else {
+                    $arrow.addClass('rotate')
+                }
+            } else {
+                alert('该比赛暂无竞猜')
+            }
+        })
+    }
+}
+
+var V = {
+    init: function() {
+        this.screenInit();
+        M.getMatchList()
+    },
+    initMathList: function(num) {
+        swiper = new Swiper('.qq-swiper-container', {
+            slidesPerView: num,
+            centeredSlides: false,
+            spaceBetween: 0,
+            // slideClass : 'top-siper-slide',
+            navigation: {
+              nextEl: '.btn-next',
+              prevEl: '.btn-prev',
+            }
+        });
+    },
+    screenInit: function() {
+        // 页面初始化设置
+        var winWidth = $(window).width();
+        if(winWidth > 750) {
+            this.initMathList(3)
+        }else {
+            this.initMathList(1)
+        }
+    },
+    // 比赛列表
+    renderMatchList: function(obj,matchMap) {
+        var dom = matchListTpl({data: obj,map: matchMap});
+        $('.zt-ui-carousel').remove();
+        $('.zt-mod-schedule').append(dom);
+        V.screenInit()
+    },
+}
+
+var M = { // 比赛列表
+    getMatchList: function() {
+        // 比赛信息
+        var xhr1 = $.ajax({  
+                dataType: 'jsonp',  
+                url: API+'/matches/list?ac_id='+AC_ID
+            }); 
+        // 比赛排名
+        var xhr2 = $.ajax({  
+                dataType: 'jsonp', 
+                url: API+'/matches/teamsGroupByMatch?ac_id='+AC_ID
+            })
+        
+        var matchind = $('.zt-mod-schedule').attr('data-ind');
+
+        $.when(xhr1, xhr2).done(function(res1, res2) {
+            var data = res1[0].data
+            var map = res2[0].map
+            var matchList = []
+
+            // 合并数据
+            for(var i in data) {
+                matchList = matchList.concat(data[i])
+            }
+
+            var index = 0; //索引
+            if(matchind) {
+                $.each(matchList, function(i ,e) {
+                    if(e.match_id == matchind) {
+                        index = i;
+                        return false;
+                    }
+                })
+            }
+
+            V.renderMatchList(matchList,map);
+
+            // 自动滚动到进行中的位置
+            swiper.slideTo(index, 0, false)
+        })
+    },
+    // 实况问题提交
+    liveQueSubmit: function(param,$this) {
+        if(dwUDBProxy.isLogin()){
+            $.ajax({  
+                dataType: 'jsonp',  
+                url: API+'/guess/SubmitLives?ac_id='+AC_ID,  
+                data: {args: param},
+                success: function(data){  
+                    alert(data.msg);
+                },
+                error: function() {
+                    // alert('请先登录');
+                    dwUDBProxy.login("") //登录成功地址,默认当前页
+                }
+            }); 
+        } else {
+            dwUDBProxy.login("") //登录成功地址,默认当前页
+        }
+    },
+}
+
+C.init();
+V.init();

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 11 - 0
2018专题/球球大作战竞猜/src/modules/pubswiper/swiper.min.js


+ 0 - 90
2018专题/球球大作战竞猜/src/modules/sealoader/sealoader.js

@@ -1,90 +0,0 @@
-var jqueryDefined = false;
-function ready(callback) {
-	var jQuery = window.jQuery;
-	if (!jqueryDefined && jQuery) {
-		jqueryDefined = true;
-		var factory = function() {
-			return jQuery;
-		};
-		seajs.define('jquery', factory);
-		seajs.define('$', factory);
-		seajs.define('$-debug', factory);
-		if (jQuery.browser) {
-			seajs.define('gallery/jquery-plugin/jquery-migrate', factory);
-		}
-	}
-
-	if (callback) {
-		callback(seajs);
-	}
-}
-
-if (window.seajs) {
-	module.exports = ready;
-} else {
-	var loadScript = (function() {
-		var READY_STATE_RE = /loaded|complete/;
-
-		var head = document.getElementsByTagName("head")[0] || document.documentElement, baseElement = head.getElementsByTagName("base")[0];
-
-		return function(url, callback, id) {
-			var script = document.createElement("script");
-
-			function onload() {
-				// Ensure only run once and handle memory leak in IE
-				script.onload = script.onerror = script.onreadystatechange = null;
-
-				// Remove the script to reduce memory leak
-				head.removeChild(script);
-
-				// Dereference the script
-				script = null;
-
-				if (callback) {
-					callback()
-				}
-			}
-
-			if ("onload" in script) {
-				script.onerror = script.onload = onload;
-			} else {
-				script.onreadystatechange = function() {
-					if (READY_STATE_RE.test(script.readyState)) {
-						onload();
-					}
-				}
-			}
-
-			script.async = true;
-			script.src = url;
-			if (id) {
-				script.id = id;
-			}
-
-			baseElement ? head.insertBefore(script, baseElement) : head.appendChild(script)
-		}
-	})();
-
-	var queue = true;
-	module.exports = function(callback) {
-		if (queue) {
-			if (queue === true) {
-				queue = [callback];
-				loadScript('http://assets.dwstatic.com/amkit/entry.js', function() {
-					var c;
-					for (var i = 0, len = queue.length; i < len; i++) {
-						c = queue[i];
-						if (c) {
-							ready(c);
-						}
-					}
-					queue = null;
-				});
-			} else {
-				queue.push(callback);
-			}
-		} else {
-			ready(callback);
-		}
-	};
-}

+ 0 - 636
2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/accordion-debug.js

@@ -1,636 +0,0 @@
-define("arale/switchable/1.0.1/accordion-debug", [ "./switchable-debug", "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "./plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "./plugins/autoplay-debug", "./plugins/circular-debug" ], function(require, exports, module) {
-    var Switchable = require("./switchable-debug");
-    // 手风琴组件
-    var Accordion = Switchable.extend({
-        attrs: {
-            triggerType: "click",
-            // 是否运行展开多个
-            multiple: false,
-            autoplay: false
-        },
-        switchTo: function(toIndex) {
-            if (this.get("multiple")) {
-                this._switchTo(toIndex, toIndex);
-            } else {
-                Switchable.prototype.switchTo.call(this, toIndex);
-            }
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            if (this.get("multiple")) {
-                this.get("triggers").eq(toIndex).toggleClass(this.get("activeTriggerClass"));
-            } else {
-                Switchable.prototype._switchTrigger.call(this, toIndex, fromIndex);
-            }
-        },
-        _switchPanel: function(panelInfo) {
-            if (this.get("multiple")) {
-                panelInfo.toPanels.toggle();
-            } else {
-                Switchable.prototype._switchPanel.call(this, panelInfo);
-            }
-        }
-    });
-    module.exports = Accordion;
-});
-
-define("arale/switchable/1.0.1/switchable-debug", [ "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "arale/switchable/1.0.1/plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "arale/switchable/1.0.1/plugins/autoplay-debug", "arale/switchable/1.0.1/plugins/circular-debug" ], function(require, exports, module) {
-    // Switchable
-    // -----------
-    // 可切换组件,核心特征是:有一组可切换的面板(Panel),可通过触点(Trigger)来触发。
-    // 感谢:
-    //  - https://github.com/kissyteam/kissy/tree/6707ecc4cdfddd59e21698c8eb4a50b65dbe7632/src/switchable
-    var $ = require("$-debug");
-    var Widget = require("arale/widget/1.1.1/widget-debug");
-    var Effects = require("arale/switchable/1.0.1/plugins/effects-debug");
-    var Autoplay = require("arale/switchable/1.0.1/plugins/autoplay-debug");
-    var Circular = require("arale/switchable/1.0.1/plugins/circular-debug");
-    var Switchable = Widget.extend({
-        attrs: {
-            // 用户传入的 triggers 和 panels
-            // 可以是 Selector、jQuery 对象、或 DOM 元素集
-            triggers: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            panels: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            classPrefix: "ui-switchable",
-            // 是否包含 triggers,用于没有传入 triggers 时,是否自动生成的判断标准
-            hasTriggers: true,
-            // 触发类型
-            triggerType: "hover",
-            // or 'click'
-            // 触发延迟
-            delay: 100,
-            // 初始切换到哪个面板
-            activeIndex: {
-                value: 0,
-                setter: function(val) {
-                    return parseInt(val) || 0;
-                }
-            },
-            // 一屏内有多少个 panels
-            step: 1,
-            // 有多少屏
-            length: {
-                readOnly: true,
-                getter: function() {
-                    return Math.ceil(this.get("panels").length / this.get("step"));
-                }
-            },
-            // 可见视图区域的大小。一般不需要设定此值,仅当获取值不正确时,用于手工指定大小
-            viewSize: [],
-            activeTriggerClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-active";
-                }
-            }
-        },
-        setup: function() {
-            this._initConstClass();
-            this._initElement();
-            var role = this._getDatasetRole();
-            this._initPanels(role);
-            // 配置中的 triggers > dataset > 自动生成
-            this._initTriggers(role);
-            this._bindTriggers();
-            this._initPlugins();
-            // 渲染默认初始状态
-            this.render();
-        },
-        _initConstClass: function() {
-            this.CONST = constClass(this.get("classPrefix"));
-        },
-        _initElement: function() {
-            this.element.addClass(this.CONST.UI_SWITCHABLE);
-        },
-        // 从 HTML 标记中获取各个 role, 替代原来的 markupType
-        _getDatasetRole: function() {
-            var element = this.element;
-            var role = {};
-            var roles = [ "trigger", "panel", "nav", "content" ];
-            $.each(roles, function(index, key) {
-                var elems = $("[data-role=" + key + "]", element);
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _initPanels: function(role) {
-            var panels = this.get("panels");
-            // 先获取 panels 和 content
-            if (panels.length > 0) {} else if (role.panel) {
-                this.set("panels", panels = role.panel);
-            } else if (role.content) {
-                this.set("panels", panels = role.content.find("> *"));
-                this.content = role.content;
-            }
-            if (panels.length === 0) {
-                throw new Error("panels.length is ZERO");
-            }
-            if (!this.content) {
-                this.content = panels.parent();
-            }
-            this.content.addClass(this.CONST.CONTENT_CLASS);
-            this.get("panels").addClass(this.CONST.PANEL_CLASS);
-        },
-        _initTriggers: function(role) {
-            var triggers = this.get("triggers");
-            // 再获取 triggers 和 nav
-            if (triggers.length > 0) {} else if (role.trigger) {
-                this.set("triggers", triggers = role.trigger);
-            } else if (role.nav) {
-                triggers = role.nav.find("> *");
-                // 空的 nav 标记
-                if (triggers.length === 0) {
-                    triggers = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass"), true).appendTo(role.nav);
-                }
-                this.set("triggers", triggers);
-                this.nav = role.nav;
-            } else if (this.get("hasTriggers")) {
-                this.nav = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass")).appendTo(this.element);
-                this.set("triggers", triggers = this.nav.children());
-            }
-            if (!this.nav && triggers.length) {
-                this.nav = triggers.parent();
-            }
-            this.nav && this.nav.addClass(this.CONST.NAV_CLASS);
-            triggers.addClass(this.CONST.TRIGGER_CLASS).each(function(i, trigger) {
-                $(trigger).data("value", i);
-            });
-        },
-        _bindTriggers: function() {
-            var that = this, triggers = this.get("triggers");
-            if (this.get("triggerType") === "click") {
-                triggers.click(focus);
-            } else {
-                triggers.hover(focus, leave);
-            }
-            function focus(ev) {
-                that._onFocusTrigger(ev.type, $(this).data("value"));
-            }
-            function leave() {
-                clearTimeout(that._switchTimer);
-            }
-        },
-        _onFocusTrigger: function(type, index) {
-            var that = this;
-            // click or tab 键激活时
-            if (type === "click") {
-                this.switchTo(index);
-            } else {
-                this._switchTimer = setTimeout(function() {
-                    that.switchTo(index);
-                }, this.get("delay"));
-            }
-        },
-        _initPlugins: function() {
-            this._plugins = [];
-            this._plug(Effects);
-            this._plug(Autoplay);
-            this._plug(Circular);
-        },
-        // 切换到指定 index
-        switchTo: function(toIndex) {
-            this.set("activeIndex", toIndex);
-        },
-        // change 事件触发的前提是当前值和先前值不一致, 所以无需验证 toIndex !== fromIndex
-        _onRenderActiveIndex: function(toIndex, fromIndex) {
-            this._switchTo(toIndex, fromIndex);
-        },
-        _switchTo: function(toIndex, fromIndex) {
-            this.trigger("switch", toIndex, fromIndex);
-            this._switchTrigger(toIndex, fromIndex);
-            this._switchPanel(this._getPanelInfo(toIndex, fromIndex));
-            this.trigger("switched", toIndex, fromIndex);
-            // 恢复手工向后切换标识
-            this._isBackward = undefined;
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            var triggers = this.get("triggers");
-            if (triggers.length < 1) return;
-            triggers.eq(fromIndex).removeClass(this.get("activeTriggerClass"));
-            triggers.eq(toIndex).addClass(this.get("activeTriggerClass"));
-        },
-        _switchPanel: function(panelInfo) {
-            // 默认是最简单的切换效果:直接隐藏/显示
-            panelInfo.fromPanels.hide();
-            panelInfo.toPanels.show();
-        },
-        _getPanelInfo: function(toIndex, fromIndex) {
-            var panels = this.get("panels").get();
-            var step = this.get("step");
-            var fromPanels, toPanels;
-            // 初始情况下 fromIndex 为 undefined
-            if (fromIndex > -1) {
-                fromPanels = panels.slice(fromIndex * step, (fromIndex + 1) * step);
-            }
-            toPanels = panels.slice(toIndex * step, (toIndex + 1) * step);
-            return {
-                toIndex: toIndex,
-                fromIndex: fromIndex,
-                toPanels: $(toPanels),
-                fromPanels: $(fromPanels)
-            };
-        },
-        // 切换到上一视图
-        prev: function() {
-            //  设置手工向后切换标识, 外部调用 prev 一样
-            this._isBackward = true;
-            var fromIndex = this.get("activeIndex");
-            // 考虑循环切换的情况
-            var index = (fromIndex - 1 + this.get("length")) % this.get("length");
-            this.switchTo(index);
-        },
-        // 切换到下一视图
-        next: function() {
-            this._isBackward = false;
-            var fromIndex = this.get("activeIndex");
-            var index = (fromIndex + 1) % this.get("length");
-            this.switchTo(index);
-        },
-        _plug: function(plugin) {
-            var pluginAttrs = plugin.attrs;
-            if (pluginAttrs) {
-                for (var key in pluginAttrs) {
-                    if (pluginAttrs.hasOwnProperty(key) && // 不覆盖用户传入的配置
-                    !(key in this.attrs)) {
-                        this.set(key, pluginAttrs[key]);
-                    }
-                }
-            }
-            if (!plugin.isNeeded.call(this)) return;
-            if (plugin.install) {
-                plugin.install.call(this);
-            }
-            this._plugins.push(plugin);
-        },
-        destroy: function() {
-            // todo: events
-            var that = this;
-            $.each(this._plugins, function(i, plugin) {
-                if (plugin.destroy) {
-                    plugin.destroy.call(that);
-                }
-            });
-            Switchable.superclass.destroy.call(this);
-        }
-    });
-    module.exports = Switchable;
-    // Helpers
-    // -------
-    function generateTriggersMarkup(length, activeIndex, activeTriggerClass, justChildren) {
-        var nav = $("<ul>");
-        for (var i = 0; i < length; i++) {
-            var className = i === activeIndex ? activeTriggerClass : "";
-            $("<li>", {
-                "class": className,
-                html: i + 1
-            }).appendTo(nav);
-        }
-        return justChildren ? nav.children() : nav;
-    }
-    // 内部默认的 className
-    function constClass(classPrefix) {
-        return {
-            UI_SWITCHABLE: classPrefix || "",
-            NAV_CLASS: classPrefix ? classPrefix + "-nav" : "",
-            CONTENT_CLASS: classPrefix ? classPrefix + "-content" : "",
-            TRIGGER_CLASS: classPrefix ? classPrefix + "-trigger" : "",
-            PANEL_CLASS: classPrefix ? classPrefix + "-panel" : "",
-            PREV_BTN_CLASS: classPrefix ? classPrefix + "-prev-btn" : "",
-            NEXT_BTN_CLASS: classPrefix ? classPrefix + "-next-btn" : ""
-        };
-    }
-});
-
-define("arale/switchable/1.0.1/plugins/effects-debug", [ "$-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    require("arale/easing/1.0.0/easing-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var FADE = "fade";
-    // 切换效果插件
-    module.exports = {
-        attrs: {
-            // 切换效果,可取 scrollx | scrolly | fade 或直接传入 effect function
-            effect: "none",
-            easing: "linear",
-            duration: 500
-        },
-        isNeeded: function() {
-            return this.get("effect") !== "none";
-        },
-        install: function() {
-            var panels = this.get("panels");
-            // 注:
-            // 1. 所有 panel 的尺寸应该相同
-            //    最好指定第一个 panel 的 width 和 height
-            //    因为 Safari 下,图片未加载时,读取的 offsetHeight 等值会不对
-            // 2. 初始化 panels 样式
-            //    这些特效需要将 panels 都显示出来
-            // 3. 在 CSS 里,需要给 container 设定高宽和 overflow: hidden
-            panels.show();
-            var effect = this.get("effect");
-            var step = this.get("step");
-            // 初始化滚动效果
-            if (effect.indexOf("scroll") === 0) {
-                var content = this.content;
-                var firstPanel = panels.eq(0);
-                // 设置定位信息,为滚动效果做铺垫
-                content.css("position", "relative");
-                // 注:content 的父级不一定是 container
-                if (content.parent().css("position") === "static") {
-                    content.parent().css("position", "relative");
-                }
-                // 水平排列
-                if (effect === SCROLLX) {
-                    panels.css("float", "left");
-                    // 设置最大宽度,以保证有空间让 panels 水平排布
-                    // 134217727 为 IE6 下 width 最大数值
-                    content.width("134217726px");
-                }
-                // 只有 scrollX, scrollY 需要设置 viewSize
-                // 其他情况下不需要
-                var viewSize = this.get("viewSize");
-                if (!viewSize[0]) {
-                    viewSize[0] = firstPanel.outerWidth() * step;
-                    viewSize[1] = firstPanel.outerHeight() * step;
-                    this.set("viewSize", viewSize);
-                }
-                if (!viewSize[0]) {
-                    throw new Error("Please specify viewSize manually");
-                }
-            } else if (effect === FADE) {
-                var activeIndex = this.get("activeIndex");
-                var min = activeIndex * step;
-                var max = min + step - 1;
-                panels.each(function(i, panel) {
-                    var isActivePanel = i >= min && i <= max;
-                    $(panel).css({
-                        opacity: isActivePanel ? 1 : 0,
-                        position: "absolute",
-                        zIndex: isActivePanel ? 9 : 1
-                    });
-                });
-            }
-            // 覆盖 switchPanel 方法
-            this._switchPanel = function(panelInfo) {
-                var effect = this.get("effect");
-                var fn = $.isFunction(effect) ? effect : Effects[effect];
-                fn.call(this, panelInfo);
-            };
-        }
-    };
-    // 切换效果方法集
-    var Effects = {
-        // 淡隐淡现效果
-        fade: function(panelInfo) {
-            // 简单起见,目前不支持 step > 1 的情景。若需要此效果时,可修改结构来达成。
-            if (this.get("step") > 1) {
-                throw new Error('Effect "fade" only supports step === 1');
-            }
-            var fromPanel = panelInfo.fromPanels.eq(0);
-            var toPanel = panelInfo.toPanels.eq(0);
-            if (this.anim) {
-                // 立刻停止,以开始新的
-                this.anim.stop(false, true);
-            }
-            // 首先显示下一张
-            toPanel.css("opacity", 1);
-            toPanel.show();
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                // 动画切换
-                this.anim = fromPanel.animate({
-                    opacity: 0
-                }, duration, easing, function() {
-                    that.anim = null;
-                    // free
-                    // 切换 z-index
-                    toPanel.css("zIndex", 9);
-                    fromPanel.css("zIndex", 1);
-                    fromPanel.css("display", "none");
-                });
-            } else {
-                toPanel.css("zIndex", 9);
-            }
-        },
-        // 水平/垂直滚动效果
-        scroll: function(panelInfo) {
-            var isX = this.get("effect") === SCROLLX;
-            var diff = this.get("viewSize")[isX ? 0 : 1] * panelInfo.toIndex;
-            var props = {};
-            props[isX ? "left" : "top"] = -diff + "px";
-            if (this.anim) {
-                this.anim.stop();
-            }
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                this.anim = this.content.animate(props, duration, easing, function() {
-                    that.anim = null;
-                });
-            } else {
-                this.content.css(props);
-            }
-        }
-    };
-    Effects[SCROLLY] = Effects.scroll;
-    Effects[SCROLLX] = Effects.scroll;
-    module.exports.Effects = Effects;
-});
-
-define("arale/switchable/1.0.1/plugins/autoplay-debug", [ "$-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var win = $(window);
-    // 自动播放插件
-    module.exports = {
-        attrs: {
-            autoplay: false,
-            // 自动播放的间隔时间
-            interval: 5e3
-        },
-        isNeeded: function() {
-            return this.get("autoplay");
-        },
-        install: function() {
-            var element = this.element;
-            var EVENT_NS = "." + this.cid;
-            var timer;
-            var interval = this.get("interval");
-            var that = this;
-            // start autoplay
-            start();
-            function start() {
-                // 停止之前的
-                stop();
-                // 设置状态
-                that.paused = false;
-                // 开始现在的
-                timer = setInterval(function() {
-                    if (that.paused) return;
-                    that.next();
-                }, interval);
-            }
-            function stop() {
-                if (timer) {
-                    clearInterval(timer);
-                    timer = null;
-                }
-                that.paused = true;
-            }
-            // public api
-            this.stop = stop;
-            this.start = start;
-            // 滚出可视区域后,停止自动播放
-            this._scrollDetect = throttle(function() {
-                that[isInViewport(element) ? "start" : "stop"]();
-            });
-            win.on("scroll" + EVENT_NS, this._scrollDetect);
-            // 鼠标悬停时,停止自动播放
-            this.element.hover(stop, start);
-        },
-        destroy: function() {
-            var EVENT_NS = "." + this.cid;
-            this.stop && this.stop();
-            if (this._scrollDetect) {
-                this._scrollDetect.stop();
-                win.off("scroll" + EVENT_NS);
-            }
-        }
-    };
-    // Helpers
-    // -------
-    function throttle(fn, ms) {
-        ms = ms || 200;
-        var throttleTimer;
-        function f() {
-            f.stop();
-            throttleTimer = setTimeout(fn, ms);
-        }
-        f.stop = function() {
-            if (throttleTimer) {
-                clearTimeout(throttleTimer);
-                throttleTimer = 0;
-            }
-        };
-        return f;
-    }
-    function isInViewport(element) {
-        var scrollTop = win.scrollTop();
-        var scrollBottom = scrollTop + win.height();
-        var elementTop = element.offset().top;
-        var elementBottom = elementTop + element.height();
-        // 只判断垂直位置是否在可视区域,不判断水平。只有要部分区域在可视区域,就返回 true
-        return elementTop < scrollBottom && elementBottom > scrollTop;
-    }
-});
-
-define("arale/switchable/1.0.1/plugins/circular-debug", [ "$-debug", "arale/switchable/1.0.1/plugins/effects-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var Effects = require("arale/switchable/1.0.1/plugins/effects-debug").Effects;
-    // 无缝循环滚动插件
-    module.exports = {
-        // 仅在开启滚动效果时需要
-        isNeeded: function() {
-            var effect = this.get("effect");
-            var circular = this.get("circular");
-            return circular && (effect === SCROLLX || effect === SCROLLY);
-        },
-        install: function() {
-            this._scrollType = this.get("effect");
-            this.set("effect", "scrollCircular");
-        }
-    };
-    Effects.scrollCircular = function(panelInfo) {
-        var toIndex = panelInfo.toIndex;
-        var fromIndex = panelInfo.fromIndex;
-        var isX = this._scrollType === SCROLLX;
-        var prop = isX ? "left" : "top";
-        var viewDiff = this.get("viewSize")[isX ? 0 : 1];
-        var diff = -viewDiff * toIndex;
-        var props = {};
-        props[prop] = diff + "px";
-        // 开始动画
-        if (fromIndex > -1) {
-            // 开始动画前,先停止掉上一动画
-            if (this.anim) {
-                this.anim.stop(false, true);
-            }
-            var len = this.get("length");
-            // scroll 的 0 -> len-1 应该是正常的从 0->1->2->.. len-1 的切换
-            var isBackwardCritical = fromIndex === 0 && toIndex === len - 1;
-            // len-1 -> 0
-            var isForwardCritical = fromIndex === len - 1 && toIndex === 0;
-            var isBackward = this._isBackward === undefined ? toIndex < fromIndex : this._isBackward;
-            // isBackward 使用下面的判断方式, 会在 nav 上 trigger 从 0 -> len-1 切换时,
-            // 不经过 0->1->2->...-> len-1, 而是 0 反向切换到 len-1;
-            // 而上面的判断方式, nav 上的 trigger 切换是正常的, 只有调用 prev 才从 0 反向切换到 len-1;
-            //var isBackward = isBackwardCritical ||
-            //    (!isForwardCritical && toIndex < fromIndex);
-            // 从第一个反向滚动到最后一个 or 从最后一个正向滚动到第一个
-            var isCritical = isBackward && isBackwardCritical || !isBackward && isForwardCritical;
-            // 在临界点时,先调整 panels 位置
-            if (isCritical) {
-                diff = adjustPosition.call(this, isBackward, prop, viewDiff);
-                props[prop] = diff + "px";
-            }
-            var duration = this.get("duration");
-            var easing = this.get("easing");
-            var that = this;
-            this.anim = this.content.animate(props, duration, easing, function() {
-                that.anim = null;
-                // free
-                // 复原位置
-                if (isCritical) {
-                    resetPosition.call(that, isBackward, prop, viewDiff);
-                }
-            });
-        } else {
-            this.content.css(props);
-        }
-    };
-    // 调整位置
-    function adjustPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        var diff = isBackward ? viewDiff : -viewDiff * len;
-        var panelDiff = isBackward ? -viewDiff * len : viewDiff * len;
-        // 调整 panels 到下一个视图中
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "relative");
-        toPanels.css(prop, panelDiff + "px");
-        // 返回偏移量
-        return diff;
-    }
-    // 复原位置
-    function resetPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        // 滚动完成后,复位到正常状态
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "");
-        toPanels.css(prop, "");
-        // 瞬移到正常位置
-        this.content.css(prop, isBackward ? -viewDiff * (len - 1) : "");
-    }
-});

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/accordion.js


+ 0 - 692
2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/carousel-debug.js

@@ -1,692 +0,0 @@
-define("arale/switchable/1.0.1/carousel-debug", [ "./switchable-debug", "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "./plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "./plugins/autoplay-debug", "./plugins/circular-debug" ], function(require, exports, module) {
-    var Switchable = require("./switchable-debug");
-    var $ = require("$-debug");
-    // 旋转木马组件
-    module.exports = Switchable.extend({
-        attrs: {
-            circular: true,
-            prevBtn: {
-                getter: function(val) {
-                    return $(val).eq(0);
-                }
-            },
-            nextBtn: {
-                getter: function(val) {
-                    return $(val).eq(0);
-                }
-            },
-            disabledBtnClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-disabled-btn";
-                }
-            }
-        },
-        _initTriggers: function(role) {
-            Switchable.prototype._initTriggers.call(this, role);
-            // attr 里没找到时,才根据 data-role 来解析
-            var prevBtn = this.get("prevBtn");
-            var nextBtn = this.get("nextBtn");
-            if (!prevBtn[0] && role.prev) {
-                prevBtn = role.prev;
-                this.set("prevBtn", prevBtn);
-            }
-            if (!nextBtn[0] && role.next) {
-                nextBtn = role.next;
-                this.set("nextBtn", nextBtn);
-            }
-            prevBtn.addClass(this.CONST.PREV_BTN_CLASS);
-            nextBtn.addClass(this.CONST.NEXT_BTN_CLASS);
-        },
-        _getDatasetRole: function() {
-            var role = Switchable.prototype._getDatasetRole.call(this);
-            var element = this.element;
-            var roles = [ "next", "prev" ];
-            $.each(roles, function(index, key) {
-                var elems = $("[data-role=" + key + "]", element);
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _bindTriggers: function() {
-            Switchable.prototype._bindTriggers.call(this);
-            var that = this;
-            var circular = this.get("circular");
-            this.get("prevBtn").click(function(ev) {
-                ev.preventDefault();
-                if (circular || that.get("activeIndex") > 0) {
-                    that.prev();
-                }
-            });
-            this.get("nextBtn").click(function(ev) {
-                ev.preventDefault();
-                var len = that.get("length") - 1;
-                if (circular || that.get("activeIndex") < len) {
-                    that.next();
-                }
-            });
-            // 注册 switch 事件,处理 prevBtn/nextBtn 的 disable 状态
-            // circular = true 时,无需处理
-            if (!circular) {
-                this.on("switch", function(toIndex) {
-                    that._updateButtonStatus(toIndex);
-                });
-            }
-        },
-        _updateButtonStatus: function(toIndex) {
-            var prevBtn = this.get("prevBtn");
-            var nextBtn = this.get("nextBtn");
-            var disabledBtnClass = this.get("disabledBtnClass");
-            prevBtn.removeClass(disabledBtnClass);
-            nextBtn.removeClass(disabledBtnClass);
-            if (toIndex === 0) {
-                prevBtn.addClass(disabledBtnClass);
-            } else if (toIndex === this.get("length") - 1) {
-                nextBtn.addClass(disabledBtnClass);
-            }
-        }
-    });
-});
-
-define("arale/switchable/1.0.1/switchable-debug", [ "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "arale/switchable/1.0.1/plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "arale/switchable/1.0.1/plugins/autoplay-debug", "arale/switchable/1.0.1/plugins/circular-debug" ], function(require, exports, module) {
-    // Switchable
-    // -----------
-    // 可切换组件,核心特征是:有一组可切换的面板(Panel),可通过触点(Trigger)来触发。
-    // 感谢:
-    //  - https://github.com/kissyteam/kissy/tree/6707ecc4cdfddd59e21698c8eb4a50b65dbe7632/src/switchable
-    var $ = require("$-debug");
-    var Widget = require("arale/widget/1.1.1/widget-debug");
-    var Effects = require("arale/switchable/1.0.1/plugins/effects-debug");
-    var Autoplay = require("arale/switchable/1.0.1/plugins/autoplay-debug");
-    var Circular = require("arale/switchable/1.0.1/plugins/circular-debug");
-    var Switchable = Widget.extend({
-        attrs: {
-            // 用户传入的 triggers 和 panels
-            // 可以是 Selector、jQuery 对象、或 DOM 元素集
-            triggers: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            panels: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            classPrefix: "ui-switchable",
-            // 是否包含 triggers,用于没有传入 triggers 时,是否自动生成的判断标准
-            hasTriggers: true,
-            // 触发类型
-            triggerType: "hover",
-            // or 'click'
-            // 触发延迟
-            delay: 100,
-            // 初始切换到哪个面板
-            activeIndex: {
-                value: 0,
-                setter: function(val) {
-                    return parseInt(val) || 0;
-                }
-            },
-            // 一屏内有多少个 panels
-            step: 1,
-            // 有多少屏
-            length: {
-                readOnly: true,
-                getter: function() {
-                    return Math.ceil(this.get("panels").length / this.get("step"));
-                }
-            },
-            // 可见视图区域的大小。一般不需要设定此值,仅当获取值不正确时,用于手工指定大小
-            viewSize: [],
-            activeTriggerClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-active";
-                }
-            }
-        },
-        setup: function() {
-            this._initConstClass();
-            this._initElement();
-            var role = this._getDatasetRole();
-            this._initPanels(role);
-            // 配置中的 triggers > dataset > 自动生成
-            this._initTriggers(role);
-            this._bindTriggers();
-            this._initPlugins();
-            // 渲染默认初始状态
-            this.render();
-        },
-        _initConstClass: function() {
-            this.CONST = constClass(this.get("classPrefix"));
-        },
-        _initElement: function() {
-            this.element.addClass(this.CONST.UI_SWITCHABLE);
-        },
-        // 从 HTML 标记中获取各个 role, 替代原来的 markupType
-        _getDatasetRole: function() {
-            var element = this.element;
-            var role = {};
-            var roles = [ "trigger", "panel", "nav", "content" ];
-            $.each(roles, function(index, key) {
-                var elems = $("[data-role=" + key + "]", element);
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _initPanels: function(role) {
-            var panels = this.get("panels");
-            // 先获取 panels 和 content
-            if (panels.length > 0) {} else if (role.panel) {
-                this.set("panels", panels = role.panel);
-            } else if (role.content) {
-                this.set("panels", panels = role.content.find("> *"));
-                this.content = role.content;
-            }
-            if (panels.length === 0) {
-                throw new Error("panels.length is ZERO");
-            }
-            if (!this.content) {
-                this.content = panels.parent();
-            }
-            this.content.addClass(this.CONST.CONTENT_CLASS);
-            this.get("panels").addClass(this.CONST.PANEL_CLASS);
-        },
-        _initTriggers: function(role) {
-            var triggers = this.get("triggers");
-            // 再获取 triggers 和 nav
-            if (triggers.length > 0) {} else if (role.trigger) {
-                this.set("triggers", triggers = role.trigger);
-            } else if (role.nav) {
-                triggers = role.nav.find("> *");
-                // 空的 nav 标记
-                if (triggers.length === 0) {
-                    triggers = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass"), true).appendTo(role.nav);
-                }
-                this.set("triggers", triggers);
-                this.nav = role.nav;
-            } else if (this.get("hasTriggers")) {
-                this.nav = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass")).appendTo(this.element);
-                this.set("triggers", triggers = this.nav.children());
-            }
-            if (!this.nav && triggers.length) {
-                this.nav = triggers.parent();
-            }
-            this.nav && this.nav.addClass(this.CONST.NAV_CLASS);
-            triggers.addClass(this.CONST.TRIGGER_CLASS).each(function(i, trigger) {
-                $(trigger).data("value", i);
-            });
-        },
-        _bindTriggers: function() {
-            var that = this, triggers = this.get("triggers");
-            if (this.get("triggerType") === "click") {
-                triggers.click(focus);
-            } else {
-                triggers.hover(focus, leave);
-            }
-            function focus(ev) {
-                that._onFocusTrigger(ev.type, $(this).data("value"));
-            }
-            function leave() {
-                clearTimeout(that._switchTimer);
-            }
-        },
-        _onFocusTrigger: function(type, index) {
-            var that = this;
-            // click or tab 键激活时
-            if (type === "click") {
-                this.switchTo(index);
-            } else {
-                this._switchTimer = setTimeout(function() {
-                    that.switchTo(index);
-                }, this.get("delay"));
-            }
-        },
-        _initPlugins: function() {
-            this._plugins = [];
-            this._plug(Effects);
-            this._plug(Autoplay);
-            this._plug(Circular);
-        },
-        // 切换到指定 index
-        switchTo: function(toIndex) {
-            this.set("activeIndex", toIndex);
-        },
-        // change 事件触发的前提是当前值和先前值不一致, 所以无需验证 toIndex !== fromIndex
-        _onRenderActiveIndex: function(toIndex, fromIndex) {
-            this._switchTo(toIndex, fromIndex);
-        },
-        _switchTo: function(toIndex, fromIndex) {
-            this.trigger("switch", toIndex, fromIndex);
-            this._switchTrigger(toIndex, fromIndex);
-            this._switchPanel(this._getPanelInfo(toIndex, fromIndex));
-            this.trigger("switched", toIndex, fromIndex);
-            // 恢复手工向后切换标识
-            this._isBackward = undefined;
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            var triggers = this.get("triggers");
-            if (triggers.length < 1) return;
-            triggers.eq(fromIndex).removeClass(this.get("activeTriggerClass"));
-            triggers.eq(toIndex).addClass(this.get("activeTriggerClass"));
-        },
-        _switchPanel: function(panelInfo) {
-            // 默认是最简单的切换效果:直接隐藏/显示
-            panelInfo.fromPanels.hide();
-            panelInfo.toPanels.show();
-        },
-        _getPanelInfo: function(toIndex, fromIndex) {
-            var panels = this.get("panels").get();
-            var step = this.get("step");
-            var fromPanels, toPanels;
-            // 初始情况下 fromIndex 为 undefined
-            if (fromIndex > -1) {
-                fromPanels = panels.slice(fromIndex * step, (fromIndex + 1) * step);
-            }
-            toPanels = panels.slice(toIndex * step, (toIndex + 1) * step);
-            return {
-                toIndex: toIndex,
-                fromIndex: fromIndex,
-                toPanels: $(toPanels),
-                fromPanels: $(fromPanels)
-            };
-        },
-        // 切换到上一视图
-        prev: function() {
-            //  设置手工向后切换标识, 外部调用 prev 一样
-            this._isBackward = true;
-            var fromIndex = this.get("activeIndex");
-            // 考虑循环切换的情况
-            var index = (fromIndex - 1 + this.get("length")) % this.get("length");
-            this.switchTo(index);
-        },
-        // 切换到下一视图
-        next: function() {
-            this._isBackward = false;
-            var fromIndex = this.get("activeIndex");
-            var index = (fromIndex + 1) % this.get("length");
-            this.switchTo(index);
-        },
-        _plug: function(plugin) {
-            var pluginAttrs = plugin.attrs;
-            if (pluginAttrs) {
-                for (var key in pluginAttrs) {
-                    if (pluginAttrs.hasOwnProperty(key) && // 不覆盖用户传入的配置
-                    !(key in this.attrs)) {
-                        this.set(key, pluginAttrs[key]);
-                    }
-                }
-            }
-            if (!plugin.isNeeded.call(this)) return;
-            if (plugin.install) {
-                plugin.install.call(this);
-            }
-            this._plugins.push(plugin);
-        },
-        destroy: function() {
-            // todo: events
-            var that = this;
-            $.each(this._plugins, function(i, plugin) {
-                if (plugin.destroy) {
-                    plugin.destroy.call(that);
-                }
-            });
-            Switchable.superclass.destroy.call(this);
-        }
-    });
-    module.exports = Switchable;
-    // Helpers
-    // -------
-    function generateTriggersMarkup(length, activeIndex, activeTriggerClass, justChildren) {
-        var nav = $("<ul>");
-        for (var i = 0; i < length; i++) {
-            var className = i === activeIndex ? activeTriggerClass : "";
-            $("<li>", {
-                "class": className,
-                html: i + 1
-            }).appendTo(nav);
-        }
-        return justChildren ? nav.children() : nav;
-    }
-    // 内部默认的 className
-    function constClass(classPrefix) {
-        return {
-            UI_SWITCHABLE: classPrefix || "",
-            NAV_CLASS: classPrefix ? classPrefix + "-nav" : "",
-            CONTENT_CLASS: classPrefix ? classPrefix + "-content" : "",
-            TRIGGER_CLASS: classPrefix ? classPrefix + "-trigger" : "",
-            PANEL_CLASS: classPrefix ? classPrefix + "-panel" : "",
-            PREV_BTN_CLASS: classPrefix ? classPrefix + "-prev-btn" : "",
-            NEXT_BTN_CLASS: classPrefix ? classPrefix + "-next-btn" : ""
-        };
-    }
-});
-
-define("arale/switchable/1.0.1/plugins/effects-debug", [ "$-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    require("arale/easing/1.0.0/easing-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var FADE = "fade";
-    // 切换效果插件
-    module.exports = {
-        attrs: {
-            // 切换效果,可取 scrollx | scrolly | fade 或直接传入 effect function
-            effect: "none",
-            easing: "linear",
-            duration: 500
-        },
-        isNeeded: function() {
-            return this.get("effect") !== "none";
-        },
-        install: function() {
-            var panels = this.get("panels");
-            // 注:
-            // 1. 所有 panel 的尺寸应该相同
-            //    最好指定第一个 panel 的 width 和 height
-            //    因为 Safari 下,图片未加载时,读取的 offsetHeight 等值会不对
-            // 2. 初始化 panels 样式
-            //    这些特效需要将 panels 都显示出来
-            // 3. 在 CSS 里,需要给 container 设定高宽和 overflow: hidden
-            panels.show();
-            var effect = this.get("effect");
-            var step = this.get("step");
-            // 初始化滚动效果
-            if (effect.indexOf("scroll") === 0) {
-                var content = this.content;
-                var firstPanel = panels.eq(0);
-                // 设置定位信息,为滚动效果做铺垫
-                content.css("position", "relative");
-                // 注:content 的父级不一定是 container
-                if (content.parent().css("position") === "static") {
-                    content.parent().css("position", "relative");
-                }
-                // 水平排列
-                if (effect === SCROLLX) {
-                    panels.css("float", "left");
-                    // 设置最大宽度,以保证有空间让 panels 水平排布
-                    // 134217727 为 IE6 下 width 最大数值
-                    content.width("134217726px");
-                }
-                // 只有 scrollX, scrollY 需要设置 viewSize
-                // 其他情况下不需要
-                var viewSize = this.get("viewSize");
-                if (!viewSize[0]) {
-                    viewSize[0] = firstPanel.outerWidth() * step;
-                    viewSize[1] = firstPanel.outerHeight() * step;
-                    this.set("viewSize", viewSize);
-                }
-                if (!viewSize[0]) {
-                    throw new Error("Please specify viewSize manually");
-                }
-            } else if (effect === FADE) {
-                var activeIndex = this.get("activeIndex");
-                var min = activeIndex * step;
-                var max = min + step - 1;
-                panels.each(function(i, panel) {
-                    var isActivePanel = i >= min && i <= max;
-                    $(panel).css({
-                        opacity: isActivePanel ? 1 : 0,
-                        position: "absolute",
-                        zIndex: isActivePanel ? 9 : 1
-                    });
-                });
-            }
-            // 覆盖 switchPanel 方法
-            this._switchPanel = function(panelInfo) {
-                var effect = this.get("effect");
-                var fn = $.isFunction(effect) ? effect : Effects[effect];
-                fn.call(this, panelInfo);
-            };
-        }
-    };
-    // 切换效果方法集
-    var Effects = {
-        // 淡隐淡现效果
-        fade: function(panelInfo) {
-            // 简单起见,目前不支持 step > 1 的情景。若需要此效果时,可修改结构来达成。
-            if (this.get("step") > 1) {
-                throw new Error('Effect "fade" only supports step === 1');
-            }
-            var fromPanel = panelInfo.fromPanels.eq(0);
-            var toPanel = panelInfo.toPanels.eq(0);
-            if (this.anim) {
-                // 立刻停止,以开始新的
-                this.anim.stop(false, true);
-            }
-            // 首先显示下一张
-            toPanel.css("opacity", 1);
-            toPanel.show();
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                // 动画切换
-                this.anim = fromPanel.animate({
-                    opacity: 0
-                }, duration, easing, function() {
-                    that.anim = null;
-                    // free
-                    // 切换 z-index
-                    toPanel.css("zIndex", 9);
-                    fromPanel.css("zIndex", 1);
-                    fromPanel.css("display", "none");
-                });
-            } else {
-                toPanel.css("zIndex", 9);
-            }
-        },
-        // 水平/垂直滚动效果
-        scroll: function(panelInfo) {
-            var isX = this.get("effect") === SCROLLX;
-            var diff = this.get("viewSize")[isX ? 0 : 1] * panelInfo.toIndex;
-            var props = {};
-            props[isX ? "left" : "top"] = -diff + "px";
-            if (this.anim) {
-                this.anim.stop();
-            }
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                this.anim = this.content.animate(props, duration, easing, function() {
-                    that.anim = null;
-                });
-            } else {
-                this.content.css(props);
-            }
-        }
-    };
-    Effects[SCROLLY] = Effects.scroll;
-    Effects[SCROLLX] = Effects.scroll;
-    module.exports.Effects = Effects;
-});
-
-define("arale/switchable/1.0.1/plugins/autoplay-debug", [ "$-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var win = $(window);
-    // 自动播放插件
-    module.exports = {
-        attrs: {
-            autoplay: false,
-            // 自动播放的间隔时间
-            interval: 5e3
-        },
-        isNeeded: function() {
-            return this.get("autoplay");
-        },
-        install: function() {
-            var element = this.element;
-            var EVENT_NS = "." + this.cid;
-            var timer;
-            var interval = this.get("interval");
-            var that = this;
-            // start autoplay
-            start();
-            function start() {
-                // 停止之前的
-                stop();
-                // 设置状态
-                that.paused = false;
-                // 开始现在的
-                timer = setInterval(function() {
-                    if (that.paused) return;
-                    that.next();
-                }, interval);
-            }
-            function stop() {
-                if (timer) {
-                    clearInterval(timer);
-                    timer = null;
-                }
-                that.paused = true;
-            }
-            // public api
-            this.stop = stop;
-            this.start = start;
-            // 滚出可视区域后,停止自动播放
-            this._scrollDetect = throttle(function() {
-                that[isInViewport(element) ? "start" : "stop"]();
-            });
-            win.on("scroll" + EVENT_NS, this._scrollDetect);
-            // 鼠标悬停时,停止自动播放
-            this.element.hover(stop, start);
-        },
-        destroy: function() {
-            var EVENT_NS = "." + this.cid;
-            this.stop && this.stop();
-            if (this._scrollDetect) {
-                this._scrollDetect.stop();
-                win.off("scroll" + EVENT_NS);
-            }
-        }
-    };
-    // Helpers
-    // -------
-    function throttle(fn, ms) {
-        ms = ms || 200;
-        var throttleTimer;
-        function f() {
-            f.stop();
-            throttleTimer = setTimeout(fn, ms);
-        }
-        f.stop = function() {
-            if (throttleTimer) {
-                clearTimeout(throttleTimer);
-                throttleTimer = 0;
-            }
-        };
-        return f;
-    }
-    function isInViewport(element) {
-        var scrollTop = win.scrollTop();
-        var scrollBottom = scrollTop + win.height();
-        var elementTop = element.offset().top;
-        var elementBottom = elementTop + element.height();
-        // 只判断垂直位置是否在可视区域,不判断水平。只有要部分区域在可视区域,就返回 true
-        return elementTop < scrollBottom && elementBottom > scrollTop;
-    }
-});
-
-define("arale/switchable/1.0.1/plugins/circular-debug", [ "$-debug", "arale/switchable/1.0.1/plugins/effects-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var Effects = require("arale/switchable/1.0.1/plugins/effects-debug").Effects;
-    // 无缝循环滚动插件
-    module.exports = {
-        // 仅在开启滚动效果时需要
-        isNeeded: function() {
-            var effect = this.get("effect");
-            var circular = this.get("circular");
-            return circular && (effect === SCROLLX || effect === SCROLLY);
-        },
-        install: function() {
-            this._scrollType = this.get("effect");
-            this.set("effect", "scrollCircular");
-        }
-    };
-    Effects.scrollCircular = function(panelInfo) {
-        var toIndex = panelInfo.toIndex;
-        var fromIndex = panelInfo.fromIndex;
-        var isX = this._scrollType === SCROLLX;
-        var prop = isX ? "left" : "top";
-        var viewDiff = this.get("viewSize")[isX ? 0 : 1];
-        var diff = -viewDiff * toIndex;
-        var props = {};
-        props[prop] = diff + "px";
-        // 开始动画
-        if (fromIndex > -1) {
-            // 开始动画前,先停止掉上一动画
-            if (this.anim) {
-                this.anim.stop(false, true);
-            }
-            var len = this.get("length");
-            // scroll 的 0 -> len-1 应该是正常的从 0->1->2->.. len-1 的切换
-            var isBackwardCritical = fromIndex === 0 && toIndex === len - 1;
-            // len-1 -> 0
-            var isForwardCritical = fromIndex === len - 1 && toIndex === 0;
-            var isBackward = this._isBackward === undefined ? toIndex < fromIndex : this._isBackward;
-            // isBackward 使用下面的判断方式, 会在 nav 上 trigger 从 0 -> len-1 切换时,
-            // 不经过 0->1->2->...-> len-1, 而是 0 反向切换到 len-1;
-            // 而上面的判断方式, nav 上的 trigger 切换是正常的, 只有调用 prev 才从 0 反向切换到 len-1;
-            //var isBackward = isBackwardCritical ||
-            //    (!isForwardCritical && toIndex < fromIndex);
-            // 从第一个反向滚动到最后一个 or 从最后一个正向滚动到第一个
-            var isCritical = isBackward && isBackwardCritical || !isBackward && isForwardCritical;
-            // 在临界点时,先调整 panels 位置
-            if (isCritical) {
-                diff = adjustPosition.call(this, isBackward, prop, viewDiff);
-                props[prop] = diff + "px";
-            }
-            var duration = this.get("duration");
-            var easing = this.get("easing");
-            var that = this;
-            this.anim = this.content.animate(props, duration, easing, function() {
-                that.anim = null;
-                // free
-                // 复原位置
-                if (isCritical) {
-                    resetPosition.call(that, isBackward, prop, viewDiff);
-                }
-            });
-        } else {
-            this.content.css(props);
-        }
-    };
-    // 调整位置
-    function adjustPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        var diff = isBackward ? viewDiff : -viewDiff * len;
-        var panelDiff = isBackward ? -viewDiff * len : viewDiff * len;
-        // 调整 panels 到下一个视图中
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "relative");
-        toPanels.css(prop, panelDiff + "px");
-        // 返回偏移量
-        return diff;
-    }
-    // 复原位置
-    function resetPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        // 滚动完成后,复位到正常状态
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "");
-        toPanels.css(prop, "");
-        // 瞬移到正常位置
-        this.content.css(prop, isBackward ? -viewDiff * (len - 1) : "");
-    }
-});

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/carousel.js


+ 0 - 35
2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/package.json

@@ -1,35 +0,0 @@
-{
-    "family": "arale",
-    "name": "switchable",
-    "version": "1.0.1",
-    "description": "Switchable提供了切换的基本操作, 并通过参数配置实现了自动播放, 循环, 切换等操作, 并提供不同的特点封装成了Tabs, Slide, Carousel, Accordion模块. 用户可以根据自己的需求引用不同的模块.",
-    "keywords": ["widget", "tab", "slide", "carousel", "accordion"],
-    "tag": "widget",
-    "homepage": "http://aralejs.org/switchable",
-    "author": "玉伯 <lifesinger@gmail.com>",
-    "maintainers": [
-        "乔花 <shengyan1985@gmail.com>",
-        "康辉 <kangpangpang@gmail.com>"
-    ],
-    "repository": {
-        "type": "git",
-        "url": "https://github.com/aralejs/switchable.git"
-    },
-    "bugs": {
-        "url": "https://github.com/aralejs/switchable/issues"
-    },
-    "spm": {
-        "alias": {
-            "$": "$",
-            "widget": "arale/widget/1.1.1/widget",
-            "easing": "arale/easing/1.0.0/easing"
-        },
-        "output": [
-            "./switchable.js",
-            "./tabs.js",
-            "./slide.js",
-            "./accordion.js",
-            "./carousel.js"
-        ]
-    }
-}

+ 0 - 612
2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/slide-debug.js

@@ -1,612 +0,0 @@
-define("arale/switchable/1.0.1/slide-debug", [ "./switchable-debug", "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "./plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "./plugins/autoplay-debug", "./plugins/circular-debug" ], function(require, exports, module) {
-    var Switchable = require("./switchable-debug");
-    // 卡盘轮播组件
-    module.exports = Switchable.extend({
-        attrs: {
-            autoplay: true,
-            circular: true
-        }
-    });
-});
-
-define("arale/switchable/1.0.1/switchable-debug", [ "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "arale/switchable/1.0.1/plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "arale/switchable/1.0.1/plugins/autoplay-debug", "arale/switchable/1.0.1/plugins/circular-debug" ], function(require, exports, module) {
-    // Switchable
-    // -----------
-    // 可切换组件,核心特征是:有一组可切换的面板(Panel),可通过触点(Trigger)来触发。
-    // 感谢:
-    //  - https://github.com/kissyteam/kissy/tree/6707ecc4cdfddd59e21698c8eb4a50b65dbe7632/src/switchable
-    var $ = require("$-debug");
-    var Widget = require("arale/widget/1.1.1/widget-debug");
-    var Effects = require("arale/switchable/1.0.1/plugins/effects-debug");
-    var Autoplay = require("arale/switchable/1.0.1/plugins/autoplay-debug");
-    var Circular = require("arale/switchable/1.0.1/plugins/circular-debug");
-    var Switchable = Widget.extend({
-        attrs: {
-            // 用户传入的 triggers 和 panels
-            // 可以是 Selector、jQuery 对象、或 DOM 元素集
-            triggers: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            panels: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            classPrefix: "ui-switchable",
-            // 是否包含 triggers,用于没有传入 triggers 时,是否自动生成的判断标准
-            hasTriggers: true,
-            // 触发类型
-            triggerType: "hover",
-            // or 'click'
-            // 触发延迟
-            delay: 100,
-            // 初始切换到哪个面板
-            activeIndex: {
-                value: 0,
-                setter: function(val) {
-                    return parseInt(val) || 0;
-                }
-            },
-            // 一屏内有多少个 panels
-            step: 1,
-            // 有多少屏
-            length: {
-                readOnly: true,
-                getter: function() {
-                    return Math.ceil(this.get("panels").length / this.get("step"));
-                }
-            },
-            // 可见视图区域的大小。一般不需要设定此值,仅当获取值不正确时,用于手工指定大小
-            viewSize: [],
-            activeTriggerClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-active";
-                }
-            }
-        },
-        setup: function() {
-            this._initConstClass();
-            this._initElement();
-            var role = this._getDatasetRole();
-            this._initPanels(role);
-            // 配置中的 triggers > dataset > 自动生成
-            this._initTriggers(role);
-            this._bindTriggers();
-            this._initPlugins();
-            // 渲染默认初始状态
-            this.render();
-        },
-        _initConstClass: function() {
-            this.CONST = constClass(this.get("classPrefix"));
-        },
-        _initElement: function() {
-            this.element.addClass(this.CONST.UI_SWITCHABLE);
-        },
-        // 从 HTML 标记中获取各个 role, 替代原来的 markupType
-        _getDatasetRole: function() {
-            var element = this.element;
-            var role = {};
-            var roles = [ "trigger", "panel", "nav", "content" ];
-            $.each(roles, function(index, key) {
-                var elems = $("[data-role=" + key + "]", element);
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _initPanels: function(role) {
-            var panels = this.get("panels");
-            // 先获取 panels 和 content
-            if (panels.length > 0) {} else if (role.panel) {
-                this.set("panels", panels = role.panel);
-            } else if (role.content) {
-                this.set("panels", panels = role.content.find("> *"));
-                this.content = role.content;
-            }
-            if (panels.length === 0) {
-                throw new Error("panels.length is ZERO");
-            }
-            if (!this.content) {
-                this.content = panels.parent();
-            }
-            this.content.addClass(this.CONST.CONTENT_CLASS);
-            this.get("panels").addClass(this.CONST.PANEL_CLASS);
-        },
-        _initTriggers: function(role) {
-            var triggers = this.get("triggers");
-            // 再获取 triggers 和 nav
-            if (triggers.length > 0) {} else if (role.trigger) {
-                this.set("triggers", triggers = role.trigger);
-            } else if (role.nav) {
-                triggers = role.nav.find("> *");
-                // 空的 nav 标记
-                if (triggers.length === 0) {
-                    triggers = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass"), true).appendTo(role.nav);
-                }
-                this.set("triggers", triggers);
-                this.nav = role.nav;
-            } else if (this.get("hasTriggers")) {
-                this.nav = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass")).appendTo(this.element);
-                this.set("triggers", triggers = this.nav.children());
-            }
-            if (!this.nav && triggers.length) {
-                this.nav = triggers.parent();
-            }
-            this.nav && this.nav.addClass(this.CONST.NAV_CLASS);
-            triggers.addClass(this.CONST.TRIGGER_CLASS).each(function(i, trigger) {
-                $(trigger).data("value", i);
-            });
-        },
-        _bindTriggers: function() {
-            var that = this, triggers = this.get("triggers");
-            if (this.get("triggerType") === "click") {
-                triggers.click(focus);
-            } else {
-                triggers.hover(focus, leave);
-            }
-            function focus(ev) {
-                that._onFocusTrigger(ev.type, $(this).data("value"));
-            }
-            function leave() {
-                clearTimeout(that._switchTimer);
-            }
-        },
-        _onFocusTrigger: function(type, index) {
-            var that = this;
-            // click or tab 键激活时
-            if (type === "click") {
-                this.switchTo(index);
-            } else {
-                this._switchTimer = setTimeout(function() {
-                    that.switchTo(index);
-                }, this.get("delay"));
-            }
-        },
-        _initPlugins: function() {
-            this._plugins = [];
-            this._plug(Effects);
-            this._plug(Autoplay);
-            this._plug(Circular);
-        },
-        // 切换到指定 index
-        switchTo: function(toIndex) {
-            this.set("activeIndex", toIndex);
-        },
-        // change 事件触发的前提是当前值和先前值不一致, 所以无需验证 toIndex !== fromIndex
-        _onRenderActiveIndex: function(toIndex, fromIndex) {
-            this._switchTo(toIndex, fromIndex);
-        },
-        _switchTo: function(toIndex, fromIndex) {
-            this.trigger("switch", toIndex, fromIndex);
-            this._switchTrigger(toIndex, fromIndex);
-            this._switchPanel(this._getPanelInfo(toIndex, fromIndex));
-            this.trigger("switched", toIndex, fromIndex);
-            // 恢复手工向后切换标识
-            this._isBackward = undefined;
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            var triggers = this.get("triggers");
-            if (triggers.length < 1) return;
-            triggers.eq(fromIndex).removeClass(this.get("activeTriggerClass"));
-            triggers.eq(toIndex).addClass(this.get("activeTriggerClass"));
-        },
-        _switchPanel: function(panelInfo) {
-            // 默认是最简单的切换效果:直接隐藏/显示
-            panelInfo.fromPanels.hide();
-            panelInfo.toPanels.show();
-        },
-        _getPanelInfo: function(toIndex, fromIndex) {
-            var panels = this.get("panels").get();
-            var step = this.get("step");
-            var fromPanels, toPanels;
-            // 初始情况下 fromIndex 为 undefined
-            if (fromIndex > -1) {
-                fromPanels = panels.slice(fromIndex * step, (fromIndex + 1) * step);
-            }
-            toPanels = panels.slice(toIndex * step, (toIndex + 1) * step);
-            return {
-                toIndex: toIndex,
-                fromIndex: fromIndex,
-                toPanels: $(toPanels),
-                fromPanels: $(fromPanels)
-            };
-        },
-        // 切换到上一视图
-        prev: function() {
-            //  设置手工向后切换标识, 外部调用 prev 一样
-            this._isBackward = true;
-            var fromIndex = this.get("activeIndex");
-            // 考虑循环切换的情况
-            var index = (fromIndex - 1 + this.get("length")) % this.get("length");
-            this.switchTo(index);
-        },
-        // 切换到下一视图
-        next: function() {
-            this._isBackward = false;
-            var fromIndex = this.get("activeIndex");
-            var index = (fromIndex + 1) % this.get("length");
-            this.switchTo(index);
-        },
-        _plug: function(plugin) {
-            var pluginAttrs = plugin.attrs;
-            if (pluginAttrs) {
-                for (var key in pluginAttrs) {
-                    if (pluginAttrs.hasOwnProperty(key) && // 不覆盖用户传入的配置
-                    !(key in this.attrs)) {
-                        this.set(key, pluginAttrs[key]);
-                    }
-                }
-            }
-            if (!plugin.isNeeded.call(this)) return;
-            if (plugin.install) {
-                plugin.install.call(this);
-            }
-            this._plugins.push(plugin);
-        },
-        destroy: function() {
-            // todo: events
-            var that = this;
-            $.each(this._plugins, function(i, plugin) {
-                if (plugin.destroy) {
-                    plugin.destroy.call(that);
-                }
-            });
-            Switchable.superclass.destroy.call(this);
-        }
-    });
-    module.exports = Switchable;
-    // Helpers
-    // -------
-    function generateTriggersMarkup(length, activeIndex, activeTriggerClass, justChildren) {
-        var nav = $("<ul>");
-        for (var i = 0; i < length; i++) {
-            var className = i === activeIndex ? activeTriggerClass : "";
-            $("<li>", {
-                "class": className,
-                html: i + 1
-            }).appendTo(nav);
-        }
-        return justChildren ? nav.children() : nav;
-    }
-    // 内部默认的 className
-    function constClass(classPrefix) {
-        return {
-            UI_SWITCHABLE: classPrefix || "",
-            NAV_CLASS: classPrefix ? classPrefix + "-nav" : "",
-            CONTENT_CLASS: classPrefix ? classPrefix + "-content" : "",
-            TRIGGER_CLASS: classPrefix ? classPrefix + "-trigger" : "",
-            PANEL_CLASS: classPrefix ? classPrefix + "-panel" : "",
-            PREV_BTN_CLASS: classPrefix ? classPrefix + "-prev-btn" : "",
-            NEXT_BTN_CLASS: classPrefix ? classPrefix + "-next-btn" : ""
-        };
-    }
-});
-
-define("arale/switchable/1.0.1/plugins/effects-debug", [ "$-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    require("arale/easing/1.0.0/easing-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var FADE = "fade";
-    // 切换效果插件
-    module.exports = {
-        attrs: {
-            // 切换效果,可取 scrollx | scrolly | fade 或直接传入 effect function
-            effect: "none",
-            easing: "linear",
-            duration: 500
-        },
-        isNeeded: function() {
-            return this.get("effect") !== "none";
-        },
-        install: function() {
-            var panels = this.get("panels");
-            // 注:
-            // 1. 所有 panel 的尺寸应该相同
-            //    最好指定第一个 panel 的 width 和 height
-            //    因为 Safari 下,图片未加载时,读取的 offsetHeight 等值会不对
-            // 2. 初始化 panels 样式
-            //    这些特效需要将 panels 都显示出来
-            // 3. 在 CSS 里,需要给 container 设定高宽和 overflow: hidden
-            panels.show();
-            var effect = this.get("effect");
-            var step = this.get("step");
-            // 初始化滚动效果
-            if (effect.indexOf("scroll") === 0) {
-                var content = this.content;
-                var firstPanel = panels.eq(0);
-                // 设置定位信息,为滚动效果做铺垫
-                content.css("position", "relative");
-                // 注:content 的父级不一定是 container
-                if (content.parent().css("position") === "static") {
-                    content.parent().css("position", "relative");
-                }
-                // 水平排列
-                if (effect === SCROLLX) {
-                    panels.css("float", "left");
-                    // 设置最大宽度,以保证有空间让 panels 水平排布
-                    // 134217727 为 IE6 下 width 最大数值
-                    content.width("134217726px");
-                }
-                // 只有 scrollX, scrollY 需要设置 viewSize
-                // 其他情况下不需要
-                var viewSize = this.get("viewSize");
-                if (!viewSize[0]) {
-                    viewSize[0] = firstPanel.outerWidth() * step;
-                    viewSize[1] = firstPanel.outerHeight() * step;
-                    this.set("viewSize", viewSize);
-                }
-                if (!viewSize[0]) {
-                    throw new Error("Please specify viewSize manually");
-                }
-            } else if (effect === FADE) {
-                var activeIndex = this.get("activeIndex");
-                var min = activeIndex * step;
-                var max = min + step - 1;
-                panels.each(function(i, panel) {
-                    var isActivePanel = i >= min && i <= max;
-                    $(panel).css({
-                        opacity: isActivePanel ? 1 : 0,
-                        position: "absolute",
-                        zIndex: isActivePanel ? 9 : 1
-                    });
-                });
-            }
-            // 覆盖 switchPanel 方法
-            this._switchPanel = function(panelInfo) {
-                var effect = this.get("effect");
-                var fn = $.isFunction(effect) ? effect : Effects[effect];
-                fn.call(this, panelInfo);
-            };
-        }
-    };
-    // 切换效果方法集
-    var Effects = {
-        // 淡隐淡现效果
-        fade: function(panelInfo) {
-            // 简单起见,目前不支持 step > 1 的情景。若需要此效果时,可修改结构来达成。
-            if (this.get("step") > 1) {
-                throw new Error('Effect "fade" only supports step === 1');
-            }
-            var fromPanel = panelInfo.fromPanels.eq(0);
-            var toPanel = panelInfo.toPanels.eq(0);
-            if (this.anim) {
-                // 立刻停止,以开始新的
-                this.anim.stop(false, true);
-            }
-            // 首先显示下一张
-            toPanel.css("opacity", 1);
-            toPanel.show();
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                // 动画切换
-                this.anim = fromPanel.animate({
-                    opacity: 0
-                }, duration, easing, function() {
-                    that.anim = null;
-                    // free
-                    // 切换 z-index
-                    toPanel.css("zIndex", 9);
-                    fromPanel.css("zIndex", 1);
-                    fromPanel.css("display", "none");
-                });
-            } else {
-                toPanel.css("zIndex", 9);
-            }
-        },
-        // 水平/垂直滚动效果
-        scroll: function(panelInfo) {
-            var isX = this.get("effect") === SCROLLX;
-            var diff = this.get("viewSize")[isX ? 0 : 1] * panelInfo.toIndex;
-            var props = {};
-            props[isX ? "left" : "top"] = -diff + "px";
-            if (this.anim) {
-                this.anim.stop();
-            }
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                this.anim = this.content.animate(props, duration, easing, function() {
-                    that.anim = null;
-                });
-            } else {
-                this.content.css(props);
-            }
-        }
-    };
-    Effects[SCROLLY] = Effects.scroll;
-    Effects[SCROLLX] = Effects.scroll;
-    module.exports.Effects = Effects;
-});
-
-define("arale/switchable/1.0.1/plugins/autoplay-debug", [ "$-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var win = $(window);
-    // 自动播放插件
-    module.exports = {
-        attrs: {
-            autoplay: false,
-            // 自动播放的间隔时间
-            interval: 5e3
-        },
-        isNeeded: function() {
-            return this.get("autoplay");
-        },
-        install: function() {
-            var element = this.element;
-            var EVENT_NS = "." + this.cid;
-            var timer;
-            var interval = this.get("interval");
-            var that = this;
-            // start autoplay
-            start();
-            function start() {
-                // 停止之前的
-                stop();
-                // 设置状态
-                that.paused = false;
-                // 开始现在的
-                timer = setInterval(function() {
-                    if (that.paused) return;
-                    that.next();
-                }, interval);
-            }
-            function stop() {
-                if (timer) {
-                    clearInterval(timer);
-                    timer = null;
-                }
-                that.paused = true;
-            }
-            // public api
-            this.stop = stop;
-            this.start = start;
-            // 滚出可视区域后,停止自动播放
-            this._scrollDetect = throttle(function() {
-                that[isInViewport(element) ? "start" : "stop"]();
-            });
-            win.on("scroll" + EVENT_NS, this._scrollDetect);
-            // 鼠标悬停时,停止自动播放
-            this.element.hover(stop, start);
-        },
-        destroy: function() {
-            var EVENT_NS = "." + this.cid;
-            this.stop && this.stop();
-            if (this._scrollDetect) {
-                this._scrollDetect.stop();
-                win.off("scroll" + EVENT_NS);
-            }
-        }
-    };
-    // Helpers
-    // -------
-    function throttle(fn, ms) {
-        ms = ms || 200;
-        var throttleTimer;
-        function f() {
-            f.stop();
-            throttleTimer = setTimeout(fn, ms);
-        }
-        f.stop = function() {
-            if (throttleTimer) {
-                clearTimeout(throttleTimer);
-                throttleTimer = 0;
-            }
-        };
-        return f;
-    }
-    function isInViewport(element) {
-        var scrollTop = win.scrollTop();
-        var scrollBottom = scrollTop + win.height();
-        var elementTop = element.offset().top;
-        var elementBottom = elementTop + element.height();
-        // 只判断垂直位置是否在可视区域,不判断水平。只有要部分区域在可视区域,就返回 true
-        return elementTop < scrollBottom && elementBottom > scrollTop;
-    }
-});
-
-define("arale/switchable/1.0.1/plugins/circular-debug", [ "$-debug", "arale/switchable/1.0.1/plugins/effects-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var Effects = require("arale/switchable/1.0.1/plugins/effects-debug").Effects;
-    // 无缝循环滚动插件
-    module.exports = {
-        // 仅在开启滚动效果时需要
-        isNeeded: function() {
-            var effect = this.get("effect");
-            var circular = this.get("circular");
-            return circular && (effect === SCROLLX || effect === SCROLLY);
-        },
-        install: function() {
-            this._scrollType = this.get("effect");
-            this.set("effect", "scrollCircular");
-        }
-    };
-    Effects.scrollCircular = function(panelInfo) {
-        var toIndex = panelInfo.toIndex;
-        var fromIndex = panelInfo.fromIndex;
-        var isX = this._scrollType === SCROLLX;
-        var prop = isX ? "left" : "top";
-        var viewDiff = this.get("viewSize")[isX ? 0 : 1];
-        var diff = -viewDiff * toIndex;
-        var props = {};
-        props[prop] = diff + "px";
-        // 开始动画
-        if (fromIndex > -1) {
-            // 开始动画前,先停止掉上一动画
-            if (this.anim) {
-                this.anim.stop(false, true);
-            }
-            var len = this.get("length");
-            // scroll 的 0 -> len-1 应该是正常的从 0->1->2->.. len-1 的切换
-            var isBackwardCritical = fromIndex === 0 && toIndex === len - 1;
-            // len-1 -> 0
-            var isForwardCritical = fromIndex === len - 1 && toIndex === 0;
-            var isBackward = this._isBackward === undefined ? toIndex < fromIndex : this._isBackward;
-            // isBackward 使用下面的判断方式, 会在 nav 上 trigger 从 0 -> len-1 切换时,
-            // 不经过 0->1->2->...-> len-1, 而是 0 反向切换到 len-1;
-            // 而上面的判断方式, nav 上的 trigger 切换是正常的, 只有调用 prev 才从 0 反向切换到 len-1;
-            //var isBackward = isBackwardCritical ||
-            //    (!isForwardCritical && toIndex < fromIndex);
-            // 从第一个反向滚动到最后一个 or 从最后一个正向滚动到第一个
-            var isCritical = isBackward && isBackwardCritical || !isBackward && isForwardCritical;
-            // 在临界点时,先调整 panels 位置
-            if (isCritical) {
-                diff = adjustPosition.call(this, isBackward, prop, viewDiff);
-                props[prop] = diff + "px";
-            }
-            var duration = this.get("duration");
-            var easing = this.get("easing");
-            var that = this;
-            this.anim = this.content.animate(props, duration, easing, function() {
-                that.anim = null;
-                // free
-                // 复原位置
-                if (isCritical) {
-                    resetPosition.call(that, isBackward, prop, viewDiff);
-                }
-            });
-        } else {
-            this.content.css(props);
-        }
-    };
-    // 调整位置
-    function adjustPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        var diff = isBackward ? viewDiff : -viewDiff * len;
-        var panelDiff = isBackward ? -viewDiff * len : viewDiff * len;
-        // 调整 panels 到下一个视图中
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "relative");
-        toPanels.css(prop, panelDiff + "px");
-        // 返回偏移量
-        return diff;
-    }
-    // 复原位置
-    function resetPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        // 滚动完成后,复位到正常状态
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "");
-        toPanels.css(prop, "");
-        // 瞬移到正常位置
-        this.content.css(prop, isBackward ? -viewDiff * (len - 1) : "");
-    }
-});

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/slide.js


+ 0 - 601
2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/switchable-debug.js

@@ -1,601 +0,0 @@
-define("arale/switchable/1.0.1/switchable-debug", [ "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "./plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "./plugins/autoplay-debug", "./plugins/circular-debug" ], function(require, exports, module) {
-    // Switchable
-    // -----------
-    // 可切换组件,核心特征是:有一组可切换的面板(Panel),可通过触点(Trigger)来触发。
-    // 感谢:
-    //  - https://github.com/kissyteam/kissy/tree/6707ecc4cdfddd59e21698c8eb4a50b65dbe7632/src/switchable
-    var $ = require("$-debug");
-    var Widget = require("arale/widget/1.1.1/widget-debug");
-    var Effects = require("./plugins/effects-debug");
-    var Autoplay = require("./plugins/autoplay-debug");
-    var Circular = require("./plugins/circular-debug");
-    var Switchable = Widget.extend({
-        attrs: {
-            // 用户传入的 triggers 和 panels
-            // 可以是 Selector、jQuery 对象、或 DOM 元素集
-            triggers: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            panels: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            classPrefix: "ui-switchable",
-            // 是否包含 triggers,用于没有传入 triggers 时,是否自动生成的判断标准
-            hasTriggers: true,
-            // 触发类型
-            triggerType: "hover",
-            // or 'click'
-            // 触发延迟
-            delay: 100,
-            // 初始切换到哪个面板
-            activeIndex: {
-                value: 0,
-                setter: function(val) {
-                    return parseInt(val) || 0;
-                }
-            },
-            // 一屏内有多少个 panels
-            step: 1,
-            // 有多少屏
-            length: {
-                readOnly: true,
-                getter: function() {
-                    return Math.ceil(this.get("panels").length / this.get("step"));
-                }
-            },
-            // 可见视图区域的大小。一般不需要设定此值,仅当获取值不正确时,用于手工指定大小
-            viewSize: [],
-            activeTriggerClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-active";
-                }
-            }
-        },
-        setup: function() {
-            this._initConstClass();
-            this._initElement();
-            var role = this._getDatasetRole();
-            this._initPanels(role);
-            // 配置中的 triggers > dataset > 自动生成
-            this._initTriggers(role);
-            this._bindTriggers();
-            this._initPlugins();
-            // 渲染默认初始状态
-            this.render();
-        },
-        _initConstClass: function() {
-            this.CONST = constClass(this.get("classPrefix"));
-        },
-        _initElement: function() {
-            this.element.addClass(this.CONST.UI_SWITCHABLE);
-        },
-        // 从 HTML 标记中获取各个 role, 替代原来的 markupType
-        _getDatasetRole: function() {
-            var element = this.element;
-            var role = {};
-            var roles = [ "trigger", "panel", "nav", "content" ];
-            $.each(roles, function(index, key) {
-                var elems = $("[data-role=" + key + "]", element);
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _initPanels: function(role) {
-            var panels = this.get("panels");
-            // 先获取 panels 和 content
-            if (panels.length > 0) {} else if (role.panel) {
-                this.set("panels", panels = role.panel);
-            } else if (role.content) {
-                this.set("panels", panels = role.content.find("> *"));
-                this.content = role.content;
-            }
-            if (panels.length === 0) {
-                throw new Error("panels.length is ZERO");
-            }
-            if (!this.content) {
-                this.content = panels.parent();
-            }
-            this.content.addClass(this.CONST.CONTENT_CLASS);
-            this.get("panels").addClass(this.CONST.PANEL_CLASS);
-        },
-        _initTriggers: function(role) {
-            var triggers = this.get("triggers");
-            // 再获取 triggers 和 nav
-            if (triggers.length > 0) {} else if (role.trigger) {
-                this.set("triggers", triggers = role.trigger);
-            } else if (role.nav) {
-                triggers = role.nav.find("> *");
-                // 空的 nav 标记
-                if (triggers.length === 0) {
-                    triggers = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass"), true).appendTo(role.nav);
-                }
-                this.set("triggers", triggers);
-                this.nav = role.nav;
-            } else if (this.get("hasTriggers")) {
-                this.nav = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass")).appendTo(this.element);
-                this.set("triggers", triggers = this.nav.children());
-            }
-            if (!this.nav && triggers.length) {
-                this.nav = triggers.parent();
-            }
-            this.nav && this.nav.addClass(this.CONST.NAV_CLASS);
-            triggers.addClass(this.CONST.TRIGGER_CLASS).each(function(i, trigger) {
-                $(trigger).data("value", i);
-            });
-        },
-        _bindTriggers: function() {
-            var that = this, triggers = this.get("triggers");
-            if (this.get("triggerType") === "click") {
-                triggers.click(focus);
-            } else {
-                triggers.hover(focus, leave);
-            }
-            function focus(ev) {
-                that._onFocusTrigger(ev.type, $(this).data("value"));
-            }
-            function leave() {
-                clearTimeout(that._switchTimer);
-            }
-        },
-        _onFocusTrigger: function(type, index) {
-            var that = this;
-            // click or tab 键激活时
-            if (type === "click") {
-                this.switchTo(index);
-            } else {
-                this._switchTimer = setTimeout(function() {
-                    that.switchTo(index);
-                }, this.get("delay"));
-            }
-        },
-        _initPlugins: function() {
-            this._plugins = [];
-            this._plug(Effects);
-            this._plug(Autoplay);
-            this._plug(Circular);
-        },
-        // 切换到指定 index
-        switchTo: function(toIndex) {
-            this.set("activeIndex", toIndex);
-        },
-        // change 事件触发的前提是当前值和先前值不一致, 所以无需验证 toIndex !== fromIndex
-        _onRenderActiveIndex: function(toIndex, fromIndex) {
-            this._switchTo(toIndex, fromIndex);
-        },
-        _switchTo: function(toIndex, fromIndex) {
-            this.trigger("switch", toIndex, fromIndex);
-            this._switchTrigger(toIndex, fromIndex);
-            this._switchPanel(this._getPanelInfo(toIndex, fromIndex));
-            this.trigger("switched", toIndex, fromIndex);
-            // 恢复手工向后切换标识
-            this._isBackward = undefined;
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            var triggers = this.get("triggers");
-            if (triggers.length < 1) return;
-            triggers.eq(fromIndex).removeClass(this.get("activeTriggerClass"));
-            triggers.eq(toIndex).addClass(this.get("activeTriggerClass"));
-        },
-        _switchPanel: function(panelInfo) {
-            // 默认是最简单的切换效果:直接隐藏/显示
-            panelInfo.fromPanels.hide();
-            panelInfo.toPanels.show();
-        },
-        _getPanelInfo: function(toIndex, fromIndex) {
-            var panels = this.get("panels").get();
-            var step = this.get("step");
-            var fromPanels, toPanels;
-            // 初始情况下 fromIndex 为 undefined
-            if (fromIndex > -1) {
-                fromPanels = panels.slice(fromIndex * step, (fromIndex + 1) * step);
-            }
-            toPanels = panels.slice(toIndex * step, (toIndex + 1) * step);
-            return {
-                toIndex: toIndex,
-                fromIndex: fromIndex,
-                toPanels: $(toPanels),
-                fromPanels: $(fromPanels)
-            };
-        },
-        // 切换到上一视图
-        prev: function() {
-            //  设置手工向后切换标识, 外部调用 prev 一样
-            this._isBackward = true;
-            var fromIndex = this.get("activeIndex");
-            // 考虑循环切换的情况
-            var index = (fromIndex - 1 + this.get("length")) % this.get("length");
-            this.switchTo(index);
-        },
-        // 切换到下一视图
-        next: function() {
-            this._isBackward = false;
-            var fromIndex = this.get("activeIndex");
-            var index = (fromIndex + 1) % this.get("length");
-            this.switchTo(index);
-        },
-        _plug: function(plugin) {
-            var pluginAttrs = plugin.attrs;
-            if (pluginAttrs) {
-                for (var key in pluginAttrs) {
-                    if (pluginAttrs.hasOwnProperty(key) && // 不覆盖用户传入的配置
-                    !(key in this.attrs)) {
-                        this.set(key, pluginAttrs[key]);
-                    }
-                }
-            }
-            if (!plugin.isNeeded.call(this)) return;
-            if (plugin.install) {
-                plugin.install.call(this);
-            }
-            this._plugins.push(plugin);
-        },
-        destroy: function() {
-            // todo: events
-            var that = this;
-            $.each(this._plugins, function(i, plugin) {
-                if (plugin.destroy) {
-                    plugin.destroy.call(that);
-                }
-            });
-            Switchable.superclass.destroy.call(this);
-        }
-    });
-    module.exports = Switchable;
-    // Helpers
-    // -------
-    function generateTriggersMarkup(length, activeIndex, activeTriggerClass, justChildren) {
-        var nav = $("<ul>");
-        for (var i = 0; i < length; i++) {
-            var className = i === activeIndex ? activeTriggerClass : "";
-            $("<li>", {
-                "class": className,
-                html: i + 1
-            }).appendTo(nav);
-        }
-        return justChildren ? nav.children() : nav;
-    }
-    // 内部默认的 className
-    function constClass(classPrefix) {
-        return {
-            UI_SWITCHABLE: classPrefix || "",
-            NAV_CLASS: classPrefix ? classPrefix + "-nav" : "",
-            CONTENT_CLASS: classPrefix ? classPrefix + "-content" : "",
-            TRIGGER_CLASS: classPrefix ? classPrefix + "-trigger" : "",
-            PANEL_CLASS: classPrefix ? classPrefix + "-panel" : "",
-            PREV_BTN_CLASS: classPrefix ? classPrefix + "-prev-btn" : "",
-            NEXT_BTN_CLASS: classPrefix ? classPrefix + "-next-btn" : ""
-        };
-    }
-});
-
-define("arale/switchable/1.0.1/plugins/effects-debug", [ "$-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    require("arale/easing/1.0.0/easing-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var FADE = "fade";
-    // 切换效果插件
-    module.exports = {
-        attrs: {
-            // 切换效果,可取 scrollx | scrolly | fade 或直接传入 effect function
-            effect: "none",
-            easing: "linear",
-            duration: 500
-        },
-        isNeeded: function() {
-            return this.get("effect") !== "none";
-        },
-        install: function() {
-            var panels = this.get("panels");
-            // 注:
-            // 1. 所有 panel 的尺寸应该相同
-            //    最好指定第一个 panel 的 width 和 height
-            //    因为 Safari 下,图片未加载时,读取的 offsetHeight 等值会不对
-            // 2. 初始化 panels 样式
-            //    这些特效需要将 panels 都显示出来
-            // 3. 在 CSS 里,需要给 container 设定高宽和 overflow: hidden
-            panels.show();
-            var effect = this.get("effect");
-            var step = this.get("step");
-            // 初始化滚动效果
-            if (typeof effect.indexOf == 'function' && effect.indexOf("scroll") === 0) {
-                var content = this.content;
-                var firstPanel = panels.eq(0);
-                // 设置定位信息,为滚动效果做铺垫
-                content.css("position", "relative");
-                // 注:content 的父级不一定是 container
-                if (content.parent().css("position") === "static") {
-                    content.parent().css("position", "relative");
-                }
-                // 水平排列
-                if (effect === SCROLLX) {
-                    panels.css("float", "left");
-                    // 设置最大宽度,以保证有空间让 panels 水平排布
-                    // 134217727 为 IE6 下 width 最大数值
-                    content.width("134217726px");
-                }
-                // 只有 scrollX, scrollY 需要设置 viewSize
-                // 其他情况下不需要
-                var viewSize = this.get("viewSize");
-                if (!viewSize[0]) {
-                    viewSize[0] = firstPanel.outerWidth() * step;
-                    viewSize[1] = firstPanel.outerHeight() * step;
-                    this.set("viewSize", viewSize);
-                }
-                if (!viewSize[0]) {
-                    throw new Error("Please specify viewSize manually");
-                }
-            } else if (effect === FADE) {
-                var activeIndex = this.get("activeIndex");
-                var min = activeIndex * step;
-                var max = min + step - 1;
-                panels.each(function(i, panel) {
-                    var isActivePanel = i >= min && i <= max;
-                    $(panel).css({
-                        opacity: isActivePanel ? 1 : 0,
-                        position: "absolute",
-                        zIndex: isActivePanel ? 9 : 1
-                    });
-                });
-            }
-            // 覆盖 switchPanel 方法
-            this._switchPanel = function(panelInfo) {
-                var effect = this.get("effect");
-                var fn = $.isFunction(effect) ? effect : Effects[effect];
-                fn.call(this, panelInfo);
-            };
-        }
-    };
-    // 切换效果方法集
-    var Effects = {
-        // 淡隐淡现效果
-        fade: function(panelInfo) {
-            // 简单起见,目前不支持 step > 1 的情景。若需要此效果时,可修改结构来达成。
-            if (this.get("step") > 1) {
-                throw new Error('Effect "fade" only supports step === 1');
-            }
-            var fromPanel = panelInfo.fromPanels.eq(0);
-            var toPanel = panelInfo.toPanels.eq(0);
-            if (this.anim) {
-                // 立刻停止,以开始新的
-                this.anim.stop(false, true);
-            }
-            // 首先显示下一张
-            toPanel.css("opacity", 1);
-            toPanel.show();
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                // 动画切换
-                this.anim = fromPanel.animate({
-                    opacity: 0
-                }, duration, easing, function() {
-                    that.anim = null;
-                    // free
-                    // 切换 z-index
-                    toPanel.css("zIndex", 9);
-                    fromPanel.css("zIndex", 1);
-                    fromPanel.css("display", "none");
-                });
-            } else {
-                toPanel.css("zIndex", 9);
-            }
-        },
-        // 水平/垂直滚动效果
-        scroll: function(panelInfo) {
-            var isX = this.get("effect") === SCROLLX;
-            var diff = this.get("viewSize")[isX ? 0 : 1] * panelInfo.toIndex;
-            var props = {};
-            props[isX ? "left" : "top"] = -diff + "px";
-            if (this.anim) {
-                this.anim.stop();
-            }
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                this.anim = this.content.animate(props, duration, easing, function() {
-                    that.anim = null;
-                });
-            } else {
-                this.content.css(props);
-            }
-        }
-    };
-    Effects[SCROLLY] = Effects.scroll;
-    Effects[SCROLLX] = Effects.scroll;
-    module.exports.Effects = Effects;
-});
-
-define("arale/switchable/1.0.1/plugins/autoplay-debug", [ "$-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var win = $(window);
-    // 自动播放插件
-    module.exports = {
-        attrs: {
-            autoplay: false,
-            // 自动播放的间隔时间
-            interval: 5e3
-        },
-        isNeeded: function() {
-            return this.get("autoplay");
-        },
-        install: function() {
-            var element = this.element;
-            var EVENT_NS = "." + this.cid;
-            var timer;
-            var interval = this.get("interval");
-            var that = this;
-            // start autoplay
-            start();
-            function start() {
-                // 停止之前的
-                stop();
-                // 设置状态
-                that.paused = false;
-                // 开始现在的
-                timer = setInterval(function() {
-                    if (that.paused) return;
-                    that.next();
-                }, interval);
-            }
-            function stop() {
-                if (timer) {
-                    clearInterval(timer);
-                    timer = null;
-                }
-                that.paused = true;
-            }
-            // public api
-            this.stop = stop;
-            this.start = start;
-            // 滚出可视区域后,停止自动播放
-            this._scrollDetect = throttle(function() {
-                that[isInViewport(element) ? "start" : "stop"]();
-            });
-            win.on("scroll" + EVENT_NS, this._scrollDetect);
-            // 鼠标悬停时,停止自动播放
-            this.element.hover(stop, start);
-        },
-        destroy: function() {
-            var EVENT_NS = "." + this.cid;
-            this.stop && this.stop();
-            if (this._scrollDetect) {
-                this._scrollDetect.stop();
-                win.off("scroll" + EVENT_NS);
-            }
-        }
-    };
-    // Helpers
-    // -------
-    function throttle(fn, ms) {
-        ms = ms || 200;
-        var throttleTimer;
-        function f() {
-            f.stop();
-            throttleTimer = setTimeout(fn, ms);
-        }
-        f.stop = function() {
-            if (throttleTimer) {
-                clearTimeout(throttleTimer);
-                throttleTimer = 0;
-            }
-        };
-        return f;
-    }
-    function isInViewport(element) {
-        var scrollTop = win.scrollTop();
-        var scrollBottom = scrollTop + win.height();
-        var elementTop = element.offset().top;
-        var elementBottom = elementTop + element.height();
-        // 只判断垂直位置是否在可视区域,不判断水平。只有要部分区域在可视区域,就返回 true
-        return elementTop < scrollBottom && elementBottom > scrollTop;
-    }
-});
-
-define("arale/switchable/1.0.1/plugins/circular-debug", [ "$-debug", "arale/switchable/1.0.1/plugins/effects-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var Effects = require("arale/switchable/1.0.1/plugins/effects-debug").Effects;
-    // 无缝循环滚动插件
-    module.exports = {
-        // 仅在开启滚动效果时需要
-        isNeeded: function() {
-            var effect = this.get("effect");
-            var circular = this.get("circular");
-            return circular && (effect === SCROLLX || effect === SCROLLY);
-        },
-        install: function() {
-            this._scrollType = this.get("effect");
-            this.set("effect", "scrollCircular");
-        }
-    };
-    Effects.scrollCircular = function(panelInfo) {
-        var toIndex = panelInfo.toIndex;
-        var fromIndex = panelInfo.fromIndex;
-        var isX = this._scrollType === SCROLLX;
-        var prop = isX ? "left" : "top";
-        var viewDiff = this.get("viewSize")[isX ? 0 : 1];
-        var diff = -viewDiff * toIndex;
-        var props = {};
-        props[prop] = diff + "px";
-        // 开始动画
-        if (fromIndex > -1) {
-            // 开始动画前,先停止掉上一动画
-            if (this.anim) {
-                this.anim.stop(false, true);
-            }
-            var len = this.get("length");
-            // scroll 的 0 -> len-1 应该是正常的从 0->1->2->.. len-1 的切换
-            var isBackwardCritical = fromIndex === 0 && toIndex === len - 1;
-            // len-1 -> 0
-            var isForwardCritical = fromIndex === len - 1 && toIndex === 0;
-            var isBackward = this._isBackward === undefined ? toIndex < fromIndex : this._isBackward;
-            // isBackward 使用下面的判断方式, 会在 nav 上 trigger 从 0 -> len-1 切换时,
-            // 不经过 0->1->2->...-> len-1, 而是 0 反向切换到 len-1;
-            // 而上面的判断方式, nav 上的 trigger 切换是正常的, 只有调用 prev 才从 0 反向切换到 len-1;
-            //var isBackward = isBackwardCritical ||
-            //    (!isForwardCritical && toIndex < fromIndex);
-            // 从第一个反向滚动到最后一个 or 从最后一个正向滚动到第一个
-            var isCritical = isBackward && isBackwardCritical || !isBackward && isForwardCritical;
-            // 在临界点时,先调整 panels 位置
-            if (isCritical) {
-                diff = adjustPosition.call(this, isBackward, prop, viewDiff);
-                props[prop] = diff + "px";
-            }
-            var duration = this.get("duration");
-            var easing = this.get("easing");
-            var that = this;
-            this.anim = this.content.animate(props, duration, easing, function() {
-                that.anim = null;
-                // free
-                // 复原位置
-                if (isCritical) {
-                    resetPosition.call(that, isBackward, prop, viewDiff);
-                }
-            });
-        } else {
-            this.content.css(props);
-        }
-    };
-    // 调整位置
-    function adjustPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        var diff = isBackward ? viewDiff : -viewDiff * len;
-        var panelDiff = isBackward ? -viewDiff * len : viewDiff * len;
-        // 调整 panels 到下一个视图中
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "relative");
-        toPanels.css(prop, panelDiff + "px");
-        // 返回偏移量
-        return diff;
-    }
-    // 复原位置
-    function resetPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        // 滚动完成后,复位到正常状态
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "");
-        toPanels.css(prop, "");
-        // 瞬移到正常位置
-        this.content.css(prop, isBackward ? -viewDiff * (len - 1) : "");
-    }
-});

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/switchable.js


+ 0 - 607
2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/tabs-debug.js

@@ -1,607 +0,0 @@
-define("arale/switchable/1.0.1/tabs-debug", [ "./switchable-debug", "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "./plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "./plugins/autoplay-debug", "./plugins/circular-debug" ], function(require, exports, module) {
-    var Switchable = require("./switchable-debug");
-    // 展现型标签页组件
-    module.exports = Switchable.extend({});
-});
-
-define("arale/switchable/1.0.1/switchable-debug", [ "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "arale/switchable/1.0.1/plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "arale/switchable/1.0.1/plugins/autoplay-debug", "arale/switchable/1.0.1/plugins/circular-debug" ], function(require, exports, module) {
-    // Switchable
-    // -----------
-    // 可切换组件,核心特征是:有一组可切换的面板(Panel),可通过触点(Trigger)来触发。
-    // 感谢:
-    //  - https://github.com/kissyteam/kissy/tree/6707ecc4cdfddd59e21698c8eb4a50b65dbe7632/src/switchable
-    var $ = require("$-debug");
-    var Widget = require("arale/widget/1.1.1/widget-debug");
-    var Effects = require("arale/switchable/1.0.1/plugins/effects-debug");
-    var Autoplay = require("arale/switchable/1.0.1/plugins/autoplay-debug");
-    var Circular = require("arale/switchable/1.0.1/plugins/circular-debug");
-    var Switchable = Widget.extend({
-        attrs: {
-            // 用户传入的 triggers 和 panels
-            // 可以是 Selector、jQuery 对象、或 DOM 元素集
-            triggers: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            panels: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            classPrefix: "ui-switchable",
-            // 是否包含 triggers,用于没有传入 triggers 时,是否自动生成的判断标准
-            hasTriggers: true,
-            // 触发类型
-            triggerType: "hover",
-            // or 'click'
-            // 触发延迟
-            delay: 100,
-            // 初始切换到哪个面板
-            activeIndex: {
-                value: 0,
-                setter: function(val) {
-                    return parseInt(val) || 0;
-                }
-            },
-            // 一屏内有多少个 panels
-            step: 1,
-            // 有多少屏
-            length: {
-                readOnly: true,
-                getter: function() {
-                    return Math.ceil(this.get("panels").length / this.get("step"));
-                }
-            },
-            // 可见视图区域的大小。一般不需要设定此值,仅当获取值不正确时,用于手工指定大小
-            viewSize: [],
-            activeTriggerClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-active";
-                }
-            }
-        },
-        setup: function() {
-            this._initConstClass();
-            this._initElement();
-            var role = this._getDatasetRole();
-            this._initPanels(role);
-            // 配置中的 triggers > dataset > 自动生成
-            this._initTriggers(role);
-            this._bindTriggers();
-            this._initPlugins();
-            // 渲染默认初始状态
-            this.render();
-        },
-        _initConstClass: function() {
-            this.CONST = constClass(this.get("classPrefix"));
-        },
-        _initElement: function() {
-            this.element.addClass(this.CONST.UI_SWITCHABLE);
-        },
-        // 从 HTML 标记中获取各个 role, 替代原来的 markupType
-        _getDatasetRole: function() {
-            var element = this.element;
-            var role = {};
-            var roles = [ "trigger", "panel", "nav", "content" ];
-            $.each(roles, function(index, key) {
-                var elems = $("[data-role=" + key + "]", element);
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _initPanels: function(role) {
-            var panels = this.get("panels");
-            // 先获取 panels 和 content
-            if (panels.length > 0) {} else if (role.panel) {
-                this.set("panels", panels = role.panel);
-            } else if (role.content) {
-                this.set("panels", panels = role.content.find("> *"));
-                this.content = role.content;
-            }
-            if (panels.length === 0) {
-                throw new Error("panels.length is ZERO");
-            }
-            if (!this.content) {
-                this.content = panels.parent();
-            }
-            this.content.addClass(this.CONST.CONTENT_CLASS);
-            this.get("panels").addClass(this.CONST.PANEL_CLASS);
-        },
-        _initTriggers: function(role) {
-            var triggers = this.get("triggers");
-            // 再获取 triggers 和 nav
-            if (triggers.length > 0) {} else if (role.trigger) {
-                this.set("triggers", triggers = role.trigger);
-            } else if (role.nav) {
-                triggers = role.nav.find("> *");
-                // 空的 nav 标记
-                if (triggers.length === 0) {
-                    triggers = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass"), true).appendTo(role.nav);
-                }
-                this.set("triggers", triggers);
-                this.nav = role.nav;
-            } else if (this.get("hasTriggers")) {
-                this.nav = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass")).appendTo(this.element);
-                this.set("triggers", triggers = this.nav.children());
-            }
-            if (!this.nav && triggers.length) {
-                this.nav = triggers.parent();
-            }
-            this.nav && this.nav.addClass(this.CONST.NAV_CLASS);
-            triggers.addClass(this.CONST.TRIGGER_CLASS).each(function(i, trigger) {
-                $(trigger).data("value", i);
-            });
-        },
-        _bindTriggers: function() {
-            var that = this, triggers = this.get("triggers");
-            if (this.get("triggerType") === "click") {
-                triggers.click(focus);
-            } else {
-                triggers.hover(focus, leave);
-            }
-            function focus(ev) {
-                that._onFocusTrigger(ev.type, $(this).data("value"));
-            }
-            function leave() {
-                clearTimeout(that._switchTimer);
-            }
-        },
-        _onFocusTrigger: function(type, index) {
-            var that = this;
-            // click or tab 键激活时
-            if (type === "click") {
-                this.switchTo(index);
-            } else {
-                this._switchTimer = setTimeout(function() {
-                    that.switchTo(index);
-                }, this.get("delay"));
-            }
-        },
-        _initPlugins: function() {
-            this._plugins = [];
-            this._plug(Effects);
-            this._plug(Autoplay);
-            this._plug(Circular);
-        },
-        // 切换到指定 index
-        switchTo: function(toIndex) {
-            this.set("activeIndex", toIndex);
-        },
-        // change 事件触发的前提是当前值和先前值不一致, 所以无需验证 toIndex !== fromIndex
-        _onRenderActiveIndex: function(toIndex, fromIndex) {
-            this._switchTo(toIndex, fromIndex);
-        },
-        _switchTo: function(toIndex, fromIndex) {
-            this.trigger("switch", toIndex, fromIndex);
-            this._switchTrigger(toIndex, fromIndex);
-            this._switchPanel(this._getPanelInfo(toIndex, fromIndex));
-            this.trigger("switched", toIndex, fromIndex);
-            // 恢复手工向后切换标识
-            this._isBackward = undefined;
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            var triggers = this.get("triggers");
-            if (triggers.length < 1) return;
-            triggers.eq(fromIndex).removeClass(this.get("activeTriggerClass"));
-            triggers.eq(toIndex).addClass(this.get("activeTriggerClass"));
-        },
-        _switchPanel: function(panelInfo) {
-            // 默认是最简单的切换效果:直接隐藏/显示
-            panelInfo.fromPanels.hide();
-            panelInfo.toPanels.show();
-        },
-        _getPanelInfo: function(toIndex, fromIndex) {
-            var panels = this.get("panels").get();
-            var step = this.get("step");
-            var fromPanels, toPanels;
-            // 初始情况下 fromIndex 为 undefined
-            if (fromIndex > -1) {
-                fromPanels = panels.slice(fromIndex * step, (fromIndex + 1) * step);
-            }
-            toPanels = panels.slice(toIndex * step, (toIndex + 1) * step);
-            return {
-                toIndex: toIndex,
-                fromIndex: fromIndex,
-                toPanels: $(toPanels),
-                fromPanels: $(fromPanels)
-            };
-        },
-        // 切换到上一视图
-        prev: function() {
-            //  设置手工向后切换标识, 外部调用 prev 一样
-            this._isBackward = true;
-            var fromIndex = this.get("activeIndex");
-            // 考虑循环切换的情况
-            var index = (fromIndex - 1 + this.get("length")) % this.get("length");
-            this.switchTo(index);
-        },
-        // 切换到下一视图
-        next: function() {
-            this._isBackward = false;
-            var fromIndex = this.get("activeIndex");
-            var index = (fromIndex + 1) % this.get("length");
-            this.switchTo(index);
-        },
-        _plug: function(plugin) {
-            var pluginAttrs = plugin.attrs;
-            if (pluginAttrs) {
-                for (var key in pluginAttrs) {
-                    if (pluginAttrs.hasOwnProperty(key) && // 不覆盖用户传入的配置
-                    !(key in this.attrs)) {
-                        this.set(key, pluginAttrs[key]);
-                    }
-                }
-            }
-            if (!plugin.isNeeded.call(this)) return;
-            if (plugin.install) {
-                plugin.install.call(this);
-            }
-            this._plugins.push(plugin);
-        },
-        destroy: function() {
-            // todo: events
-            var that = this;
-            $.each(this._plugins, function(i, plugin) {
-                if (plugin.destroy) {
-                    plugin.destroy.call(that);
-                }
-            });
-            Switchable.superclass.destroy.call(this);
-        }
-    });
-    module.exports = Switchable;
-    // Helpers
-    // -------
-    function generateTriggersMarkup(length, activeIndex, activeTriggerClass, justChildren) {
-        var nav = $("<ul>");
-        for (var i = 0; i < length; i++) {
-            var className = i === activeIndex ? activeTriggerClass : "";
-            $("<li>", {
-                "class": className,
-                html: i + 1
-            }).appendTo(nav);
-        }
-        return justChildren ? nav.children() : nav;
-    }
-    // 内部默认的 className
-    function constClass(classPrefix) {
-        return {
-            UI_SWITCHABLE: classPrefix || "",
-            NAV_CLASS: classPrefix ? classPrefix + "-nav" : "",
-            CONTENT_CLASS: classPrefix ? classPrefix + "-content" : "",
-            TRIGGER_CLASS: classPrefix ? classPrefix + "-trigger" : "",
-            PANEL_CLASS: classPrefix ? classPrefix + "-panel" : "",
-            PREV_BTN_CLASS: classPrefix ? classPrefix + "-prev-btn" : "",
-            NEXT_BTN_CLASS: classPrefix ? classPrefix + "-next-btn" : ""
-        };
-    }
-});
-
-define("arale/switchable/1.0.1/plugins/effects-debug", [ "$-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    require("arale/easing/1.0.0/easing-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var FADE = "fade";
-    // 切换效果插件
-    module.exports = {
-        attrs: {
-            // 切换效果,可取 scrollx | scrolly | fade 或直接传入 effect function
-            effect: "none",
-            easing: "linear",
-            duration: 500
-        },
-        isNeeded: function() {
-            return this.get("effect") !== "none";
-        },
-        install: function() {
-            var panels = this.get("panels");
-            // 注:
-            // 1. 所有 panel 的尺寸应该相同
-            //    最好指定第一个 panel 的 width 和 height
-            //    因为 Safari 下,图片未加载时,读取的 offsetHeight 等值会不对
-            // 2. 初始化 panels 样式
-            //    这些特效需要将 panels 都显示出来
-            // 3. 在 CSS 里,需要给 container 设定高宽和 overflow: hidden
-            panels.show();
-            var effect = this.get("effect");
-            var step = this.get("step");
-            // 初始化滚动效果
-            if (effect.indexOf("scroll") === 0) {
-                var content = this.content;
-                var firstPanel = panels.eq(0);
-                // 设置定位信息,为滚动效果做铺垫
-                content.css("position", "relative");
-                // 注:content 的父级不一定是 container
-                if (content.parent().css("position") === "static") {
-                    content.parent().css("position", "relative");
-                }
-                // 水平排列
-                if (effect === SCROLLX) {
-                    panels.css("float", "left");
-                    // 设置最大宽度,以保证有空间让 panels 水平排布
-                    // 134217727 为 IE6 下 width 最大数值
-                    content.width("134217726px");
-                }
-                // 只有 scrollX, scrollY 需要设置 viewSize
-                // 其他情况下不需要
-                var viewSize = this.get("viewSize");
-                if (!viewSize[0]) {
-                    viewSize[0] = firstPanel.outerWidth() * step;
-                    viewSize[1] = firstPanel.outerHeight() * step;
-                    this.set("viewSize", viewSize);
-                }
-                if (!viewSize[0]) {
-                    throw new Error("Please specify viewSize manually");
-                }
-            } else if (effect === FADE) {
-                var activeIndex = this.get("activeIndex");
-                var min = activeIndex * step;
-                var max = min + step - 1;
-                panels.each(function(i, panel) {
-                    var isActivePanel = i >= min && i <= max;
-                    $(panel).css({
-                        opacity: isActivePanel ? 1 : 0,
-                        position: "absolute",
-                        zIndex: isActivePanel ? 9 : 1
-                    });
-                });
-            }
-            // 覆盖 switchPanel 方法
-            this._switchPanel = function(panelInfo) {
-                var effect = this.get("effect");
-                var fn = $.isFunction(effect) ? effect : Effects[effect];
-                fn.call(this, panelInfo);
-            };
-        }
-    };
-    // 切换效果方法集
-    var Effects = {
-        // 淡隐淡现效果
-        fade: function(panelInfo) {
-            // 简单起见,目前不支持 step > 1 的情景。若需要此效果时,可修改结构来达成。
-            if (this.get("step") > 1) {
-                throw new Error('Effect "fade" only supports step === 1');
-            }
-            var fromPanel = panelInfo.fromPanels.eq(0);
-            var toPanel = panelInfo.toPanels.eq(0);
-            if (this.anim) {
-                // 立刻停止,以开始新的
-                this.anim.stop(false, true);
-            }
-            // 首先显示下一张
-            toPanel.css("opacity", 1);
-            toPanel.show();
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                // 动画切换
-                this.anim = fromPanel.animate({
-                    opacity: 0
-                }, duration, easing, function() {
-                    that.anim = null;
-                    // free
-                    // 切换 z-index
-                    toPanel.css("zIndex", 9);
-                    fromPanel.css("zIndex", 1);
-                    fromPanel.css("display", "none");
-                });
-            } else {
-                toPanel.css("zIndex", 9);
-            }
-        },
-        // 水平/垂直滚动效果
-        scroll: function(panelInfo) {
-            var isX = this.get("effect") === SCROLLX;
-            var diff = this.get("viewSize")[isX ? 0 : 1] * panelInfo.toIndex;
-            var props = {};
-            props[isX ? "left" : "top"] = -diff + "px";
-            if (this.anim) {
-                this.anim.stop();
-            }
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                this.anim = this.content.animate(props, duration, easing, function() {
-                    that.anim = null;
-                });
-            } else {
-                this.content.css(props);
-            }
-        }
-    };
-    Effects[SCROLLY] = Effects.scroll;
-    Effects[SCROLLX] = Effects.scroll;
-    module.exports.Effects = Effects;
-});
-
-define("arale/switchable/1.0.1/plugins/autoplay-debug", [ "$-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var win = $(window);
-    // 自动播放插件
-    module.exports = {
-        attrs: {
-            autoplay: false,
-            // 自动播放的间隔时间
-            interval: 5e3
-        },
-        isNeeded: function() {
-            return this.get("autoplay");
-        },
-        install: function() {
-            var element = this.element;
-            var EVENT_NS = "." + this.cid;
-            var timer;
-            var interval = this.get("interval");
-            var that = this;
-            // start autoplay
-            start();
-            function start() {
-                // 停止之前的
-                stop();
-                // 设置状态
-                that.paused = false;
-                // 开始现在的
-                timer = setInterval(function() {
-                    if (that.paused) return;
-                    that.next();
-                }, interval);
-            }
-            function stop() {
-                if (timer) {
-                    clearInterval(timer);
-                    timer = null;
-                }
-                that.paused = true;
-            }
-            // public api
-            this.stop = stop;
-            this.start = start;
-            // 滚出可视区域后,停止自动播放
-            this._scrollDetect = throttle(function() {
-                that[isInViewport(element) ? "start" : "stop"]();
-            });
-            win.on("scroll" + EVENT_NS, this._scrollDetect);
-            // 鼠标悬停时,停止自动播放
-            this.element.hover(stop, start);
-        },
-        destroy: function() {
-            var EVENT_NS = "." + this.cid;
-            this.stop && this.stop();
-            if (this._scrollDetect) {
-                this._scrollDetect.stop();
-                win.off("scroll" + EVENT_NS);
-            }
-        }
-    };
-    // Helpers
-    // -------
-    function throttle(fn, ms) {
-        ms = ms || 200;
-        var throttleTimer;
-        function f() {
-            f.stop();
-            throttleTimer = setTimeout(fn, ms);
-        }
-        f.stop = function() {
-            if (throttleTimer) {
-                clearTimeout(throttleTimer);
-                throttleTimer = 0;
-            }
-        };
-        return f;
-    }
-    function isInViewport(element) {
-        var scrollTop = win.scrollTop();
-        var scrollBottom = scrollTop + win.height();
-        var elementTop = element.offset().top;
-        var elementBottom = elementTop + element.height();
-        // 只判断垂直位置是否在可视区域,不判断水平。只有要部分区域在可视区域,就返回 true
-        return elementTop < scrollBottom && elementBottom > scrollTop;
-    }
-});
-
-define("arale/switchable/1.0.1/plugins/circular-debug", [ "$-debug", "arale/switchable/1.0.1/plugins/effects-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var Effects = require("arale/switchable/1.0.1/plugins/effects-debug").Effects;
-    // 无缝循环滚动插件
-    module.exports = {
-        // 仅在开启滚动效果时需要
-        isNeeded: function() {
-            var effect = this.get("effect");
-            var circular = this.get("circular");
-            return circular && (effect === SCROLLX || effect === SCROLLY);
-        },
-        install: function() {
-            this._scrollType = this.get("effect");
-            this.set("effect", "scrollCircular");
-        }
-    };
-    Effects.scrollCircular = function(panelInfo) {
-        var toIndex = panelInfo.toIndex;
-        var fromIndex = panelInfo.fromIndex;
-        var isX = this._scrollType === SCROLLX;
-        var prop = isX ? "left" : "top";
-        var viewDiff = this.get("viewSize")[isX ? 0 : 1];
-        var diff = -viewDiff * toIndex;
-        var props = {};
-        props[prop] = diff + "px";
-        // 开始动画
-        if (fromIndex > -1) {
-            // 开始动画前,先停止掉上一动画
-            if (this.anim) {
-                this.anim.stop(false, true);
-            }
-            var len = this.get("length");
-            // scroll 的 0 -> len-1 应该是正常的从 0->1->2->.. len-1 的切换
-            var isBackwardCritical = fromIndex === 0 && toIndex === len - 1;
-            // len-1 -> 0
-            var isForwardCritical = fromIndex === len - 1 && toIndex === 0;
-            var isBackward = this._isBackward === undefined ? toIndex < fromIndex : this._isBackward;
-            // isBackward 使用下面的判断方式, 会在 nav 上 trigger 从 0 -> len-1 切换时,
-            // 不经过 0->1->2->...-> len-1, 而是 0 反向切换到 len-1;
-            // 而上面的判断方式, nav 上的 trigger 切换是正常的, 只有调用 prev 才从 0 反向切换到 len-1;
-            //var isBackward = isBackwardCritical ||
-            //    (!isForwardCritical && toIndex < fromIndex);
-            // 从第一个反向滚动到最后一个 or 从最后一个正向滚动到第一个
-            var isCritical = isBackward && isBackwardCritical || !isBackward && isForwardCritical;
-            // 在临界点时,先调整 panels 位置
-            if (isCritical) {
-                diff = adjustPosition.call(this, isBackward, prop, viewDiff);
-                props[prop] = diff + "px";
-            }
-            var duration = this.get("duration");
-            var easing = this.get("easing");
-            var that = this;
-            this.anim = this.content.animate(props, duration, easing, function() {
-                that.anim = null;
-                // free
-                // 复原位置
-                if (isCritical) {
-                    resetPosition.call(that, isBackward, prop, viewDiff);
-                }
-            });
-        } else {
-            this.content.css(props);
-        }
-    };
-    // 调整位置
-    function adjustPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        var diff = isBackward ? viewDiff : -viewDiff * len;
-        var panelDiff = isBackward ? -viewDiff * len : viewDiff * len;
-        // 调整 panels 到下一个视图中
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "relative");
-        toPanels.css(prop, panelDiff + "px");
-        // 返回偏移量
-        return diff;
-    }
-    // 复原位置
-    function resetPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        // 滚动完成后,复位到正常状态
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "");
-        toPanels.css(prop, "");
-        // 瞬移到正常位置
-        this.content.css(prop, isBackward ? -viewDiff * (len - 1) : "");
-    }
-});

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/switchable/1.0.1/tabs.js


+ 0 - 637
2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/accordion-debug.js

@@ -1,637 +0,0 @@
-define("arale/switchable/1.0.2/accordion-debug", [ "./switchable-debug", "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "./plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "./plugins/autoplay-debug", "./plugins/circular-debug" ], function(require, exports, module) {
-    var Switchable = require("./switchable-debug");
-    // 手风琴组件
-    var Accordion = Switchable.extend({
-        attrs: {
-            triggerType: "click",
-            // 是否运行展开多个
-            multiple: false,
-            autoplay: false
-        },
-        switchTo: function(toIndex) {
-            if (this.get("multiple")) {
-                this._switchTo(toIndex, toIndex);
-            } else {
-                Switchable.prototype.switchTo.call(this, toIndex);
-            }
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            if (this.get("multiple")) {
-                this.get("triggers").eq(toIndex).toggleClass(this.get("activeTriggerClass"));
-            } else {
-                Switchable.prototype._switchTrigger.call(this, toIndex, fromIndex);
-            }
-        },
-        _switchPanel: function(panelInfo) {
-            if (this.get("multiple")) {
-                panelInfo.toPanels.toggle();
-            } else {
-                Switchable.prototype._switchPanel.call(this, panelInfo);
-            }
-        }
-    });
-    module.exports = Accordion;
-});
-
-define("arale/switchable/1.0.2/switchable-debug", [ "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "arale/switchable/1.0.2/plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "arale/switchable/1.0.2/plugins/autoplay-debug", "arale/switchable/1.0.2/plugins/circular-debug" ], function(require, exports, module) {
-    // Switchable
-    // -----------
-    // 可切换组件,核心特征是:有一组可切换的面板(Panel),可通过触点(Trigger)来触发。
-    // 感谢:
-    //  - https://github.com/kissyteam/kissy/tree/6707ecc4cdfddd59e21698c8eb4a50b65dbe7632/src/switchable
-    var $ = require("$-debug");
-    var Widget = require("arale/widget/1.1.1/widget-debug");
-    var Effects = require("arale/switchable/1.0.2/plugins/effects-debug");
-    var Autoplay = require("arale/switchable/1.0.2/plugins/autoplay-debug");
-    var Circular = require("arale/switchable/1.0.2/plugins/circular-debug");
-    var Switchable = Widget.extend({
-        attrs: {
-            // 用户传入的 triggers 和 panels
-            // 可以是 Selector、jQuery 对象、或 DOM 元素集
-            triggers: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            panels: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            classPrefix: "ui-switchable",
-            // 是否包含 triggers,用于没有传入 triggers 时,是否自动生成的判断标准
-            hasTriggers: true,
-            // 触发类型
-            triggerType: "hover",
-            // or 'click'
-            // 触发延迟
-            delay: 100,
-            // 初始切换到哪个面板
-            activeIndex: {
-                value: 0,
-                setter: function(val) {
-                    return parseInt(val) || 0;
-                }
-            },
-            // 一屏内有多少个 panels
-            step: 1,
-            // 有多少屏
-            length: {
-                readOnly: true,
-                getter: function() {
-                    return Math.ceil(this.get("panels").length / this.get("step"));
-                }
-            },
-            // 可见视图区域的大小。一般不需要设定此值,仅当获取值不正确时,用于手工指定大小
-            viewSize: [],
-            activeTriggerClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-active";
-                }
-            }
-        },
-        setup: function() {
-            this._initConstClass();
-            this._initElement();
-            var role = this._getDatasetRole();
-            this._initPanels(role);
-            // 配置中的 triggers > dataset > 自动生成
-            this._initTriggers(role);
-            this._bindTriggers();
-            this._initPlugins();
-            // 渲染默认初始状态
-            this.render();
-        },
-        _initConstClass: function() {
-            this.CONST = constClass(this.get("classPrefix"));
-        },
-        _initElement: function() {
-            this.element.addClass(this.CONST.UI_SWITCHABLE);
-        },
-        // 从 HTML 标记中获取各个 role, 替代原来的 markupType
-        _getDatasetRole: function() {
-            var self = this;
-            var role = {};
-            var roles = [ "trigger", "panel", "nav", "content" ];
-            $.each(roles, function(index, key) {
-                var elems = self.$("[data-switchable-role=" + key + "]");
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _initPanels: function(role) {
-            var panels = this.get("panels");
-            // 先获取 panels 和 content
-            if (panels.length > 0) {} else if (role.panel) {
-                this.set("panels", panels = role.panel);
-            } else if (role.content) {
-                this.set("panels", panels = role.content.find("> *"));
-                this.content = role.content;
-            }
-            if (panels.length === 0) {
-                throw new Error("panels.length is ZERO");
-            }
-            if (!this.content) {
-                this.content = panels.parent();
-            }
-            this.content.addClass(this.CONST.CONTENT_CLASS);
-            this.get("panels").addClass(this.CONST.PANEL_CLASS);
-        },
-        _initTriggers: function(role) {
-            var triggers = this.get("triggers");
-            // 再获取 triggers 和 nav
-            if (triggers.length > 0) {} else if (role.trigger) {
-                this.set("triggers", triggers = role.trigger);
-            } else if (role.nav) {
-                triggers = role.nav.find("> *");
-                // 空的 nav 标记
-                if (triggers.length === 0) {
-                    triggers = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass"), true).appendTo(role.nav);
-                }
-                this.set("triggers", triggers);
-                this.nav = role.nav;
-            } else if (this.get("hasTriggers")) {
-                this.nav = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass")).appendTo(this.element);
-                this.set("triggers", triggers = this.nav.children());
-            }
-            if (!this.nav && triggers.length) {
-                this.nav = triggers.parent();
-            }
-            this.nav && this.nav.addClass(this.CONST.NAV_CLASS);
-            triggers.addClass(this.CONST.TRIGGER_CLASS).each(function(i, trigger) {
-                $(trigger).data("value", i);
-            });
-        },
-        _bindTriggers: function() {
-            var that = this, triggers = this.get("triggers");
-            if (this.get("triggerType") === "click") {
-                triggers.click(focus);
-            } else {
-                triggers.hover(focus, leave);
-            }
-            function focus(ev) {
-                that._onFocusTrigger(ev.type, $(this).data("value"));
-            }
-            function leave() {
-                clearTimeout(that._switchTimer);
-            }
-        },
-        _onFocusTrigger: function(type, index) {
-            var that = this;
-            // click or tab 键激活时
-            if (type === "click") {
-                this.switchTo(index);
-            } else {
-                this._switchTimer = setTimeout(function() {
-                    that.switchTo(index);
-                }, this.get("delay"));
-            }
-        },
-        _initPlugins: function() {
-            this._plugins = [];
-            this._plug(Effects);
-            this._plug(Autoplay);
-            this._plug(Circular);
-        },
-        // 切换到指定 index
-        switchTo: function(toIndex) {
-            this.set("activeIndex", toIndex);
-        },
-        // change 事件触发的前提是当前值和先前值不一致, 所以无需验证 toIndex !== fromIndex
-        _onRenderActiveIndex: function(toIndex, fromIndex) {
-            this._switchTo(toIndex, fromIndex);
-        },
-        _switchTo: function(toIndex, fromIndex) {
-            this.trigger("switch", toIndex, fromIndex);
-            this._switchTrigger(toIndex, fromIndex);
-            this._switchPanel(this._getPanelInfo(toIndex, fromIndex));
-            this.trigger("switched", toIndex, fromIndex);
-            // 恢复手工向后切换标识
-            this._isBackward = undefined;
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            var triggers = this.get("triggers");
-            if (triggers.length < 1) return;
-            triggers.eq(fromIndex).removeClass(this.get("activeTriggerClass"));
-            triggers.eq(toIndex).addClass(this.get("activeTriggerClass"));
-        },
-        _switchPanel: function(panelInfo) {
-            // 默认是最简单的切换效果:直接隐藏/显示
-            panelInfo.fromPanels.hide();
-            panelInfo.toPanels.show();
-        },
-        _getPanelInfo: function(toIndex, fromIndex) {
-            var panels = this.get("panels").get();
-            var step = this.get("step");
-            var fromPanels, toPanels;
-            // 初始情况下 fromIndex 为 undefined
-            if (fromIndex > -1) {
-                fromPanels = panels.slice(fromIndex * step, (fromIndex + 1) * step);
-            }
-            toPanels = panels.slice(toIndex * step, (toIndex + 1) * step);
-            return {
-                toIndex: toIndex,
-                fromIndex: fromIndex,
-                toPanels: $(toPanels),
-                fromPanels: $(fromPanels)
-            };
-        },
-        // 切换到上一视图
-        prev: function() {
-            //  设置手工向后切换标识, 外部调用 prev 一样
-            this._isBackward = true;
-            var fromIndex = this.get("activeIndex");
-            // 考虑循环切换的情况
-            var index = (fromIndex - 1 + this.get("length")) % this.get("length");
-            this.switchTo(index);
-        },
-        // 切换到下一视图
-        next: function() {
-            this._isBackward = false;
-            var fromIndex = this.get("activeIndex");
-            var index = (fromIndex + 1) % this.get("length");
-            this.switchTo(index);
-        },
-        _plug: function(plugin) {
-            var pluginAttrs = plugin.attrs;
-            if (pluginAttrs) {
-                for (var key in pluginAttrs) {
-                    if (pluginAttrs.hasOwnProperty(key) && // 不覆盖用户传入的配置
-                    !(key in this.attrs)) {
-                        this.set(key, pluginAttrs[key]);
-                    }
-                }
-            }
-            if (!plugin.isNeeded.call(this)) return;
-            if (plugin.install) {
-                plugin.install.call(this);
-            }
-            this._plugins.push(plugin);
-        },
-        destroy: function() {
-            // todo: events
-            var that = this;
-            $.each(this._plugins, function(i, plugin) {
-                if (plugin.destroy) {
-                    plugin.destroy.call(that);
-                }
-            });
-            Switchable.superclass.destroy.call(this);
-        }
-    });
-    module.exports = Switchable;
-    // Helpers
-    // -------
-    function generateTriggersMarkup(length, activeIndex, activeTriggerClass, justChildren) {
-        var nav = $("<ul>");
-        for (var i = 0; i < length; i++) {
-            var className = i === activeIndex ? activeTriggerClass : "";
-            $("<li>", {
-                "class": className,
-                html: i + 1
-            }).appendTo(nav);
-        }
-        return justChildren ? nav.children() : nav;
-    }
-    // 内部默认的 className
-    function constClass(classPrefix) {
-        return {
-            UI_SWITCHABLE: classPrefix || "",
-            NAV_CLASS: classPrefix ? classPrefix + "-nav" : "",
-            CONTENT_CLASS: classPrefix ? classPrefix + "-content" : "",
-            TRIGGER_CLASS: classPrefix ? classPrefix + "-trigger" : "",
-            PANEL_CLASS: classPrefix ? classPrefix + "-panel" : "",
-            PREV_BTN_CLASS: classPrefix ? classPrefix + "-prev-btn" : "",
-            NEXT_BTN_CLASS: classPrefix ? classPrefix + "-next-btn" : ""
-        };
-    }
-});
-
-define("arale/switchable/1.0.2/plugins/effects-debug", [ "$-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    require("arale/easing/1.0.0/easing-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var FADE = "fade";
-    // 切换效果插件
-    module.exports = {
-        attrs: {
-            // 切换效果,可取 scrollx | scrolly | fade 或直接传入 effect function
-            effect: "none",
-            easing: "linear",
-            duration: 500
-        },
-        isNeeded: function() {
-            return this.get("effect") !== "none";
-        },
-        install: function() {
-            var panels = this.get("panels");
-            // 注:
-            // 1. 所有 panel 的尺寸应该相同
-            //    最好指定第一个 panel 的 width 和 height
-            //    因为 Safari 下,图片未加载时,读取的 offsetHeight 等值会不对
-            // 2. 初始化 panels 样式
-            //    这些特效需要将 panels 都显示出来
-            // 3. 在 CSS 里,需要给 container 设定高宽和 overflow: hidden
-            panels.show();
-            var effect = this.get("effect");
-            var step = this.get("step");
-            var isFunction = $.isFunction(effect);
-            // 初始化滚动效果
-            if (!isFunction && effect.indexOf("scroll") === 0) {
-                var content = this.content;
-                var firstPanel = panels.eq(0);
-                // 设置定位信息,为滚动效果做铺垫
-                content.css("position", "relative");
-                // 注:content 的父级不一定是 container
-                if (content.parent().css("position") === "static") {
-                    content.parent().css("position", "relative");
-                }
-                // 水平排列
-                if (effect === SCROLLX) {
-                    panels.css("float", "left");
-                    // 设置最大宽度,以保证有空间让 panels 水平排布
-                    // 35791197px 为 360 下 width 最大数值
-                    content.width("35791197px");
-                }
-                // 只有 scrollX, scrollY 需要设置 viewSize
-                // 其他情况下不需要
-                var viewSize = this.get("viewSize");
-                if (!viewSize[0]) {
-                    viewSize[0] = firstPanel.outerWidth() * step;
-                    viewSize[1] = firstPanel.outerHeight() * step;
-                    this.set("viewSize", viewSize);
-                }
-                if (!viewSize[0]) {
-                    throw new Error("Please specify viewSize manually");
-                }
-            } else if (!isFunction && effect === FADE) {
-                var activeIndex = this.get("activeIndex");
-                var min = activeIndex * step;
-                var max = min + step - 1;
-                panels.each(function(i, panel) {
-                    var isActivePanel = i >= min && i <= max;
-                    $(panel).css({
-                        opacity: isActivePanel ? 1 : 0,
-                        position: "absolute",
-                        zIndex: isActivePanel ? 9 : 1
-                    });
-                });
-            }
-            // 覆盖 switchPanel 方法
-            this._switchPanel = function(panelInfo) {
-                var effect = this.get("effect");
-                var fn = $.isFunction(effect) ? effect : Effects[effect];
-                fn.call(this, panelInfo);
-            };
-        }
-    };
-    // 切换效果方法集
-    var Effects = {
-        // 淡隐淡现效果
-        fade: function(panelInfo) {
-            // 简单起见,目前不支持 step > 1 的情景。若需要此效果时,可修改结构来达成。
-            if (this.get("step") > 1) {
-                throw new Error('Effect "fade" only supports step === 1');
-            }
-            var fromPanel = panelInfo.fromPanels.eq(0);
-            var toPanel = panelInfo.toPanels.eq(0);
-            if (this.anim) {
-                // 立刻停止,以开始新的
-                this.anim.stop(false, true);
-            }
-            // 首先显示下一张
-            toPanel.css("opacity", 1);
-            toPanel.show();
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                // 动画切换
-                this.anim = fromPanel.animate({
-                    opacity: 0
-                }, duration, easing, function() {
-                    that.anim = null;
-                    // free
-                    // 切换 z-index
-                    toPanel.css("zIndex", 9);
-                    fromPanel.css("zIndex", 1);
-                    fromPanel.css("display", "none");
-                });
-            } else {
-                toPanel.css("zIndex", 9);
-            }
-        },
-        // 水平/垂直滚动效果
-        scroll: function(panelInfo) {
-            var isX = this.get("effect") === SCROLLX;
-            var diff = this.get("viewSize")[isX ? 0 : 1] * panelInfo.toIndex;
-            var props = {};
-            props[isX ? "left" : "top"] = -diff + "px";
-            if (this.anim) {
-                this.anim.stop();
-            }
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                this.anim = this.content.animate(props, duration, easing, function() {
-                    that.anim = null;
-                });
-            } else {
-                this.content.css(props);
-            }
-        }
-    };
-    Effects[SCROLLY] = Effects.scroll;
-    Effects[SCROLLX] = Effects.scroll;
-    module.exports.Effects = Effects;
-});
-
-define("arale/switchable/1.0.2/plugins/autoplay-debug", [ "$-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var win = $(window);
-    // 自动播放插件
-    module.exports = {
-        attrs: {
-            autoplay: false,
-            // 自动播放的间隔时间
-            interval: 5e3
-        },
-        isNeeded: function() {
-            return this.get("autoplay");
-        },
-        install: function() {
-            var element = this.element;
-            var EVENT_NS = "." + this.cid;
-            var timer;
-            var interval = this.get("interval");
-            var that = this;
-            // start autoplay
-            start();
-            function start() {
-                // 停止之前的
-                stop();
-                // 设置状态
-                that.paused = false;
-                // 开始现在的
-                timer = setInterval(function() {
-                    if (that.paused) return;
-                    that.next();
-                }, interval);
-            }
-            function stop() {
-                if (timer) {
-                    clearInterval(timer);
-                    timer = null;
-                }
-                that.paused = true;
-            }
-            // public api
-            this.stop = stop;
-            this.start = start;
-            // 滚出可视区域后,停止自动播放
-            this._scrollDetect = throttle(function() {
-                that[isInViewport(element) ? "start" : "stop"]();
-            });
-            win.on("scroll" + EVENT_NS, this._scrollDetect);
-            // 鼠标悬停时,停止自动播放
-            this.element.hover(stop, start);
-        },
-        destroy: function() {
-            var EVENT_NS = "." + this.cid;
-            this.stop && this.stop();
-            if (this._scrollDetect) {
-                this._scrollDetect.stop();
-                win.off("scroll" + EVENT_NS);
-            }
-        }
-    };
-    // Helpers
-    // -------
-    function throttle(fn, ms) {
-        ms = ms || 200;
-        var throttleTimer;
-        function f() {
-            f.stop();
-            throttleTimer = setTimeout(fn, ms);
-        }
-        f.stop = function() {
-            if (throttleTimer) {
-                clearTimeout(throttleTimer);
-                throttleTimer = 0;
-            }
-        };
-        return f;
-    }
-    function isInViewport(element) {
-        var scrollTop = win.scrollTop();
-        var scrollBottom = scrollTop + win.height();
-        var elementTop = element.offset().top;
-        var elementBottom = elementTop + element.height();
-        // 只判断垂直位置是否在可视区域,不判断水平。只有要部分区域在可视区域,就返回 true
-        return elementTop < scrollBottom && elementBottom > scrollTop;
-    }
-});
-
-define("arale/switchable/1.0.2/plugins/circular-debug", [ "$-debug", "arale/switchable/1.0.2/plugins/effects-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var Effects = require("arale/switchable/1.0.2/plugins/effects-debug").Effects;
-    // 无缝循环滚动插件
-    module.exports = {
-        // 仅在开启滚动效果时需要
-        isNeeded: function() {
-            var effect = this.get("effect");
-            var circular = this.get("circular");
-            return circular && (effect === SCROLLX || effect === SCROLLY);
-        },
-        install: function() {
-            this._scrollType = this.get("effect");
-            this.set("effect", "scrollCircular");
-        }
-    };
-    Effects.scrollCircular = function(panelInfo) {
-        var toIndex = panelInfo.toIndex;
-        var fromIndex = panelInfo.fromIndex;
-        var isX = this._scrollType === SCROLLX;
-        var prop = isX ? "left" : "top";
-        var viewDiff = this.get("viewSize")[isX ? 0 : 1];
-        var diff = -viewDiff * toIndex;
-        var props = {};
-        props[prop] = diff + "px";
-        // 开始动画
-        if (fromIndex > -1) {
-            // 开始动画前,先停止掉上一动画
-            if (this.anim) {
-                this.anim.stop(false, true);
-            }
-            var len = this.get("length");
-            // scroll 的 0 -> len-1 应该是正常的从 0->1->2->.. len-1 的切换
-            var isBackwardCritical = fromIndex === 0 && toIndex === len - 1;
-            // len-1 -> 0
-            var isForwardCritical = fromIndex === len - 1 && toIndex === 0;
-            var isBackward = this._isBackward === undefined ? toIndex < fromIndex : this._isBackward;
-            // isBackward 使用下面的判断方式, 会在 nav 上 trigger 从 0 -> len-1 切换时,
-            // 不经过 0->1->2->...-> len-1, 而是 0 反向切换到 len-1;
-            // 而上面的判断方式, nav 上的 trigger 切换是正常的, 只有调用 prev 才从 0 反向切换到 len-1;
-            //var isBackward = isBackwardCritical ||
-            //    (!isForwardCritical && toIndex < fromIndex);
-            // 从第一个反向滚动到最后一个 or 从最后一个正向滚动到第一个
-            var isCritical = isBackward && isBackwardCritical || !isBackward && isForwardCritical;
-            // 在临界点时,先调整 panels 位置
-            if (isCritical) {
-                diff = adjustPosition.call(this, isBackward, prop, viewDiff);
-                props[prop] = diff + "px";
-            }
-            var duration = this.get("duration");
-            var easing = this.get("easing");
-            var that = this;
-            this.anim = this.content.animate(props, duration, easing, function() {
-                that.anim = null;
-                // free
-                // 复原位置
-                if (isCritical) {
-                    resetPosition.call(that, isBackward, prop, viewDiff);
-                }
-            });
-        } else {
-            this.content.css(props);
-        }
-    };
-    // 调整位置
-    function adjustPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        var diff = isBackward ? viewDiff : -viewDiff * len;
-        var panelDiff = isBackward ? -viewDiff * len : viewDiff * len;
-        // 调整 panels 到下一个视图中
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "relative");
-        toPanels.css(prop, panelDiff + "px");
-        // 返回偏移量
-        return diff;
-    }
-    // 复原位置
-    function resetPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        // 滚动完成后,复位到正常状态
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "");
-        toPanels.css(prop, "");
-        // 瞬移到正常位置
-        this.content.css(prop, isBackward ? -viewDiff * (len - 1) : "");
-    }
-});

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/accordion.js


+ 0 - 693
2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/carousel-debug.js

@@ -1,693 +0,0 @@
-define("arale/switchable/1.0.2/carousel-debug", [ "./switchable-debug", "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "./plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "./plugins/autoplay-debug", "./plugins/circular-debug" ], function(require, exports, module) {
-    var Switchable = require("./switchable-debug");
-    var $ = require("$-debug");
-    // 旋转木马组件
-    module.exports = Switchable.extend({
-        attrs: {
-            circular: true,
-            prevBtn: {
-                getter: function(val) {
-                    return $(val).eq(0);
-                }
-            },
-            nextBtn: {
-                getter: function(val) {
-                    return $(val).eq(0);
-                }
-            },
-            disabledBtnClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-disabled-btn";
-                }
-            }
-        },
-        _initTriggers: function(role) {
-            Switchable.prototype._initTriggers.call(this, role);
-            // attr 里没找到时,才根据 data-role 来解析
-            var prevBtn = this.get("prevBtn");
-            var nextBtn = this.get("nextBtn");
-            if (!prevBtn[0] && role.prev) {
-                prevBtn = role.prev;
-                this.set("prevBtn", prevBtn);
-            }
-            if (!nextBtn[0] && role.next) {
-                nextBtn = role.next;
-                this.set("nextBtn", nextBtn);
-            }
-            prevBtn.addClass(this.CONST.PREV_BTN_CLASS);
-            nextBtn.addClass(this.CONST.NEXT_BTN_CLASS);
-        },
-        _getDatasetRole: function() {
-            var role = Switchable.prototype._getDatasetRole.call(this);
-            var self = this;
-            var roles = [ "next", "prev" ];
-            $.each(roles, function(index, key) {
-                var elems = self.$("[data-switchable-role=" + key + "]");
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _bindTriggers: function() {
-            Switchable.prototype._bindTriggers.call(this);
-            var that = this;
-            var circular = this.get("circular");
-            this.get("prevBtn").click(function(ev) {
-                ev.preventDefault();
-                if (circular || that.get("activeIndex") > 0) {
-                    that.prev();
-                }
-            });
-            this.get("nextBtn").click(function(ev) {
-                ev.preventDefault();
-                var len = that.get("length") - 1;
-                if (circular || that.get("activeIndex") < len) {
-                    that.next();
-                }
-            });
-            // 注册 switch 事件,处理 prevBtn/nextBtn 的 disable 状态
-            // circular = true 时,无需处理
-            if (!circular) {
-                this.on("switch", function(toIndex) {
-                    that._updateButtonStatus(toIndex);
-                });
-            }
-        },
-        _updateButtonStatus: function(toIndex) {
-            var prevBtn = this.get("prevBtn");
-            var nextBtn = this.get("nextBtn");
-            var disabledBtnClass = this.get("disabledBtnClass");
-            prevBtn.removeClass(disabledBtnClass);
-            nextBtn.removeClass(disabledBtnClass);
-            if (toIndex === 0) {
-                prevBtn.addClass(disabledBtnClass);
-            } else if (toIndex === this.get("length") - 1) {
-                nextBtn.addClass(disabledBtnClass);
-            }
-        }
-    });
-});
-
-define("arale/switchable/1.0.2/switchable-debug", [ "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "arale/switchable/1.0.2/plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "arale/switchable/1.0.2/plugins/autoplay-debug", "arale/switchable/1.0.2/plugins/circular-debug" ], function(require, exports, module) {
-    // Switchable
-    // -----------
-    // 可切换组件,核心特征是:有一组可切换的面板(Panel),可通过触点(Trigger)来触发。
-    // 感谢:
-    //  - https://github.com/kissyteam/kissy/tree/6707ecc4cdfddd59e21698c8eb4a50b65dbe7632/src/switchable
-    var $ = require("$-debug");
-    var Widget = require("arale/widget/1.1.1/widget-debug");
-    var Effects = require("arale/switchable/1.0.2/plugins/effects-debug");
-    var Autoplay = require("arale/switchable/1.0.2/plugins/autoplay-debug");
-    var Circular = require("arale/switchable/1.0.2/plugins/circular-debug");
-    var Switchable = Widget.extend({
-        attrs: {
-            // 用户传入的 triggers 和 panels
-            // 可以是 Selector、jQuery 对象、或 DOM 元素集
-            triggers: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            panels: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            classPrefix: "ui-switchable",
-            // 是否包含 triggers,用于没有传入 triggers 时,是否自动生成的判断标准
-            hasTriggers: true,
-            // 触发类型
-            triggerType: "hover",
-            // or 'click'
-            // 触发延迟
-            delay: 100,
-            // 初始切换到哪个面板
-            activeIndex: {
-                value: 0,
-                setter: function(val) {
-                    return parseInt(val) || 0;
-                }
-            },
-            // 一屏内有多少个 panels
-            step: 1,
-            // 有多少屏
-            length: {
-                readOnly: true,
-                getter: function() {
-                    return Math.ceil(this.get("panels").length / this.get("step"));
-                }
-            },
-            // 可见视图区域的大小。一般不需要设定此值,仅当获取值不正确时,用于手工指定大小
-            viewSize: [],
-            activeTriggerClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-active";
-                }
-            }
-        },
-        setup: function() {
-            this._initConstClass();
-            this._initElement();
-            var role = this._getDatasetRole();
-            this._initPanels(role);
-            // 配置中的 triggers > dataset > 自动生成
-            this._initTriggers(role);
-            this._bindTriggers();
-            this._initPlugins();
-            // 渲染默认初始状态
-            this.render();
-        },
-        _initConstClass: function() {
-            this.CONST = constClass(this.get("classPrefix"));
-        },
-        _initElement: function() {
-            this.element.addClass(this.CONST.UI_SWITCHABLE);
-        },
-        // 从 HTML 标记中获取各个 role, 替代原来的 markupType
-        _getDatasetRole: function() {
-            var self = this;
-            var role = {};
-            var roles = [ "trigger", "panel", "nav", "content" ];
-            $.each(roles, function(index, key) {
-                var elems = self.$("[data-switchable-role=" + key + "]");
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _initPanels: function(role) {
-            var panels = this.get("panels");
-            // 先获取 panels 和 content
-            if (panels.length > 0) {} else if (role.panel) {
-                this.set("panels", panels = role.panel);
-            } else if (role.content) {
-                this.set("panels", panels = role.content.find("> *"));
-                this.content = role.content;
-            }
-            if (panels.length === 0) {
-                throw new Error("panels.length is ZERO");
-            }
-            if (!this.content) {
-                this.content = panels.parent();
-            }
-            this.content.addClass(this.CONST.CONTENT_CLASS);
-            this.get("panels").addClass(this.CONST.PANEL_CLASS);
-        },
-        _initTriggers: function(role) {
-            var triggers = this.get("triggers");
-            // 再获取 triggers 和 nav
-            if (triggers.length > 0) {} else if (role.trigger) {
-                this.set("triggers", triggers = role.trigger);
-            } else if (role.nav) {
-                triggers = role.nav.find("> *");
-                // 空的 nav 标记
-                if (triggers.length === 0) {
-                    triggers = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass"), true).appendTo(role.nav);
-                }
-                this.set("triggers", triggers);
-                this.nav = role.nav;
-            } else if (this.get("hasTriggers")) {
-                this.nav = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass")).appendTo(this.element);
-                this.set("triggers", triggers = this.nav.children());
-            }
-            if (!this.nav && triggers.length) {
-                this.nav = triggers.parent();
-            }
-            this.nav && this.nav.addClass(this.CONST.NAV_CLASS);
-            triggers.addClass(this.CONST.TRIGGER_CLASS).each(function(i, trigger) {
-                $(trigger).data("value", i);
-            });
-        },
-        _bindTriggers: function() {
-            var that = this, triggers = this.get("triggers");
-            if (this.get("triggerType") === "click") {
-                triggers.click(focus);
-            } else {
-                triggers.hover(focus, leave);
-            }
-            function focus(ev) {
-                that._onFocusTrigger(ev.type, $(this).data("value"));
-            }
-            function leave() {
-                clearTimeout(that._switchTimer);
-            }
-        },
-        _onFocusTrigger: function(type, index) {
-            var that = this;
-            // click or tab 键激活时
-            if (type === "click") {
-                this.switchTo(index);
-            } else {
-                this._switchTimer = setTimeout(function() {
-                    that.switchTo(index);
-                }, this.get("delay"));
-            }
-        },
-        _initPlugins: function() {
-            this._plugins = [];
-            this._plug(Effects);
-            this._plug(Autoplay);
-            this._plug(Circular);
-        },
-        // 切换到指定 index
-        switchTo: function(toIndex) {
-            this.set("activeIndex", toIndex);
-        },
-        // change 事件触发的前提是当前值和先前值不一致, 所以无需验证 toIndex !== fromIndex
-        _onRenderActiveIndex: function(toIndex, fromIndex) {
-            this._switchTo(toIndex, fromIndex);
-        },
-        _switchTo: function(toIndex, fromIndex) {
-            this.trigger("switch", toIndex, fromIndex);
-            this._switchTrigger(toIndex, fromIndex);
-            this._switchPanel(this._getPanelInfo(toIndex, fromIndex));
-            this.trigger("switched", toIndex, fromIndex);
-            // 恢复手工向后切换标识
-            this._isBackward = undefined;
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            var triggers = this.get("triggers");
-            if (triggers.length < 1) return;
-            triggers.eq(fromIndex).removeClass(this.get("activeTriggerClass"));
-            triggers.eq(toIndex).addClass(this.get("activeTriggerClass"));
-        },
-        _switchPanel: function(panelInfo) {
-            // 默认是最简单的切换效果:直接隐藏/显示
-            panelInfo.fromPanels.hide();
-            panelInfo.toPanels.show();
-        },
-        _getPanelInfo: function(toIndex, fromIndex) {
-            var panels = this.get("panels").get();
-            var step = this.get("step");
-            var fromPanels, toPanels;
-            // 初始情况下 fromIndex 为 undefined
-            if (fromIndex > -1) {
-                fromPanels = panels.slice(fromIndex * step, (fromIndex + 1) * step);
-            }
-            toPanels = panels.slice(toIndex * step, (toIndex + 1) * step);
-            return {
-                toIndex: toIndex,
-                fromIndex: fromIndex,
-                toPanels: $(toPanels),
-                fromPanels: $(fromPanels)
-            };
-        },
-        // 切换到上一视图
-        prev: function() {
-            //  设置手工向后切换标识, 外部调用 prev 一样
-            this._isBackward = true;
-            var fromIndex = this.get("activeIndex");
-            // 考虑循环切换的情况
-            var index = (fromIndex - 1 + this.get("length")) % this.get("length");
-            this.switchTo(index);
-        },
-        // 切换到下一视图
-        next: function() {
-            this._isBackward = false;
-            var fromIndex = this.get("activeIndex");
-            var index = (fromIndex + 1) % this.get("length");
-            this.switchTo(index);
-        },
-        _plug: function(plugin) {
-            var pluginAttrs = plugin.attrs;
-            if (pluginAttrs) {
-                for (var key in pluginAttrs) {
-                    if (pluginAttrs.hasOwnProperty(key) && // 不覆盖用户传入的配置
-                    !(key in this.attrs)) {
-                        this.set(key, pluginAttrs[key]);
-                    }
-                }
-            }
-            if (!plugin.isNeeded.call(this)) return;
-            if (plugin.install) {
-                plugin.install.call(this);
-            }
-            this._plugins.push(plugin);
-        },
-        destroy: function() {
-            // todo: events
-            var that = this;
-            $.each(this._plugins, function(i, plugin) {
-                if (plugin.destroy) {
-                    plugin.destroy.call(that);
-                }
-            });
-            Switchable.superclass.destroy.call(this);
-        }
-    });
-    module.exports = Switchable;
-    // Helpers
-    // -------
-    function generateTriggersMarkup(length, activeIndex, activeTriggerClass, justChildren) {
-        var nav = $("<ul>");
-        for (var i = 0; i < length; i++) {
-            var className = i === activeIndex ? activeTriggerClass : "";
-            $("<li>", {
-                "class": className,
-                html: i + 1
-            }).appendTo(nav);
-        }
-        return justChildren ? nav.children() : nav;
-    }
-    // 内部默认的 className
-    function constClass(classPrefix) {
-        return {
-            UI_SWITCHABLE: classPrefix || "",
-            NAV_CLASS: classPrefix ? classPrefix + "-nav" : "",
-            CONTENT_CLASS: classPrefix ? classPrefix + "-content" : "",
-            TRIGGER_CLASS: classPrefix ? classPrefix + "-trigger" : "",
-            PANEL_CLASS: classPrefix ? classPrefix + "-panel" : "",
-            PREV_BTN_CLASS: classPrefix ? classPrefix + "-prev-btn" : "",
-            NEXT_BTN_CLASS: classPrefix ? classPrefix + "-next-btn" : ""
-        };
-    }
-});
-
-define("arale/switchable/1.0.2/plugins/effects-debug", [ "$-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    require("arale/easing/1.0.0/easing-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var FADE = "fade";
-    // 切换效果插件
-    module.exports = {
-        attrs: {
-            // 切换效果,可取 scrollx | scrolly | fade 或直接传入 effect function
-            effect: "none",
-            easing: "linear",
-            duration: 500
-        },
-        isNeeded: function() {
-            return this.get("effect") !== "none";
-        },
-        install: function() {
-            var panels = this.get("panels");
-            // 注:
-            // 1. 所有 panel 的尺寸应该相同
-            //    最好指定第一个 panel 的 width 和 height
-            //    因为 Safari 下,图片未加载时,读取的 offsetHeight 等值会不对
-            // 2. 初始化 panels 样式
-            //    这些特效需要将 panels 都显示出来
-            // 3. 在 CSS 里,需要给 container 设定高宽和 overflow: hidden
-            panels.show();
-            var effect = this.get("effect");
-            var step = this.get("step");
-            var isFunction = $.isFunction(effect);
-            // 初始化滚动效果
-            if (!isFunction && effect.indexOf("scroll") === 0) {
-                var content = this.content;
-                var firstPanel = panels.eq(0);
-                // 设置定位信息,为滚动效果做铺垫
-                content.css("position", "relative");
-                // 注:content 的父级不一定是 container
-                if (content.parent().css("position") === "static") {
-                    content.parent().css("position", "relative");
-                }
-                // 水平排列
-                if (effect === SCROLLX) {
-                    panels.css("float", "left");
-                    // 设置最大宽度,以保证有空间让 panels 水平排布
-                    // 35791197px 为 360 下 width 最大数值
-                    content.width("35791197px");
-                }
-                // 只有 scrollX, scrollY 需要设置 viewSize
-                // 其他情况下不需要
-                var viewSize = this.get("viewSize");
-                if (!viewSize[0]) {
-                    viewSize[0] = firstPanel.outerWidth() * step;
-                    viewSize[1] = firstPanel.outerHeight() * step;
-                    this.set("viewSize", viewSize);
-                }
-                if (!viewSize[0]) {
-                    throw new Error("Please specify viewSize manually");
-                }
-            } else if (!isFunction && effect === FADE) {
-                var activeIndex = this.get("activeIndex");
-                var min = activeIndex * step;
-                var max = min + step - 1;
-                panels.each(function(i, panel) {
-                    var isActivePanel = i >= min && i <= max;
-                    $(panel).css({
-                        opacity: isActivePanel ? 1 : 0,
-                        position: "absolute",
-                        zIndex: isActivePanel ? 9 : 1
-                    });
-                });
-            }
-            // 覆盖 switchPanel 方法
-            this._switchPanel = function(panelInfo) {
-                var effect = this.get("effect");
-                var fn = $.isFunction(effect) ? effect : Effects[effect];
-                fn.call(this, panelInfo);
-            };
-        }
-    };
-    // 切换效果方法集
-    var Effects = {
-        // 淡隐淡现效果
-        fade: function(panelInfo) {
-            // 简单起见,目前不支持 step > 1 的情景。若需要此效果时,可修改结构来达成。
-            if (this.get("step") > 1) {
-                throw new Error('Effect "fade" only supports step === 1');
-            }
-            var fromPanel = panelInfo.fromPanels.eq(0);
-            var toPanel = panelInfo.toPanels.eq(0);
-            if (this.anim) {
-                // 立刻停止,以开始新的
-                this.anim.stop(false, true);
-            }
-            // 首先显示下一张
-            toPanel.css("opacity", 1);
-            toPanel.show();
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                // 动画切换
-                this.anim = fromPanel.animate({
-                    opacity: 0
-                }, duration, easing, function() {
-                    that.anim = null;
-                    // free
-                    // 切换 z-index
-                    toPanel.css("zIndex", 9);
-                    fromPanel.css("zIndex", 1);
-                    fromPanel.css("display", "none");
-                });
-            } else {
-                toPanel.css("zIndex", 9);
-            }
-        },
-        // 水平/垂直滚动效果
-        scroll: function(panelInfo) {
-            var isX = this.get("effect") === SCROLLX;
-            var diff = this.get("viewSize")[isX ? 0 : 1] * panelInfo.toIndex;
-            var props = {};
-            props[isX ? "left" : "top"] = -diff + "px";
-            if (this.anim) {
-                this.anim.stop();
-            }
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                this.anim = this.content.animate(props, duration, easing, function() {
-                    that.anim = null;
-                });
-            } else {
-                this.content.css(props);
-            }
-        }
-    };
-    Effects[SCROLLY] = Effects.scroll;
-    Effects[SCROLLX] = Effects.scroll;
-    module.exports.Effects = Effects;
-});
-
-define("arale/switchable/1.0.2/plugins/autoplay-debug", [ "$-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var win = $(window);
-    // 自动播放插件
-    module.exports = {
-        attrs: {
-            autoplay: false,
-            // 自动播放的间隔时间
-            interval: 5e3
-        },
-        isNeeded: function() {
-            return this.get("autoplay");
-        },
-        install: function() {
-            var element = this.element;
-            var EVENT_NS = "." + this.cid;
-            var timer;
-            var interval = this.get("interval");
-            var that = this;
-            // start autoplay
-            start();
-            function start() {
-                // 停止之前的
-                stop();
-                // 设置状态
-                that.paused = false;
-                // 开始现在的
-                timer = setInterval(function() {
-                    if (that.paused) return;
-                    that.next();
-                }, interval);
-            }
-            function stop() {
-                if (timer) {
-                    clearInterval(timer);
-                    timer = null;
-                }
-                that.paused = true;
-            }
-            // public api
-            this.stop = stop;
-            this.start = start;
-            // 滚出可视区域后,停止自动播放
-            this._scrollDetect = throttle(function() {
-                that[isInViewport(element) ? "start" : "stop"]();
-            });
-            win.on("scroll" + EVENT_NS, this._scrollDetect);
-            // 鼠标悬停时,停止自动播放
-            this.element.hover(stop, start);
-        },
-        destroy: function() {
-            var EVENT_NS = "." + this.cid;
-            this.stop && this.stop();
-            if (this._scrollDetect) {
-                this._scrollDetect.stop();
-                win.off("scroll" + EVENT_NS);
-            }
-        }
-    };
-    // Helpers
-    // -------
-    function throttle(fn, ms) {
-        ms = ms || 200;
-        var throttleTimer;
-        function f() {
-            f.stop();
-            throttleTimer = setTimeout(fn, ms);
-        }
-        f.stop = function() {
-            if (throttleTimer) {
-                clearTimeout(throttleTimer);
-                throttleTimer = 0;
-            }
-        };
-        return f;
-    }
-    function isInViewport(element) {
-        var scrollTop = win.scrollTop();
-        var scrollBottom = scrollTop + win.height();
-        var elementTop = element.offset().top;
-        var elementBottom = elementTop + element.height();
-        // 只判断垂直位置是否在可视区域,不判断水平。只有要部分区域在可视区域,就返回 true
-        return elementTop < scrollBottom && elementBottom > scrollTop;
-    }
-});
-
-define("arale/switchable/1.0.2/plugins/circular-debug", [ "$-debug", "arale/switchable/1.0.2/plugins/effects-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var Effects = require("arale/switchable/1.0.2/plugins/effects-debug").Effects;
-    // 无缝循环滚动插件
-    module.exports = {
-        // 仅在开启滚动效果时需要
-        isNeeded: function() {
-            var effect = this.get("effect");
-            var circular = this.get("circular");
-            return circular && (effect === SCROLLX || effect === SCROLLY);
-        },
-        install: function() {
-            this._scrollType = this.get("effect");
-            this.set("effect", "scrollCircular");
-        }
-    };
-    Effects.scrollCircular = function(panelInfo) {
-        var toIndex = panelInfo.toIndex;
-        var fromIndex = panelInfo.fromIndex;
-        var isX = this._scrollType === SCROLLX;
-        var prop = isX ? "left" : "top";
-        var viewDiff = this.get("viewSize")[isX ? 0 : 1];
-        var diff = -viewDiff * toIndex;
-        var props = {};
-        props[prop] = diff + "px";
-        // 开始动画
-        if (fromIndex > -1) {
-            // 开始动画前,先停止掉上一动画
-            if (this.anim) {
-                this.anim.stop(false, true);
-            }
-            var len = this.get("length");
-            // scroll 的 0 -> len-1 应该是正常的从 0->1->2->.. len-1 的切换
-            var isBackwardCritical = fromIndex === 0 && toIndex === len - 1;
-            // len-1 -> 0
-            var isForwardCritical = fromIndex === len - 1 && toIndex === 0;
-            var isBackward = this._isBackward === undefined ? toIndex < fromIndex : this._isBackward;
-            // isBackward 使用下面的判断方式, 会在 nav 上 trigger 从 0 -> len-1 切换时,
-            // 不经过 0->1->2->...-> len-1, 而是 0 反向切换到 len-1;
-            // 而上面的判断方式, nav 上的 trigger 切换是正常的, 只有调用 prev 才从 0 反向切换到 len-1;
-            //var isBackward = isBackwardCritical ||
-            //    (!isForwardCritical && toIndex < fromIndex);
-            // 从第一个反向滚动到最后一个 or 从最后一个正向滚动到第一个
-            var isCritical = isBackward && isBackwardCritical || !isBackward && isForwardCritical;
-            // 在临界点时,先调整 panels 位置
-            if (isCritical) {
-                diff = adjustPosition.call(this, isBackward, prop, viewDiff);
-                props[prop] = diff + "px";
-            }
-            var duration = this.get("duration");
-            var easing = this.get("easing");
-            var that = this;
-            this.anim = this.content.animate(props, duration, easing, function() {
-                that.anim = null;
-                // free
-                // 复原位置
-                if (isCritical) {
-                    resetPosition.call(that, isBackward, prop, viewDiff);
-                }
-            });
-        } else {
-            this.content.css(props);
-        }
-    };
-    // 调整位置
-    function adjustPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        var diff = isBackward ? viewDiff : -viewDiff * len;
-        var panelDiff = isBackward ? -viewDiff * len : viewDiff * len;
-        // 调整 panels 到下一个视图中
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "relative");
-        toPanels.css(prop, panelDiff + "px");
-        // 返回偏移量
-        return diff;
-    }
-    // 复原位置
-    function resetPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        // 滚动完成后,复位到正常状态
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "");
-        toPanels.css(prop, "");
-        // 瞬移到正常位置
-        this.content.css(prop, isBackward ? -viewDiff * (len - 1) : "");
-    }
-});

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/carousel.js


+ 0 - 35
2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/package.json

@@ -1,35 +0,0 @@
-{
-    "family": "arale",
-    "name": "switchable",
-    "version": "1.0.2",
-    "description": "Switchable提供了切换的基本操作, 并通过参数配置实现了自动播放, 循环, 切换等操作, 并提供不同的特点封装成了Tabs, Slide, Carousel, Accordion模块. 用户可以根据自己的需求引用不同的模块.",
-    "keywords": ["widget", "tab", "slide", "carousel", "accordion"],
-    "tag": "widget",
-    "homepage": "http://aralejs.org/switchable",
-    "author": "玉伯 <lifesinger@gmail.com>",
-    "maintainers": [
-        "乔花 <shengyan1985@gmail.com>",
-        "康辉 <kangpangpang@gmail.com>"
-    ],
-    "repository": {
-        "type": "git",
-        "url": "https://github.com/aralejs/switchable.git"
-    },
-    "bugs": {
-        "url": "https://github.com/aralejs/switchable/issues"
-    },
-    "spm": {
-        "alias": {
-            "$": "$",
-            "widget": "arale/widget/1.1.1/widget",
-            "easing": "arale/easing/1.0.0/easing"
-        },
-        "output": [
-            "./switchable.js",
-            "./tabs.js",
-            "./slide.js",
-            "./accordion.js",
-            "./carousel.js"
-        ]
-    }
-}

+ 0 - 613
2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/slide-debug.js

@@ -1,613 +0,0 @@
-define("arale/switchable/1.0.2/slide-debug", [ "./switchable-debug", "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "./plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "./plugins/autoplay-debug", "./plugins/circular-debug" ], function(require, exports, module) {
-    var Switchable = require("./switchable-debug");
-    // 卡盘轮播组件
-    module.exports = Switchable.extend({
-        attrs: {
-            autoplay: true,
-            circular: true
-        }
-    });
-});
-
-define("arale/switchable/1.0.2/switchable-debug", [ "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "arale/switchable/1.0.2/plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "arale/switchable/1.0.2/plugins/autoplay-debug", "arale/switchable/1.0.2/plugins/circular-debug" ], function(require, exports, module) {
-    // Switchable
-    // -----------
-    // 可切换组件,核心特征是:有一组可切换的面板(Panel),可通过触点(Trigger)来触发。
-    // 感谢:
-    //  - https://github.com/kissyteam/kissy/tree/6707ecc4cdfddd59e21698c8eb4a50b65dbe7632/src/switchable
-    var $ = require("$-debug");
-    var Widget = require("arale/widget/1.1.1/widget-debug");
-    var Effects = require("arale/switchable/1.0.2/plugins/effects-debug");
-    var Autoplay = require("arale/switchable/1.0.2/plugins/autoplay-debug");
-    var Circular = require("arale/switchable/1.0.2/plugins/circular-debug");
-    var Switchable = Widget.extend({
-        attrs: {
-            // 用户传入的 triggers 和 panels
-            // 可以是 Selector、jQuery 对象、或 DOM 元素集
-            triggers: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            panels: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            classPrefix: "ui-switchable",
-            // 是否包含 triggers,用于没有传入 triggers 时,是否自动生成的判断标准
-            hasTriggers: true,
-            // 触发类型
-            triggerType: "hover",
-            // or 'click'
-            // 触发延迟
-            delay: 100,
-            // 初始切换到哪个面板
-            activeIndex: {
-                value: 0,
-                setter: function(val) {
-                    return parseInt(val) || 0;
-                }
-            },
-            // 一屏内有多少个 panels
-            step: 1,
-            // 有多少屏
-            length: {
-                readOnly: true,
-                getter: function() {
-                    return Math.ceil(this.get("panels").length / this.get("step"));
-                }
-            },
-            // 可见视图区域的大小。一般不需要设定此值,仅当获取值不正确时,用于手工指定大小
-            viewSize: [],
-            activeTriggerClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-active";
-                }
-            }
-        },
-        setup: function() {
-            this._initConstClass();
-            this._initElement();
-            var role = this._getDatasetRole();
-            this._initPanels(role);
-            // 配置中的 triggers > dataset > 自动生成
-            this._initTriggers(role);
-            this._bindTriggers();
-            this._initPlugins();
-            // 渲染默认初始状态
-            this.render();
-        },
-        _initConstClass: function() {
-            this.CONST = constClass(this.get("classPrefix"));
-        },
-        _initElement: function() {
-            this.element.addClass(this.CONST.UI_SWITCHABLE);
-        },
-        // 从 HTML 标记中获取各个 role, 替代原来的 markupType
-        _getDatasetRole: function() {
-            var self = this;
-            var role = {};
-            var roles = [ "trigger", "panel", "nav", "content" ];
-            $.each(roles, function(index, key) {
-                var elems = self.$("[data-switchable-role=" + key + "]");
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _initPanels: function(role) {
-            var panels = this.get("panels");
-            // 先获取 panels 和 content
-            if (panels.length > 0) {} else if (role.panel) {
-                this.set("panels", panels = role.panel);
-            } else if (role.content) {
-                this.set("panels", panels = role.content.find("> *"));
-                this.content = role.content;
-            }
-            if (panels.length === 0) {
-                throw new Error("panels.length is ZERO");
-            }
-            if (!this.content) {
-                this.content = panels.parent();
-            }
-            this.content.addClass(this.CONST.CONTENT_CLASS);
-            this.get("panels").addClass(this.CONST.PANEL_CLASS);
-        },
-        _initTriggers: function(role) {
-            var triggers = this.get("triggers");
-            // 再获取 triggers 和 nav
-            if (triggers.length > 0) {} else if (role.trigger) {
-                this.set("triggers", triggers = role.trigger);
-            } else if (role.nav) {
-                triggers = role.nav.find("> *");
-                // 空的 nav 标记
-                if (triggers.length === 0) {
-                    triggers = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass"), true).appendTo(role.nav);
-                }
-                this.set("triggers", triggers);
-                this.nav = role.nav;
-            } else if (this.get("hasTriggers")) {
-                this.nav = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass")).appendTo(this.element);
-                this.set("triggers", triggers = this.nav.children());
-            }
-            if (!this.nav && triggers.length) {
-                this.nav = triggers.parent();
-            }
-            this.nav && this.nav.addClass(this.CONST.NAV_CLASS);
-            triggers.addClass(this.CONST.TRIGGER_CLASS).each(function(i, trigger) {
-                $(trigger).data("value", i);
-            });
-        },
-        _bindTriggers: function() {
-            var that = this, triggers = this.get("triggers");
-            if (this.get("triggerType") === "click") {
-                triggers.click(focus);
-            } else {
-                triggers.hover(focus, leave);
-            }
-            function focus(ev) {
-                that._onFocusTrigger(ev.type, $(this).data("value"));
-            }
-            function leave() {
-                clearTimeout(that._switchTimer);
-            }
-        },
-        _onFocusTrigger: function(type, index) {
-            var that = this;
-            // click or tab 键激活时
-            if (type === "click") {
-                this.switchTo(index);
-            } else {
-                this._switchTimer = setTimeout(function() {
-                    that.switchTo(index);
-                }, this.get("delay"));
-            }
-        },
-        _initPlugins: function() {
-            this._plugins = [];
-            this._plug(Effects);
-            this._plug(Autoplay);
-            this._plug(Circular);
-        },
-        // 切换到指定 index
-        switchTo: function(toIndex) {
-            this.set("activeIndex", toIndex);
-        },
-        // change 事件触发的前提是当前值和先前值不一致, 所以无需验证 toIndex !== fromIndex
-        _onRenderActiveIndex: function(toIndex, fromIndex) {
-            this._switchTo(toIndex, fromIndex);
-        },
-        _switchTo: function(toIndex, fromIndex) {
-            this.trigger("switch", toIndex, fromIndex);
-            this._switchTrigger(toIndex, fromIndex);
-            this._switchPanel(this._getPanelInfo(toIndex, fromIndex));
-            this.trigger("switched", toIndex, fromIndex);
-            // 恢复手工向后切换标识
-            this._isBackward = undefined;
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            var triggers = this.get("triggers");
-            if (triggers.length < 1) return;
-            triggers.eq(fromIndex).removeClass(this.get("activeTriggerClass"));
-            triggers.eq(toIndex).addClass(this.get("activeTriggerClass"));
-        },
-        _switchPanel: function(panelInfo) {
-            // 默认是最简单的切换效果:直接隐藏/显示
-            panelInfo.fromPanels.hide();
-            panelInfo.toPanels.show();
-        },
-        _getPanelInfo: function(toIndex, fromIndex) {
-            var panels = this.get("panels").get();
-            var step = this.get("step");
-            var fromPanels, toPanels;
-            // 初始情况下 fromIndex 为 undefined
-            if (fromIndex > -1) {
-                fromPanels = panels.slice(fromIndex * step, (fromIndex + 1) * step);
-            }
-            toPanels = panels.slice(toIndex * step, (toIndex + 1) * step);
-            return {
-                toIndex: toIndex,
-                fromIndex: fromIndex,
-                toPanels: $(toPanels),
-                fromPanels: $(fromPanels)
-            };
-        },
-        // 切换到上一视图
-        prev: function() {
-            //  设置手工向后切换标识, 外部调用 prev 一样
-            this._isBackward = true;
-            var fromIndex = this.get("activeIndex");
-            // 考虑循环切换的情况
-            var index = (fromIndex - 1 + this.get("length")) % this.get("length");
-            this.switchTo(index);
-        },
-        // 切换到下一视图
-        next: function() {
-            this._isBackward = false;
-            var fromIndex = this.get("activeIndex");
-            var index = (fromIndex + 1) % this.get("length");
-            this.switchTo(index);
-        },
-        _plug: function(plugin) {
-            var pluginAttrs = plugin.attrs;
-            if (pluginAttrs) {
-                for (var key in pluginAttrs) {
-                    if (pluginAttrs.hasOwnProperty(key) && // 不覆盖用户传入的配置
-                    !(key in this.attrs)) {
-                        this.set(key, pluginAttrs[key]);
-                    }
-                }
-            }
-            if (!plugin.isNeeded.call(this)) return;
-            if (plugin.install) {
-                plugin.install.call(this);
-            }
-            this._plugins.push(plugin);
-        },
-        destroy: function() {
-            // todo: events
-            var that = this;
-            $.each(this._plugins, function(i, plugin) {
-                if (plugin.destroy) {
-                    plugin.destroy.call(that);
-                }
-            });
-            Switchable.superclass.destroy.call(this);
-        }
-    });
-    module.exports = Switchable;
-    // Helpers
-    // -------
-    function generateTriggersMarkup(length, activeIndex, activeTriggerClass, justChildren) {
-        var nav = $("<ul>");
-        for (var i = 0; i < length; i++) {
-            var className = i === activeIndex ? activeTriggerClass : "";
-            $("<li>", {
-                "class": className,
-                html: i + 1
-            }).appendTo(nav);
-        }
-        return justChildren ? nav.children() : nav;
-    }
-    // 内部默认的 className
-    function constClass(classPrefix) {
-        return {
-            UI_SWITCHABLE: classPrefix || "",
-            NAV_CLASS: classPrefix ? classPrefix + "-nav" : "",
-            CONTENT_CLASS: classPrefix ? classPrefix + "-content" : "",
-            TRIGGER_CLASS: classPrefix ? classPrefix + "-trigger" : "",
-            PANEL_CLASS: classPrefix ? classPrefix + "-panel" : "",
-            PREV_BTN_CLASS: classPrefix ? classPrefix + "-prev-btn" : "",
-            NEXT_BTN_CLASS: classPrefix ? classPrefix + "-next-btn" : ""
-        };
-    }
-});
-
-define("arale/switchable/1.0.2/plugins/effects-debug", [ "$-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    require("arale/easing/1.0.0/easing-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var FADE = "fade";
-    // 切换效果插件
-    module.exports = {
-        attrs: {
-            // 切换效果,可取 scrollx | scrolly | fade 或直接传入 effect function
-            effect: "none",
-            easing: "linear",
-            duration: 500
-        },
-        isNeeded: function() {
-            return this.get("effect") !== "none";
-        },
-        install: function() {
-            var panels = this.get("panels");
-            // 注:
-            // 1. 所有 panel 的尺寸应该相同
-            //    最好指定第一个 panel 的 width 和 height
-            //    因为 Safari 下,图片未加载时,读取的 offsetHeight 等值会不对
-            // 2. 初始化 panels 样式
-            //    这些特效需要将 panels 都显示出来
-            // 3. 在 CSS 里,需要给 container 设定高宽和 overflow: hidden
-            panels.show();
-            var effect = this.get("effect");
-            var step = this.get("step");
-            var isFunction = $.isFunction(effect);
-            // 初始化滚动效果
-            if (!isFunction && effect.indexOf("scroll") === 0) {
-                var content = this.content;
-                var firstPanel = panels.eq(0);
-                // 设置定位信息,为滚动效果做铺垫
-                content.css("position", "relative");
-                // 注:content 的父级不一定是 container
-                if (content.parent().css("position") === "static") {
-                    content.parent().css("position", "relative");
-                }
-                // 水平排列
-                if (effect === SCROLLX) {
-                    panels.css("float", "left");
-                    // 设置最大宽度,以保证有空间让 panels 水平排布
-                    // 35791197px 为 360 下 width 最大数值
-                    content.width("35791197px");
-                }
-                // 只有 scrollX, scrollY 需要设置 viewSize
-                // 其他情况下不需要
-                var viewSize = this.get("viewSize");
-                if (!viewSize[0]) {
-                    viewSize[0] = firstPanel.outerWidth() * step;
-                    viewSize[1] = firstPanel.outerHeight() * step;
-                    this.set("viewSize", viewSize);
-                }
-                if (!viewSize[0]) {
-                    throw new Error("Please specify viewSize manually");
-                }
-            } else if (!isFunction && effect === FADE) {
-                var activeIndex = this.get("activeIndex");
-                var min = activeIndex * step;
-                var max = min + step - 1;
-                panels.each(function(i, panel) {
-                    var isActivePanel = i >= min && i <= max;
-                    $(panel).css({
-                        opacity: isActivePanel ? 1 : 0,
-                        position: "absolute",
-                        zIndex: isActivePanel ? 9 : 1
-                    });
-                });
-            }
-            // 覆盖 switchPanel 方法
-            this._switchPanel = function(panelInfo) {
-                var effect = this.get("effect");
-                var fn = $.isFunction(effect) ? effect : Effects[effect];
-                fn.call(this, panelInfo);
-            };
-        }
-    };
-    // 切换效果方法集
-    var Effects = {
-        // 淡隐淡现效果
-        fade: function(panelInfo) {
-            // 简单起见,目前不支持 step > 1 的情景。若需要此效果时,可修改结构来达成。
-            if (this.get("step") > 1) {
-                throw new Error('Effect "fade" only supports step === 1');
-            }
-            var fromPanel = panelInfo.fromPanels.eq(0);
-            var toPanel = panelInfo.toPanels.eq(0);
-            if (this.anim) {
-                // 立刻停止,以开始新的
-                this.anim.stop(false, true);
-            }
-            // 首先显示下一张
-            toPanel.css("opacity", 1);
-            toPanel.show();
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                // 动画切换
-                this.anim = fromPanel.animate({
-                    opacity: 0
-                }, duration, easing, function() {
-                    that.anim = null;
-                    // free
-                    // 切换 z-index
-                    toPanel.css("zIndex", 9);
-                    fromPanel.css("zIndex", 1);
-                    fromPanel.css("display", "none");
-                });
-            } else {
-                toPanel.css("zIndex", 9);
-            }
-        },
-        // 水平/垂直滚动效果
-        scroll: function(panelInfo) {
-            var isX = this.get("effect") === SCROLLX;
-            var diff = this.get("viewSize")[isX ? 0 : 1] * panelInfo.toIndex;
-            var props = {};
-            props[isX ? "left" : "top"] = -diff + "px";
-            if (this.anim) {
-                this.anim.stop();
-            }
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                this.anim = this.content.animate(props, duration, easing, function() {
-                    that.anim = null;
-                });
-            } else {
-                this.content.css(props);
-            }
-        }
-    };
-    Effects[SCROLLY] = Effects.scroll;
-    Effects[SCROLLX] = Effects.scroll;
-    module.exports.Effects = Effects;
-});
-
-define("arale/switchable/1.0.2/plugins/autoplay-debug", [ "$-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var win = $(window);
-    // 自动播放插件
-    module.exports = {
-        attrs: {
-            autoplay: false,
-            // 自动播放的间隔时间
-            interval: 5e3
-        },
-        isNeeded: function() {
-            return this.get("autoplay");
-        },
-        install: function() {
-            var element = this.element;
-            var EVENT_NS = "." + this.cid;
-            var timer;
-            var interval = this.get("interval");
-            var that = this;
-            // start autoplay
-            start();
-            function start() {
-                // 停止之前的
-                stop();
-                // 设置状态
-                that.paused = false;
-                // 开始现在的
-                timer = setInterval(function() {
-                    if (that.paused) return;
-                    that.next();
-                }, interval);
-            }
-            function stop() {
-                if (timer) {
-                    clearInterval(timer);
-                    timer = null;
-                }
-                that.paused = true;
-            }
-            // public api
-            this.stop = stop;
-            this.start = start;
-            // 滚出可视区域后,停止自动播放
-            this._scrollDetect = throttle(function() {
-                that[isInViewport(element) ? "start" : "stop"]();
-            });
-            win.on("scroll" + EVENT_NS, this._scrollDetect);
-            // 鼠标悬停时,停止自动播放
-            this.element.hover(stop, start);
-        },
-        destroy: function() {
-            var EVENT_NS = "." + this.cid;
-            this.stop && this.stop();
-            if (this._scrollDetect) {
-                this._scrollDetect.stop();
-                win.off("scroll" + EVENT_NS);
-            }
-        }
-    };
-    // Helpers
-    // -------
-    function throttle(fn, ms) {
-        ms = ms || 200;
-        var throttleTimer;
-        function f() {
-            f.stop();
-            throttleTimer = setTimeout(fn, ms);
-        }
-        f.stop = function() {
-            if (throttleTimer) {
-                clearTimeout(throttleTimer);
-                throttleTimer = 0;
-            }
-        };
-        return f;
-    }
-    function isInViewport(element) {
-        var scrollTop = win.scrollTop();
-        var scrollBottom = scrollTop + win.height();
-        var elementTop = element.offset().top;
-        var elementBottom = elementTop + element.height();
-        // 只判断垂直位置是否在可视区域,不判断水平。只有要部分区域在可视区域,就返回 true
-        return elementTop < scrollBottom && elementBottom > scrollTop;
-    }
-});
-
-define("arale/switchable/1.0.2/plugins/circular-debug", [ "$-debug", "arale/switchable/1.0.2/plugins/effects-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var Effects = require("arale/switchable/1.0.2/plugins/effects-debug").Effects;
-    // 无缝循环滚动插件
-    module.exports = {
-        // 仅在开启滚动效果时需要
-        isNeeded: function() {
-            var effect = this.get("effect");
-            var circular = this.get("circular");
-            return circular && (effect === SCROLLX || effect === SCROLLY);
-        },
-        install: function() {
-            this._scrollType = this.get("effect");
-            this.set("effect", "scrollCircular");
-        }
-    };
-    Effects.scrollCircular = function(panelInfo) {
-        var toIndex = panelInfo.toIndex;
-        var fromIndex = panelInfo.fromIndex;
-        var isX = this._scrollType === SCROLLX;
-        var prop = isX ? "left" : "top";
-        var viewDiff = this.get("viewSize")[isX ? 0 : 1];
-        var diff = -viewDiff * toIndex;
-        var props = {};
-        props[prop] = diff + "px";
-        // 开始动画
-        if (fromIndex > -1) {
-            // 开始动画前,先停止掉上一动画
-            if (this.anim) {
-                this.anim.stop(false, true);
-            }
-            var len = this.get("length");
-            // scroll 的 0 -> len-1 应该是正常的从 0->1->2->.. len-1 的切换
-            var isBackwardCritical = fromIndex === 0 && toIndex === len - 1;
-            // len-1 -> 0
-            var isForwardCritical = fromIndex === len - 1 && toIndex === 0;
-            var isBackward = this._isBackward === undefined ? toIndex < fromIndex : this._isBackward;
-            // isBackward 使用下面的判断方式, 会在 nav 上 trigger 从 0 -> len-1 切换时,
-            // 不经过 0->1->2->...-> len-1, 而是 0 反向切换到 len-1;
-            // 而上面的判断方式, nav 上的 trigger 切换是正常的, 只有调用 prev 才从 0 反向切换到 len-1;
-            //var isBackward = isBackwardCritical ||
-            //    (!isForwardCritical && toIndex < fromIndex);
-            // 从第一个反向滚动到最后一个 or 从最后一个正向滚动到第一个
-            var isCritical = isBackward && isBackwardCritical || !isBackward && isForwardCritical;
-            // 在临界点时,先调整 panels 位置
-            if (isCritical) {
-                diff = adjustPosition.call(this, isBackward, prop, viewDiff);
-                props[prop] = diff + "px";
-            }
-            var duration = this.get("duration");
-            var easing = this.get("easing");
-            var that = this;
-            this.anim = this.content.animate(props, duration, easing, function() {
-                that.anim = null;
-                // free
-                // 复原位置
-                if (isCritical) {
-                    resetPosition.call(that, isBackward, prop, viewDiff);
-                }
-            });
-        } else {
-            this.content.css(props);
-        }
-    };
-    // 调整位置
-    function adjustPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        var diff = isBackward ? viewDiff : -viewDiff * len;
-        var panelDiff = isBackward ? -viewDiff * len : viewDiff * len;
-        // 调整 panels 到下一个视图中
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "relative");
-        toPanels.css(prop, panelDiff + "px");
-        // 返回偏移量
-        return diff;
-    }
-    // 复原位置
-    function resetPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        // 滚动完成后,复位到正常状态
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "");
-        toPanels.css(prop, "");
-        // 瞬移到正常位置
-        this.content.css(prop, isBackward ? -viewDiff * (len - 1) : "");
-    }
-});

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/slide.js


+ 0 - 602
2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/switchable-debug.js

@@ -1,602 +0,0 @@
-define("arale/switchable/1.0.2/switchable-debug", [ "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "./plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "./plugins/autoplay-debug", "./plugins/circular-debug" ], function(require, exports, module) {
-    // Switchable
-    // -----------
-    // 可切换组件,核心特征是:有一组可切换的面板(Panel),可通过触点(Trigger)来触发。
-    // 感谢:
-    //  - https://github.com/kissyteam/kissy/tree/6707ecc4cdfddd59e21698c8eb4a50b65dbe7632/src/switchable
-    var $ = require("$-debug");
-    var Widget = require("arale/widget/1.1.1/widget-debug");
-    var Effects = require("./plugins/effects-debug");
-    var Autoplay = require("./plugins/autoplay-debug");
-    var Circular = require("./plugins/circular-debug");
-    var Switchable = Widget.extend({
-        attrs: {
-            // 用户传入的 triggers 和 panels
-            // 可以是 Selector、jQuery 对象、或 DOM 元素集
-            triggers: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            panels: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            classPrefix: "ui-switchable",
-            // 是否包含 triggers,用于没有传入 triggers 时,是否自动生成的判断标准
-            hasTriggers: true,
-            // 触发类型
-            triggerType: "hover",
-            // or 'click'
-            // 触发延迟
-            delay: 100,
-            // 初始切换到哪个面板
-            activeIndex: {
-                value: 0,
-                setter: function(val) {
-                    return parseInt(val) || 0;
-                }
-            },
-            // 一屏内有多少个 panels
-            step: 1,
-            // 有多少屏
-            length: {
-                readOnly: true,
-                getter: function() {
-                    return Math.ceil(this.get("panels").length / this.get("step"));
-                }
-            },
-            // 可见视图区域的大小。一般不需要设定此值,仅当获取值不正确时,用于手工指定大小
-            viewSize: [],
-            activeTriggerClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-active";
-                }
-            }
-        },
-        setup: function() {
-            this._initConstClass();
-            this._initElement();
-            var role = this._getDatasetRole();
-            this._initPanels(role);
-            // 配置中的 triggers > dataset > 自动生成
-            this._initTriggers(role);
-            this._bindTriggers();
-            this._initPlugins();
-            // 渲染默认初始状态
-            this.render();
-        },
-        _initConstClass: function() {
-            this.CONST = constClass(this.get("classPrefix"));
-        },
-        _initElement: function() {
-            this.element.addClass(this.CONST.UI_SWITCHABLE);
-        },
-        // 从 HTML 标记中获取各个 role, 替代原来的 markupType
-        _getDatasetRole: function() {
-            var self = this;
-            var role = {};
-            var roles = [ "trigger", "panel", "nav", "content" ];
-            $.each(roles, function(index, key) {
-                var elems = self.$("[data-switchable-role=" + key + "]");
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _initPanels: function(role) {
-            var panels = this.get("panels");
-            // 先获取 panels 和 content
-            if (panels.length > 0) {} else if (role.panel) {
-                this.set("panels", panels = role.panel);
-            } else if (role.content) {
-                this.set("panels", panels = role.content.find("> *"));
-                this.content = role.content;
-            }
-            if (panels.length === 0) {
-                throw new Error("panels.length is ZERO");
-            }
-            if (!this.content) {
-                this.content = panels.parent();
-            }
-            this.content.addClass(this.CONST.CONTENT_CLASS);
-            this.get("panels").addClass(this.CONST.PANEL_CLASS);
-        },
-        _initTriggers: function(role) {
-            var triggers = this.get("triggers");
-            // 再获取 triggers 和 nav
-            if (triggers.length > 0) {} else if (role.trigger) {
-                this.set("triggers", triggers = role.trigger);
-            } else if (role.nav) {
-                triggers = role.nav.find("> *");
-                // 空的 nav 标记
-                if (triggers.length === 0) {
-                    triggers = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass"), true).appendTo(role.nav);
-                }
-                this.set("triggers", triggers);
-                this.nav = role.nav;
-            } else if (this.get("hasTriggers")) {
-                this.nav = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass")).appendTo(this.element);
-                this.set("triggers", triggers = this.nav.children());
-            }
-            if (!this.nav && triggers.length) {
-                this.nav = triggers.parent();
-            }
-            this.nav && this.nav.addClass(this.CONST.NAV_CLASS);
-            triggers.addClass(this.CONST.TRIGGER_CLASS).each(function(i, trigger) {
-                $(trigger).data("value", i);
-            });
-        },
-        _bindTriggers: function() {
-            var that = this, triggers = this.get("triggers");
-            if (this.get("triggerType") === "click") {
-                triggers.click(focus);
-            } else {
-                triggers.hover(focus, leave);
-            }
-            function focus(ev) {
-                that._onFocusTrigger(ev.type, $(this).data("value"));
-            }
-            function leave() {
-                clearTimeout(that._switchTimer);
-            }
-        },
-        _onFocusTrigger: function(type, index) {
-            var that = this;
-            // click or tab 键激活时
-            if (type === "click") {
-                this.switchTo(index);
-            } else {
-                this._switchTimer = setTimeout(function() {
-                    that.switchTo(index);
-                }, this.get("delay"));
-            }
-        },
-        _initPlugins: function() {
-            this._plugins = [];
-            this._plug(Effects);
-            this._plug(Autoplay);
-            this._plug(Circular);
-        },
-        // 切换到指定 index
-        switchTo: function(toIndex) {
-            this.set("activeIndex", toIndex);
-        },
-        // change 事件触发的前提是当前值和先前值不一致, 所以无需验证 toIndex !== fromIndex
-        _onRenderActiveIndex: function(toIndex, fromIndex) {
-            this._switchTo(toIndex, fromIndex);
-        },
-        _switchTo: function(toIndex, fromIndex) {
-            this.trigger("switch", toIndex, fromIndex);
-            this._switchTrigger(toIndex, fromIndex);
-            this._switchPanel(this._getPanelInfo(toIndex, fromIndex));
-            this.trigger("switched", toIndex, fromIndex);
-            // 恢复手工向后切换标识
-            this._isBackward = undefined;
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            var triggers = this.get("triggers");
-            if (triggers.length < 1) return;
-            triggers.eq(fromIndex).removeClass(this.get("activeTriggerClass"));
-            triggers.eq(toIndex).addClass(this.get("activeTriggerClass"));
-        },
-        _switchPanel: function(panelInfo) {
-            // 默认是最简单的切换效果:直接隐藏/显示
-            panelInfo.fromPanels.hide();
-            panelInfo.toPanels.show();
-        },
-        _getPanelInfo: function(toIndex, fromIndex) {
-            var panels = this.get("panels").get();
-            var step = this.get("step");
-            var fromPanels, toPanels;
-            // 初始情况下 fromIndex 为 undefined
-            if (fromIndex > -1) {
-                fromPanels = panels.slice(fromIndex * step, (fromIndex + 1) * step);
-            }
-            toPanels = panels.slice(toIndex * step, (toIndex + 1) * step);
-            return {
-                toIndex: toIndex,
-                fromIndex: fromIndex,
-                toPanels: $(toPanels),
-                fromPanels: $(fromPanels)
-            };
-        },
-        // 切换到上一视图
-        prev: function() {
-            //  设置手工向后切换标识, 外部调用 prev 一样
-            this._isBackward = true;
-            var fromIndex = this.get("activeIndex");
-            // 考虑循环切换的情况
-            var index = (fromIndex - 1 + this.get("length")) % this.get("length");
-            this.switchTo(index);
-        },
-        // 切换到下一视图
-        next: function() {
-            this._isBackward = false;
-            var fromIndex = this.get("activeIndex");
-            var index = (fromIndex + 1) % this.get("length");
-            this.switchTo(index);
-        },
-        _plug: function(plugin) {
-            var pluginAttrs = plugin.attrs;
-            if (pluginAttrs) {
-                for (var key in pluginAttrs) {
-                    if (pluginAttrs.hasOwnProperty(key) && // 不覆盖用户传入的配置
-                    !(key in this.attrs)) {
-                        this.set(key, pluginAttrs[key]);
-                    }
-                }
-            }
-            if (!plugin.isNeeded.call(this)) return;
-            if (plugin.install) {
-                plugin.install.call(this);
-            }
-            this._plugins.push(plugin);
-        },
-        destroy: function() {
-            // todo: events
-            var that = this;
-            $.each(this._plugins, function(i, plugin) {
-                if (plugin.destroy) {
-                    plugin.destroy.call(that);
-                }
-            });
-            Switchable.superclass.destroy.call(this);
-        }
-    });
-    module.exports = Switchable;
-    // Helpers
-    // -------
-    function generateTriggersMarkup(length, activeIndex, activeTriggerClass, justChildren) {
-        var nav = $("<ul>");
-        for (var i = 0; i < length; i++) {
-            var className = i === activeIndex ? activeTriggerClass : "";
-            $("<li>", {
-                "class": className,
-                html: i + 1
-            }).appendTo(nav);
-        }
-        return justChildren ? nav.children() : nav;
-    }
-    // 内部默认的 className
-    function constClass(classPrefix) {
-        return {
-            UI_SWITCHABLE: classPrefix || "",
-            NAV_CLASS: classPrefix ? classPrefix + "-nav" : "",
-            CONTENT_CLASS: classPrefix ? classPrefix + "-content" : "",
-            TRIGGER_CLASS: classPrefix ? classPrefix + "-trigger" : "",
-            PANEL_CLASS: classPrefix ? classPrefix + "-panel" : "",
-            PREV_BTN_CLASS: classPrefix ? classPrefix + "-prev-btn" : "",
-            NEXT_BTN_CLASS: classPrefix ? classPrefix + "-next-btn" : ""
-        };
-    }
-});
-
-define("arale/switchable/1.0.2/plugins/effects-debug", [ "$-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    require("arale/easing/1.0.0/easing-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var FADE = "fade";
-    // 切换效果插件
-    module.exports = {
-        attrs: {
-            // 切换效果,可取 scrollx | scrolly | fade 或直接传入 effect function
-            effect: "none",
-            easing: "linear",
-            duration: 500
-        },
-        isNeeded: function() {
-            return this.get("effect") !== "none";
-        },
-        install: function() {
-            var panels = this.get("panels");
-            // 注:
-            // 1. 所有 panel 的尺寸应该相同
-            //    最好指定第一个 panel 的 width 和 height
-            //    因为 Safari 下,图片未加载时,读取的 offsetHeight 等值会不对
-            // 2. 初始化 panels 样式
-            //    这些特效需要将 panels 都显示出来
-            // 3. 在 CSS 里,需要给 container 设定高宽和 overflow: hidden
-            panels.show();
-            var effect = this.get("effect");
-            var step = this.get("step");
-            var isFunction = $.isFunction(effect);
-            // 初始化滚动效果
-            if (!isFunction && effect.indexOf("scroll") === 0) {
-                var content = this.content;
-                var firstPanel = panels.eq(0);
-                // 设置定位信息,为滚动效果做铺垫
-                content.css("position", "relative");
-                // 注:content 的父级不一定是 container
-                if (content.parent().css("position") === "static") {
-                    content.parent().css("position", "relative");
-                }
-                // 水平排列
-                if (effect === SCROLLX) {
-                    panels.css("float", "left");
-                    // 设置最大宽度,以保证有空间让 panels 水平排布
-                    // 35791197px 为 360 下 width 最大数值
-                    content.width("35791197px");
-                }
-                // 只有 scrollX, scrollY 需要设置 viewSize
-                // 其他情况下不需要
-                var viewSize = this.get("viewSize");
-                if (!viewSize[0]) {
-                    viewSize[0] = firstPanel.outerWidth() * step;
-                    viewSize[1] = firstPanel.outerHeight() * step;
-                    this.set("viewSize", viewSize);
-                }
-                if (!viewSize[0]) {
-                    throw new Error("Please specify viewSize manually");
-                }
-            } else if (!isFunction && effect === FADE) {
-                var activeIndex = this.get("activeIndex");
-                var min = activeIndex * step;
-                var max = min + step - 1;
-                panels.each(function(i, panel) {
-                    var isActivePanel = i >= min && i <= max;
-                    $(panel).css({
-                        opacity: isActivePanel ? 1 : 0,
-                        position: "absolute",
-                        zIndex: isActivePanel ? 9 : 1
-                    });
-                });
-            }
-            // 覆盖 switchPanel 方法
-            this._switchPanel = function(panelInfo) {
-                var effect = this.get("effect");
-                var fn = $.isFunction(effect) ? effect : Effects[effect];
-                fn.call(this, panelInfo);
-            };
-        }
-    };
-    // 切换效果方法集
-    var Effects = {
-        // 淡隐淡现效果
-        fade: function(panelInfo) {
-            // 简单起见,目前不支持 step > 1 的情景。若需要此效果时,可修改结构来达成。
-            if (this.get("step") > 1) {
-                throw new Error('Effect "fade" only supports step === 1');
-            }
-            var fromPanel = panelInfo.fromPanels.eq(0);
-            var toPanel = panelInfo.toPanels.eq(0);
-            if (this.anim) {
-                // 立刻停止,以开始新的
-                this.anim.stop(false, true);
-            }
-            // 首先显示下一张
-            toPanel.css("opacity", 1);
-            toPanel.show();
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                // 动画切换
-                this.anim = fromPanel.animate({
-                    opacity: 0
-                }, duration, easing, function() {
-                    that.anim = null;
-                    // free
-                    // 切换 z-index
-                    toPanel.css("zIndex", 9);
-                    fromPanel.css("zIndex", 1);
-                    fromPanel.css("display", "none");
-                });
-            } else {
-                toPanel.css("zIndex", 9);
-            }
-        },
-        // 水平/垂直滚动效果
-        scroll: function(panelInfo) {
-            var isX = this.get("effect") === SCROLLX;
-            var diff = this.get("viewSize")[isX ? 0 : 1] * panelInfo.toIndex;
-            var props = {};
-            props[isX ? "left" : "top"] = -diff + "px";
-            if (this.anim) {
-                this.anim.stop();
-            }
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                this.anim = this.content.animate(props, duration, easing, function() {
-                    that.anim = null;
-                });
-            } else {
-                this.content.css(props);
-            }
-        }
-    };
-    Effects[SCROLLY] = Effects.scroll;
-    Effects[SCROLLX] = Effects.scroll;
-    module.exports.Effects = Effects;
-});
-
-define("arale/switchable/1.0.2/plugins/autoplay-debug", [ "$-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var win = $(window);
-    // 自动播放插件
-    module.exports = {
-        attrs: {
-            autoplay: false,
-            // 自动播放的间隔时间
-            interval: 5e3
-        },
-        isNeeded: function() {
-            return this.get("autoplay");
-        },
-        install: function() {
-            var element = this.element;
-            var EVENT_NS = "." + this.cid;
-            var timer;
-            var interval = this.get("interval");
-            var that = this;
-            // start autoplay
-            start();
-            function start() {
-                // 停止之前的
-                stop();
-                // 设置状态
-                that.paused = false;
-                // 开始现在的
-                timer = setInterval(function() {
-                    if (that.paused) return;
-                    that.next();
-                }, interval);
-            }
-            function stop() {
-                if (timer) {
-                    clearInterval(timer);
-                    timer = null;
-                }
-                that.paused = true;
-            }
-            // public api
-            this.stop = stop;
-            this.start = start;
-            // 滚出可视区域后,停止自动播放
-            this._scrollDetect = throttle(function() {
-                that[isInViewport(element) ? "start" : "stop"]();
-            });
-            win.on("scroll" + EVENT_NS, this._scrollDetect);
-            // 鼠标悬停时,停止自动播放
-            this.element.hover(stop, start);
-        },
-        destroy: function() {
-            var EVENT_NS = "." + this.cid;
-            this.stop && this.stop();
-            if (this._scrollDetect) {
-                this._scrollDetect.stop();
-                win.off("scroll" + EVENT_NS);
-            }
-        }
-    };
-    // Helpers
-    // -------
-    function throttle(fn, ms) {
-        ms = ms || 200;
-        var throttleTimer;
-        function f() {
-            f.stop();
-            throttleTimer = setTimeout(fn, ms);
-        }
-        f.stop = function() {
-            if (throttleTimer) {
-                clearTimeout(throttleTimer);
-                throttleTimer = 0;
-            }
-        };
-        return f;
-    }
-    function isInViewport(element) {
-        var scrollTop = win.scrollTop();
-        var scrollBottom = scrollTop + win.height();
-        var elementTop = element.offset().top;
-        var elementBottom = elementTop + element.height();
-        // 只判断垂直位置是否在可视区域,不判断水平。只有要部分区域在可视区域,就返回 true
-        return elementTop < scrollBottom && elementBottom > scrollTop;
-    }
-});
-
-define("arale/switchable/1.0.2/plugins/circular-debug", [ "$-debug", "arale/switchable/1.0.2/plugins/effects-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var Effects = require("arale/switchable/1.0.2/plugins/effects-debug").Effects;
-    // 无缝循环滚动插件
-    module.exports = {
-        // 仅在开启滚动效果时需要
-        isNeeded: function() {
-            var effect = this.get("effect");
-            var circular = this.get("circular");
-            return circular && (effect === SCROLLX || effect === SCROLLY);
-        },
-        install: function() {
-            this._scrollType = this.get("effect");
-            this.set("effect", "scrollCircular");
-        }
-    };
-    Effects.scrollCircular = function(panelInfo) {
-        var toIndex = panelInfo.toIndex;
-        var fromIndex = panelInfo.fromIndex;
-        var isX = this._scrollType === SCROLLX;
-        var prop = isX ? "left" : "top";
-        var viewDiff = this.get("viewSize")[isX ? 0 : 1];
-        var diff = -viewDiff * toIndex;
-        var props = {};
-        props[prop] = diff + "px";
-        // 开始动画
-        if (fromIndex > -1) {
-            // 开始动画前,先停止掉上一动画
-            if (this.anim) {
-                this.anim.stop(false, true);
-            }
-            var len = this.get("length");
-            // scroll 的 0 -> len-1 应该是正常的从 0->1->2->.. len-1 的切换
-            var isBackwardCritical = fromIndex === 0 && toIndex === len - 1;
-            // len-1 -> 0
-            var isForwardCritical = fromIndex === len - 1 && toIndex === 0;
-            var isBackward = this._isBackward === undefined ? toIndex < fromIndex : this._isBackward;
-            // isBackward 使用下面的判断方式, 会在 nav 上 trigger 从 0 -> len-1 切换时,
-            // 不经过 0->1->2->...-> len-1, 而是 0 反向切换到 len-1;
-            // 而上面的判断方式, nav 上的 trigger 切换是正常的, 只有调用 prev 才从 0 反向切换到 len-1;
-            //var isBackward = isBackwardCritical ||
-            //    (!isForwardCritical && toIndex < fromIndex);
-            // 从第一个反向滚动到最后一个 or 从最后一个正向滚动到第一个
-            var isCritical = isBackward && isBackwardCritical || !isBackward && isForwardCritical;
-            // 在临界点时,先调整 panels 位置
-            if (isCritical) {
-                diff = adjustPosition.call(this, isBackward, prop, viewDiff);
-                props[prop] = diff + "px";
-            }
-            var duration = this.get("duration");
-            var easing = this.get("easing");
-            var that = this;
-            this.anim = this.content.animate(props, duration, easing, function() {
-                that.anim = null;
-                // free
-                // 复原位置
-                if (isCritical) {
-                    resetPosition.call(that, isBackward, prop, viewDiff);
-                }
-            });
-        } else {
-            this.content.css(props);
-        }
-    };
-    // 调整位置
-    function adjustPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        var diff = isBackward ? viewDiff : -viewDiff * len;
-        var panelDiff = isBackward ? -viewDiff * len : viewDiff * len;
-        // 调整 panels 到下一个视图中
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "relative");
-        toPanels.css(prop, panelDiff + "px");
-        // 返回偏移量
-        return diff;
-    }
-    // 复原位置
-    function resetPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        // 滚动完成后,复位到正常状态
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "");
-        toPanels.css(prop, "");
-        // 瞬移到正常位置
-        this.content.css(prop, isBackward ? -viewDiff * (len - 1) : "");
-    }
-});

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/switchable.js


+ 0 - 608
2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/tabs-debug.js

@@ -1,608 +0,0 @@
-define("arale/switchable/1.0.2/tabs-debug", [ "./switchable-debug", "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "./plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "./plugins/autoplay-debug", "./plugins/circular-debug" ], function(require, exports, module) {
-    var Switchable = require("./switchable-debug");
-    // 展现型标签页组件
-    module.exports = Switchable.extend({});
-});
-
-define("arale/switchable/1.0.2/switchable-debug", [ "$-debug", "arale/widget/1.1.1/widget-debug", "arale/base/1.1.1/base-debug", "arale/class/1.1.0/class-debug", "arale/events/1.1.0/events-debug", "arale/switchable/1.0.2/plugins/effects-debug", "arale/easing/1.0.0/easing-debug", "arale/switchable/1.0.2/plugins/autoplay-debug", "arale/switchable/1.0.2/plugins/circular-debug" ], function(require, exports, module) {
-    // Switchable
-    // -----------
-    // 可切换组件,核心特征是:有一组可切换的面板(Panel),可通过触点(Trigger)来触发。
-    // 感谢:
-    //  - https://github.com/kissyteam/kissy/tree/6707ecc4cdfddd59e21698c8eb4a50b65dbe7632/src/switchable
-    var $ = require("$-debug");
-    var Widget = require("arale/widget/1.1.1/widget-debug");
-    var Effects = require("arale/switchable/1.0.2/plugins/effects-debug");
-    var Autoplay = require("arale/switchable/1.0.2/plugins/autoplay-debug");
-    var Circular = require("arale/switchable/1.0.2/plugins/circular-debug");
-    var Switchable = Widget.extend({
-        attrs: {
-            // 用户传入的 triggers 和 panels
-            // 可以是 Selector、jQuery 对象、或 DOM 元素集
-            triggers: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            panels: {
-                value: [],
-                getter: function(val) {
-                    return $(val);
-                }
-            },
-            classPrefix: "ui-switchable",
-            // 是否包含 triggers,用于没有传入 triggers 时,是否自动生成的判断标准
-            hasTriggers: true,
-            // 触发类型
-            triggerType: "hover",
-            // or 'click'
-            // 触发延迟
-            delay: 100,
-            // 初始切换到哪个面板
-            activeIndex: {
-                value: 0,
-                setter: function(val) {
-                    return parseInt(val) || 0;
-                }
-            },
-            // 一屏内有多少个 panels
-            step: 1,
-            // 有多少屏
-            length: {
-                readOnly: true,
-                getter: function() {
-                    return Math.ceil(this.get("panels").length / this.get("step"));
-                }
-            },
-            // 可见视图区域的大小。一般不需要设定此值,仅当获取值不正确时,用于手工指定大小
-            viewSize: [],
-            activeTriggerClass: {
-                getter: function(val) {
-                    return val ? val : this.get("classPrefix") + "-active";
-                }
-            }
-        },
-        setup: function() {
-            this._initConstClass();
-            this._initElement();
-            var role = this._getDatasetRole();
-            this._initPanels(role);
-            // 配置中的 triggers > dataset > 自动生成
-            this._initTriggers(role);
-            this._bindTriggers();
-            this._initPlugins();
-            // 渲染默认初始状态
-            this.render();
-        },
-        _initConstClass: function() {
-            this.CONST = constClass(this.get("classPrefix"));
-        },
-        _initElement: function() {
-            this.element.addClass(this.CONST.UI_SWITCHABLE);
-        },
-        // 从 HTML 标记中获取各个 role, 替代原来的 markupType
-        _getDatasetRole: function() {
-            var self = this;
-            var role = {};
-            var roles = [ "trigger", "panel", "nav", "content" ];
-            $.each(roles, function(index, key) {
-                var elems = self.$("[data-switchable-role=" + key + "]");
-                if (elems.length) {
-                    role[key] = elems;
-                }
-            });
-            return role;
-        },
-        _initPanels: function(role) {
-            var panels = this.get("panels");
-            // 先获取 panels 和 content
-            if (panels.length > 0) {} else if (role.panel) {
-                this.set("panels", panels = role.panel);
-            } else if (role.content) {
-                this.set("panels", panels = role.content.find("> *"));
-                this.content = role.content;
-            }
-            if (panels.length === 0) {
-                throw new Error("panels.length is ZERO");
-            }
-            if (!this.content) {
-                this.content = panels.parent();
-            }
-            this.content.addClass(this.CONST.CONTENT_CLASS);
-            this.get("panels").addClass(this.CONST.PANEL_CLASS);
-        },
-        _initTriggers: function(role) {
-            var triggers = this.get("triggers");
-            // 再获取 triggers 和 nav
-            if (triggers.length > 0) {} else if (role.trigger) {
-                this.set("triggers", triggers = role.trigger);
-            } else if (role.nav) {
-                triggers = role.nav.find("> *");
-                // 空的 nav 标记
-                if (triggers.length === 0) {
-                    triggers = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass"), true).appendTo(role.nav);
-                }
-                this.set("triggers", triggers);
-                this.nav = role.nav;
-            } else if (this.get("hasTriggers")) {
-                this.nav = generateTriggersMarkup(this.get("length"), this.get("activeIndex"), this.get("activeTriggerClass")).appendTo(this.element);
-                this.set("triggers", triggers = this.nav.children());
-            }
-            if (!this.nav && triggers.length) {
-                this.nav = triggers.parent();
-            }
-            this.nav && this.nav.addClass(this.CONST.NAV_CLASS);
-            triggers.addClass(this.CONST.TRIGGER_CLASS).each(function(i, trigger) {
-                $(trigger).data("value", i);
-            });
-        },
-        _bindTriggers: function() {
-            var that = this, triggers = this.get("triggers");
-            if (this.get("triggerType") === "click") {
-                triggers.click(focus);
-            } else {
-                triggers.hover(focus, leave);
-            }
-            function focus(ev) {
-                that._onFocusTrigger(ev.type, $(this).data("value"));
-            }
-            function leave() {
-                clearTimeout(that._switchTimer);
-            }
-        },
-        _onFocusTrigger: function(type, index) {
-            var that = this;
-            // click or tab 键激活时
-            if (type === "click") {
-                this.switchTo(index);
-            } else {
-                this._switchTimer = setTimeout(function() {
-                    that.switchTo(index);
-                }, this.get("delay"));
-            }
-        },
-        _initPlugins: function() {
-            this._plugins = [];
-            this._plug(Effects);
-            this._plug(Autoplay);
-            this._plug(Circular);
-        },
-        // 切换到指定 index
-        switchTo: function(toIndex) {
-            this.set("activeIndex", toIndex);
-        },
-        // change 事件触发的前提是当前值和先前值不一致, 所以无需验证 toIndex !== fromIndex
-        _onRenderActiveIndex: function(toIndex, fromIndex) {
-            this._switchTo(toIndex, fromIndex);
-        },
-        _switchTo: function(toIndex, fromIndex) {
-            this.trigger("switch", toIndex, fromIndex);
-            this._switchTrigger(toIndex, fromIndex);
-            this._switchPanel(this._getPanelInfo(toIndex, fromIndex));
-            this.trigger("switched", toIndex, fromIndex);
-            // 恢复手工向后切换标识
-            this._isBackward = undefined;
-        },
-        _switchTrigger: function(toIndex, fromIndex) {
-            var triggers = this.get("triggers");
-            if (triggers.length < 1) return;
-            triggers.eq(fromIndex).removeClass(this.get("activeTriggerClass"));
-            triggers.eq(toIndex).addClass(this.get("activeTriggerClass"));
-        },
-        _switchPanel: function(panelInfo) {
-            // 默认是最简单的切换效果:直接隐藏/显示
-            panelInfo.fromPanels.hide();
-            panelInfo.toPanels.show();
-        },
-        _getPanelInfo: function(toIndex, fromIndex) {
-            var panels = this.get("panels").get();
-            var step = this.get("step");
-            var fromPanels, toPanels;
-            // 初始情况下 fromIndex 为 undefined
-            if (fromIndex > -1) {
-                fromPanels = panels.slice(fromIndex * step, (fromIndex + 1) * step);
-            }
-            toPanels = panels.slice(toIndex * step, (toIndex + 1) * step);
-            return {
-                toIndex: toIndex,
-                fromIndex: fromIndex,
-                toPanels: $(toPanels),
-                fromPanels: $(fromPanels)
-            };
-        },
-        // 切换到上一视图
-        prev: function() {
-            //  设置手工向后切换标识, 外部调用 prev 一样
-            this._isBackward = true;
-            var fromIndex = this.get("activeIndex");
-            // 考虑循环切换的情况
-            var index = (fromIndex - 1 + this.get("length")) % this.get("length");
-            this.switchTo(index);
-        },
-        // 切换到下一视图
-        next: function() {
-            this._isBackward = false;
-            var fromIndex = this.get("activeIndex");
-            var index = (fromIndex + 1) % this.get("length");
-            this.switchTo(index);
-        },
-        _plug: function(plugin) {
-            var pluginAttrs = plugin.attrs;
-            if (pluginAttrs) {
-                for (var key in pluginAttrs) {
-                    if (pluginAttrs.hasOwnProperty(key) && // 不覆盖用户传入的配置
-                    !(key in this.attrs)) {
-                        this.set(key, pluginAttrs[key]);
-                    }
-                }
-            }
-            if (!plugin.isNeeded.call(this)) return;
-            if (plugin.install) {
-                plugin.install.call(this);
-            }
-            this._plugins.push(plugin);
-        },
-        destroy: function() {
-            // todo: events
-            var that = this;
-            $.each(this._plugins, function(i, plugin) {
-                if (plugin.destroy) {
-                    plugin.destroy.call(that);
-                }
-            });
-            Switchable.superclass.destroy.call(this);
-        }
-    });
-    module.exports = Switchable;
-    // Helpers
-    // -------
-    function generateTriggersMarkup(length, activeIndex, activeTriggerClass, justChildren) {
-        var nav = $("<ul>");
-        for (var i = 0; i < length; i++) {
-            var className = i === activeIndex ? activeTriggerClass : "";
-            $("<li>", {
-                "class": className,
-                html: i + 1
-            }).appendTo(nav);
-        }
-        return justChildren ? nav.children() : nav;
-    }
-    // 内部默认的 className
-    function constClass(classPrefix) {
-        return {
-            UI_SWITCHABLE: classPrefix || "",
-            NAV_CLASS: classPrefix ? classPrefix + "-nav" : "",
-            CONTENT_CLASS: classPrefix ? classPrefix + "-content" : "",
-            TRIGGER_CLASS: classPrefix ? classPrefix + "-trigger" : "",
-            PANEL_CLASS: classPrefix ? classPrefix + "-panel" : "",
-            PREV_BTN_CLASS: classPrefix ? classPrefix + "-prev-btn" : "",
-            NEXT_BTN_CLASS: classPrefix ? classPrefix + "-next-btn" : ""
-        };
-    }
-});
-
-define("arale/switchable/1.0.2/plugins/effects-debug", [ "$-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    require("arale/easing/1.0.0/easing-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var FADE = "fade";
-    // 切换效果插件
-    module.exports = {
-        attrs: {
-            // 切换效果,可取 scrollx | scrolly | fade 或直接传入 effect function
-            effect: "none",
-            easing: "linear",
-            duration: 500
-        },
-        isNeeded: function() {
-            return this.get("effect") !== "none";
-        },
-        install: function() {
-            var panels = this.get("panels");
-            // 注:
-            // 1. 所有 panel 的尺寸应该相同
-            //    最好指定第一个 panel 的 width 和 height
-            //    因为 Safari 下,图片未加载时,读取的 offsetHeight 等值会不对
-            // 2. 初始化 panels 样式
-            //    这些特效需要将 panels 都显示出来
-            // 3. 在 CSS 里,需要给 container 设定高宽和 overflow: hidden
-            panels.show();
-            var effect = this.get("effect");
-            var step = this.get("step");
-            var isFunction = $.isFunction(effect);
-            // 初始化滚动效果
-            if (!isFunction && effect.indexOf("scroll") === 0) {
-                var content = this.content;
-                var firstPanel = panels.eq(0);
-                // 设置定位信息,为滚动效果做铺垫
-                content.css("position", "relative");
-                // 注:content 的父级不一定是 container
-                if (content.parent().css("position") === "static") {
-                    content.parent().css("position", "relative");
-                }
-                // 水平排列
-                if (effect === SCROLLX) {
-                    panels.css("float", "left");
-                    // 设置最大宽度,以保证有空间让 panels 水平排布
-                    // 35791197px 为 360 下 width 最大数值
-                    content.width("35791197px");
-                }
-                // 只有 scrollX, scrollY 需要设置 viewSize
-                // 其他情况下不需要
-                var viewSize = this.get("viewSize");
-                if (!viewSize[0]) {
-                    viewSize[0] = firstPanel.outerWidth() * step;
-                    viewSize[1] = firstPanel.outerHeight() * step;
-                    this.set("viewSize", viewSize);
-                }
-                if (!viewSize[0]) {
-                    throw new Error("Please specify viewSize manually");
-                }
-            } else if (!isFunction && effect === FADE) {
-                var activeIndex = this.get("activeIndex");
-                var min = activeIndex * step;
-                var max = min + step - 1;
-                panels.each(function(i, panel) {
-                    var isActivePanel = i >= min && i <= max;
-                    $(panel).css({
-                        opacity: isActivePanel ? 1 : 0,
-                        position: "absolute",
-                        zIndex: isActivePanel ? 9 : 1
-                    });
-                });
-            }
-            // 覆盖 switchPanel 方法
-            this._switchPanel = function(panelInfo) {
-                var effect = this.get("effect");
-                var fn = $.isFunction(effect) ? effect : Effects[effect];
-                fn.call(this, panelInfo);
-            };
-        }
-    };
-    // 切换效果方法集
-    var Effects = {
-        // 淡隐淡现效果
-        fade: function(panelInfo) {
-            // 简单起见,目前不支持 step > 1 的情景。若需要此效果时,可修改结构来达成。
-            if (this.get("step") > 1) {
-                throw new Error('Effect "fade" only supports step === 1');
-            }
-            var fromPanel = panelInfo.fromPanels.eq(0);
-            var toPanel = panelInfo.toPanels.eq(0);
-            if (this.anim) {
-                // 立刻停止,以开始新的
-                this.anim.stop(false, true);
-            }
-            // 首先显示下一张
-            toPanel.css("opacity", 1);
-            toPanel.show();
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                // 动画切换
-                this.anim = fromPanel.animate({
-                    opacity: 0
-                }, duration, easing, function() {
-                    that.anim = null;
-                    // free
-                    // 切换 z-index
-                    toPanel.css("zIndex", 9);
-                    fromPanel.css("zIndex", 1);
-                    fromPanel.css("display", "none");
-                });
-            } else {
-                toPanel.css("zIndex", 9);
-            }
-        },
-        // 水平/垂直滚动效果
-        scroll: function(panelInfo) {
-            var isX = this.get("effect") === SCROLLX;
-            var diff = this.get("viewSize")[isX ? 0 : 1] * panelInfo.toIndex;
-            var props = {};
-            props[isX ? "left" : "top"] = -diff + "px";
-            if (this.anim) {
-                this.anim.stop();
-            }
-            if (panelInfo.fromIndex > -1) {
-                var that = this;
-                var duration = this.get("duration");
-                var easing = this.get("easing");
-                this.anim = this.content.animate(props, duration, easing, function() {
-                    that.anim = null;
-                });
-            } else {
-                this.content.css(props);
-            }
-        }
-    };
-    Effects[SCROLLY] = Effects.scroll;
-    Effects[SCROLLX] = Effects.scroll;
-    module.exports.Effects = Effects;
-});
-
-define("arale/switchable/1.0.2/plugins/autoplay-debug", [ "$-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var win = $(window);
-    // 自动播放插件
-    module.exports = {
-        attrs: {
-            autoplay: false,
-            // 自动播放的间隔时间
-            interval: 5e3
-        },
-        isNeeded: function() {
-            return this.get("autoplay");
-        },
-        install: function() {
-            var element = this.element;
-            var EVENT_NS = "." + this.cid;
-            var timer;
-            var interval = this.get("interval");
-            var that = this;
-            // start autoplay
-            start();
-            function start() {
-                // 停止之前的
-                stop();
-                // 设置状态
-                that.paused = false;
-                // 开始现在的
-                timer = setInterval(function() {
-                    if (that.paused) return;
-                    that.next();
-                }, interval);
-            }
-            function stop() {
-                if (timer) {
-                    clearInterval(timer);
-                    timer = null;
-                }
-                that.paused = true;
-            }
-            // public api
-            this.stop = stop;
-            this.start = start;
-            // 滚出可视区域后,停止自动播放
-            this._scrollDetect = throttle(function() {
-                that[isInViewport(element) ? "start" : "stop"]();
-            });
-            win.on("scroll" + EVENT_NS, this._scrollDetect);
-            // 鼠标悬停时,停止自动播放
-            this.element.hover(stop, start);
-        },
-        destroy: function() {
-            var EVENT_NS = "." + this.cid;
-            this.stop && this.stop();
-            if (this._scrollDetect) {
-                this._scrollDetect.stop();
-                win.off("scroll" + EVENT_NS);
-            }
-        }
-    };
-    // Helpers
-    // -------
-    function throttle(fn, ms) {
-        ms = ms || 200;
-        var throttleTimer;
-        function f() {
-            f.stop();
-            throttleTimer = setTimeout(fn, ms);
-        }
-        f.stop = function() {
-            if (throttleTimer) {
-                clearTimeout(throttleTimer);
-                throttleTimer = 0;
-            }
-        };
-        return f;
-    }
-    function isInViewport(element) {
-        var scrollTop = win.scrollTop();
-        var scrollBottom = scrollTop + win.height();
-        var elementTop = element.offset().top;
-        var elementBottom = elementTop + element.height();
-        // 只判断垂直位置是否在可视区域,不判断水平。只有要部分区域在可视区域,就返回 true
-        return elementTop < scrollBottom && elementBottom > scrollTop;
-    }
-});
-
-define("arale/switchable/1.0.2/plugins/circular-debug", [ "$-debug", "arale/switchable/1.0.2/plugins/effects-debug", "arale/easing/1.0.0/easing-debug" ], function(require, exports, module) {
-    var $ = require("$-debug");
-    var SCROLLX = "scrollx";
-    var SCROLLY = "scrolly";
-    var Effects = require("arale/switchable/1.0.2/plugins/effects-debug").Effects;
-    // 无缝循环滚动插件
-    module.exports = {
-        // 仅在开启滚动效果时需要
-        isNeeded: function() {
-            var effect = this.get("effect");
-            var circular = this.get("circular");
-            return circular && (effect === SCROLLX || effect === SCROLLY);
-        },
-        install: function() {
-            this._scrollType = this.get("effect");
-            this.set("effect", "scrollCircular");
-        }
-    };
-    Effects.scrollCircular = function(panelInfo) {
-        var toIndex = panelInfo.toIndex;
-        var fromIndex = panelInfo.fromIndex;
-        var isX = this._scrollType === SCROLLX;
-        var prop = isX ? "left" : "top";
-        var viewDiff = this.get("viewSize")[isX ? 0 : 1];
-        var diff = -viewDiff * toIndex;
-        var props = {};
-        props[prop] = diff + "px";
-        // 开始动画
-        if (fromIndex > -1) {
-            // 开始动画前,先停止掉上一动画
-            if (this.anim) {
-                this.anim.stop(false, true);
-            }
-            var len = this.get("length");
-            // scroll 的 0 -> len-1 应该是正常的从 0->1->2->.. len-1 的切换
-            var isBackwardCritical = fromIndex === 0 && toIndex === len - 1;
-            // len-1 -> 0
-            var isForwardCritical = fromIndex === len - 1 && toIndex === 0;
-            var isBackward = this._isBackward === undefined ? toIndex < fromIndex : this._isBackward;
-            // isBackward 使用下面的判断方式, 会在 nav 上 trigger 从 0 -> len-1 切换时,
-            // 不经过 0->1->2->...-> len-1, 而是 0 反向切换到 len-1;
-            // 而上面的判断方式, nav 上的 trigger 切换是正常的, 只有调用 prev 才从 0 反向切换到 len-1;
-            //var isBackward = isBackwardCritical ||
-            //    (!isForwardCritical && toIndex < fromIndex);
-            // 从第一个反向滚动到最后一个 or 从最后一个正向滚动到第一个
-            var isCritical = isBackward && isBackwardCritical || !isBackward && isForwardCritical;
-            // 在临界点时,先调整 panels 位置
-            if (isCritical) {
-                diff = adjustPosition.call(this, isBackward, prop, viewDiff);
-                props[prop] = diff + "px";
-            }
-            var duration = this.get("duration");
-            var easing = this.get("easing");
-            var that = this;
-            this.anim = this.content.animate(props, duration, easing, function() {
-                that.anim = null;
-                // free
-                // 复原位置
-                if (isCritical) {
-                    resetPosition.call(that, isBackward, prop, viewDiff);
-                }
-            });
-        } else {
-            this.content.css(props);
-        }
-    };
-    // 调整位置
-    function adjustPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        var diff = isBackward ? viewDiff : -viewDiff * len;
-        var panelDiff = isBackward ? -viewDiff * len : viewDiff * len;
-        // 调整 panels 到下一个视图中
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "relative");
-        toPanels.css(prop, panelDiff + "px");
-        // 返回偏移量
-        return diff;
-    }
-    // 复原位置
-    function resetPosition(isBackward, prop, viewDiff) {
-        var step = this.get("step");
-        var len = this.get("length");
-        var start = isBackward ? len - 1 : 0;
-        var from = start * step;
-        var to = (start + 1) * step;
-        // 滚动完成后,复位到正常状态
-        var toPanels = $(this.get("panels").get().slice(from, to));
-        toPanels.css("position", "");
-        toPanels.css(prop, "");
-        // 瞬移到正常位置
-        this.content.css(prop, isBackward ? -viewDiff * (len - 1) : "");
-    }
-});

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
2018专题/球球大作战竞猜/src/modules/switchable/1.0.2/tabs.js


+ 0 - 6
2018专题/球球大作战竞猜/src/modules/switchable/demo/.ftppass

@@ -1,6 +0,0 @@
-{
-	"publisher": {
-		"username": "limo",
-		"password": "limo123"
-	}
-}	

+ 0 - 23
2018专题/球球大作战竞猜/src/modules/switchable/demo/.gitignore

@@ -1,23 +0,0 @@
-*.iml
-.idea/
-.ipr
-.iws
-*~
-~*
-*.diff
-*.patch
-*.bak
-.DS_Store
-Thumbs.db
-.project
-.*proj
-.svn/
-*.swp
-*.swo
-*.pyc
-*.pyo
-build
-node_modules
-_site
-sea-modules
-.cache

+ 0 - 19
2018专题/球球大作战竞猜/src/modules/switchable/demo/.travis.yml

@@ -1,19 +0,0 @@
-language: node_js
-
-node_js:
-  - 0.10
-
-install:
-  - npm install mocha-browser nico
-
-before_script:
-  - git clone git://github.com/aralejs/nico-arale.git _theme
-  - node_modules/.bin/nico build --theme _theme -C _theme/nico.js
-
-script:
-  - node_modules/.bin/mocha-browser _site/tests/runner.html -S
-
-after_success:
-  - npm install jscoverage coveralls
-  - node_modules/.bin/jscoverage --encoding=utf8 src _site/src-cov
-  - node_modules/.bin/mocha-browser _site/tests/runner.html?cov -S -R lcov | node_modules/.bin/coveralls

+ 0 - 22
2018专题/球球大作战竞猜/src/modules/switchable/demo/README.md

@@ -1,22 +0,0 @@
-# switchable
-
----
-
-可切换组件,包含以下:
-
-* 幻灯片,提供点击、鼠标移近触发幻灯片切换以及可设置幻灯片的自动播放、循环播放、切换方向(X/Y轴)。
-
-* 手风琴,提供点击、鼠标移近触发展开折叠内容,可横向排列或纵向排列。
-
-* 图片滚动,参考幻灯片。
-
-* 文章滚动,参考幻灯片。
-
-* 选项卡,提供点击、鼠标移近触发切换卡项,可设置固定高度或自适应内容高度。
-
----
-更详细的配置请移步至[arale/switchable组件配置][1]
-
-
-[1]: http://aralejs.org/switchable/
-

+ 0 - 144
2018专题/球球大作战竞猜/src/modules/switchable/demo/examples/accordion.md

@@ -1,144 +0,0 @@
-# 手风琴
-
----------
-
-## 演示
-
-###手风琴-s1(横向折叠 click)
-````html
-<!-- 容器元素 -->
-<div id="accordion1" class="accordion1">
-    <div data-switchable-role="trigger" class="accordion1__trigger">
-        <i></i>
-        <h4 class="accordion1__title">标题1</h4>
-    </div>
-    <div data-switchable-role="panel" class="accordion1__item">
-        <p>正文</p>
-        <p>正文</p>
-    </div>
-    <div data-switchable-role="trigger" class="accordion1__trigger">
-        <i></i>
-        <h4 class="accordion1__title">标题2</h4>
-    </div>
-    <div data-switchable-role="panel" class="accordion1__item">
-        <p>正文2</p>
-        <p>正文2</p>
-        <p>正文2</p>
-        <p>正文2</p>
-    </div>
-    <div data-switchable-role="trigger" class="accordion1__trigger">
-        <i></i>
-        <h4 class="accordion1__title">标题3</h4>
-    </div>
-    <div data-switchable-role="panel" class="accordion1__item">
-        <p>正文3</p>
-        <p>正文</p>
-        <p>正文</p>
-    </div>
-</div>
-
-````
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/accordion'], function(Accordion) {
-    var accordion = new Accordion({
-        element: '#accordion1',
-        activeTriggerClass: 'selected'
-    }).render();
-});
-````
-
-###手风琴-s2(横向折叠 click)
-````html
-<!-- 容器元素 -->
-<div id="accordion2" class="accordion2">
-    <div data-switchable-role="trigger" class="accordion2__trigger">
-        <i></i>
-        <h4 class="accordion2__title">标题1</h4>
-    </div>
-    <div data-switchable-role="panel" class="accordion2__item">
-        <p>正文</p>
-        <p>正文</p>
-    </div>
-    <div data-switchable-role="trigger" class="accordion2__trigger">
-        <i></i>
-        <h4 class="accordion2__title">标题2</h4>
-    </div>
-    <div data-switchable-role="panel" class="accordion2__item">
-        <p>正文2</p>
-        <p>正文2</p>
-        <p>正文2</p>
-        <p>正文2</p>
-    </div>
-    <div data-switchable-role="trigger" class="accordion2__trigger">
-        <i></i>
-        <h4 class="accordion2__title">标题3</h4>
-    </div>
-    <div data-switchable-role="panel" class="accordion2__item">
-        <p>正文3</p>
-        <p>正文</p>
-        <p>正文</p>
-    </div>
-</div>
-
-````
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/accordion'], function(Accordion) {
-    var accordion2 = new Accordion({
-        element: '#accordion2',
-        activeTriggerClass: 'selected'
-    }).render();
-});
-````
-
-###手风琴-s3(纵向折叠 hover)
-````html
-<!-- 容器元素 -->
-<div id="accordion3" class="accordion3">
-    <div data-switchable-role="trigger" class="accordion3__trigger">
-        <i></i>
-        <h4 class="accordion3__title">标题1</h4>
-    </div>
-    <div data-switchable-role="panel" class="accordion3__item">
-        <p>正文</p>
-        <p>正文</p>
-    </div>
-    <div data-switchable-role="trigger" class="accordion3__trigger">
-        <i></i>
-        <h4 class="accordion3__title">标题2</h4>
-    </div>
-    <div data-switchable-role="panel" class="accordion3__item">
-        <p>正文2</p>
-        <p>正文2</p>
-        <p>正文2</p>
-        <p>正文2</p>
-    </div>
-    <div data-switchable-role="trigger" class="accordion3__trigger">
-        <i></i>
-        <h4 class="accordion3__title">标题3</h4>
-    </div>
-    <div data-switchable-role="panel" class="accordion3__item">
-        <p>正文3</p>
-        <p>正文</p>
-        <p>正文</p>
-    </div>
-</div>
-
-````
-
-
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/accordion'], function(Accordion) {
-    var accordion3 = new Accordion({
-        element: '#accordion3',
-        triggerType: 'hover',
-        activeTriggerClass: 'selected'
-    }).render();
-});
-````
-

+ 0 - 271
2018专题/球球大作战竞猜/src/modules/switchable/demo/examples/index.md

@@ -1,271 +0,0 @@
-# 幻灯片
-
----------
-
-## 演示
-
-###幻灯片-s1
-
-````html
-<!-- 容器元素 -->
-
- <div id="slide1" class="slide1">
-     <div class="slide1__content">
-         <ul data-switchable-role="content">
-             <li class="slide1__item"><a class="slide1__item-link" href="#"><img class="slide1__item-img" alt="" src="http://art.yypm.com/320x200x1"></a>
-             </li>
-             <li class="slide1__item"><a class="slide1__item-link" href="#"><img class="slide1__item-img" alt="" src="http://art.yypm.com/320x200x2"></a>
-             </li>
-             <li class="slide1__item"><a class="slide1__item-link" href="#"><img class="slide1__item-img" alt="" src="http://art.yypm.com/320x200x3"></a>
-             </li>
-         </ul>
-     </div>
-     <ul class="slide1__nav" data-switchable-role="nav">
-         <li class="slide1__trigger"><a class="slide1__trigger-link" href="#">微软发布会总结:体感控制器Kinect非常赞!</a></li>
-         <li class="slide1__trigger"><a class="slide1__trigger-link" href="#">任天堂发布会总结:N3DS和豪华游戏阵容公布!</a></li>
-         <li class="slide1__trigger"><a class="slide1__trigger-link" href="#">索尼发布会总结:PS Move开创体感全新体验!</a></li>
-     </ul>
- </div>
-
-````
-
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/slide', '$'], function(Slide, $) {
-    var slide1 = new Slide({
-        element: '#slide1',
-        duration: 1000,
-        effect: 'fade',
-        easing: 'easeOutStrong',
-        autoplay: false,
-        activeTriggerClass: 'selected',
-        activeIndex: 0
-    }).render();
-
-});
-````
-
-###幻灯片-s2
-````html
-<!-- 容器元素 -->
-<div id="slide2" class="slide2">
-    <div class="slide2__content">
-        <ul data-switchable-role="content">
-            <li class="slide2__item"><a class="slide2__item-link" href="#"><img class="slide2__item-img" alt="" src="http://art.yypm.com/320x200x1"></a>
-            </li>
-            <li class="slide2__item"><a class="slide2__item-link" href="#"><img class="slide2__item-img" alt="" src="http://art.yypm.com/320x200x2"></a>
-            </li>
-            <li class="slide2__item"><a class="slide2__item-link" href="#"><img class="slide2__item-img" alt="" src="http://art.yypm.com/320x200x3"></a>
-            </li>
-        </ul>
-    </div>
-    <ul data-switchable-role="nav" class="slide2__nav">
-        <li class="slide2__trigger">1</li>
-        <li class="slide2__trigger">2</li>
-        <li class="slide2__trigger">3</li>
-    </ul>
-</div>
-
-````
-
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/slide'], function(Slide) {
-    var slide2 = new Slide({
-        element: '#slide2',
-        duration: 300,
-        effect: 'scrolly',
-        easing: 'easeOutStrong',
-        autoplay: true,
-        activeTriggerClass: 'selected',
-        activeIndex: 0
-    }).render();
-
-});
-````
-
-###幻灯片-s3
-````html
-<!-- 容器元素 -->
-<div id="slide3" class="slide3">
-    <div class="slide3__content">
-        <ul data-switchable-role="content">
-            <li class="slide3__item"><a class="slide3__item-link" href="#"><img class="slide3__item-img" alt="" src="http://art.yypm.com/480x240x1"></a>
-            </li>
-            <li class="slide3__item"><a class="slide3__item-link" href="#"><img class="slide3__item-img" alt="" src="http://art.yypm.com/480x240x2"></a>
-            </li>
-            <li class="slide3__item"><a class="slide3__item-link" href="#"><img class="slide3__item-img" alt="" src="http://art.yypm.com/480x240x3"></a>
-            </li>
-        </ul>
-    </div>
-    <ul data-switchable-role="nav" class="slide3__nav">
-        <li class="slide3__trigger">1</li>
-        <li class="slide3__trigger">2</li>
-        <li class="slide3__trigger">3</li>
-    </ul>
-    <span class="slide3__prev" data-switchable-role="prev">上一页</span>
-    <span class="slide3__next" data-switchable-role="next">下一页</span>
-</div>
-
-````
-
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/carousel'], function(Carousel) {
-    var carousel = new Carousel({
-        element: '#slide3',
-        duration: 300,
-        effect: 'scrollx',
-        easing: 'easeOutStrong',
-        autoplay: false,
-        activeTriggerClass: 'selected',
-        activeIndex: 0
-    }).render();
-});
-````
-
-###幻灯片-s4
-````html
-<!-- 容器元素 -->
-<div id="slide4" class="slide4">
-    <div class="slide4__content">
-        <ul data-switchable-role="content">
-            <li class="slide4__item"><a class="slide4__item-link" href="#"><img class="slide4__item-img" alt="" src="http://art.yypm.com/650x285x1"></a>
-                <p class="slide4__intro">我是长标题长标题吃标题</p>
-            </li>
-            <li class="slide4__item"><a class="slide4__item-link" href="#"><img class="slide4__item-img" alt="" src="http://art.yypm.com/650x285x2"></a>
-                <p class="slide4__intro">我是标题吃题</p>
-            </li>
-            <li class="slide4__item"><a class="slide4__item-link" href="#"><img class="slide4__item-img" alt="" src="http://art.yypm.com/650x285x3"></a>
-                <p class="slide4__intro">我是长标题长标题长标题吃标题</p>
-            </li>
-            <li class="slide4__item"><a class="slide4__item-link" href="#"><img class="slide4__item-img" alt="" src="http://art.yypm.com/650x285x4"></a>
-                <p class="slide4__intro">我是标题吃题</p>
-            </li>
-            <li class="slide4__item"><a class="slide4__item-link" href="#"><img class="slide4__item-img" alt="" src="http://art.yypm.com/650x285x5"></a>
-                <p class="slide4__intro">我是长标题长标题吃标题</p>
-            </li>
-            <li class="slide4__item"><a class="slide4__item-link" href="#"><img class="slide4__item-img" alt="" src="http://art.yypm.com/650x285x6"></a>
-                <p class="slide4__intro">我是标题吃题</p>
-            </li>
-            <li class="slide4__item"><a class="slide4__item-link" href="#"><img class="slide4__item-img" alt="" src="http://art.yypm.com/650x285x7"></a>
-                <p class="slide4__intro">我是长标题长标题长标题吃标题</p>
-            </li>
-        </ul>
-    </div>
-    <ul data-switchable-role="nav" class="slide4__nav">
-        <li class="slide4__trigger"><i></i><img class="slide4__trigger-img" src="http://art.yypm.com/80x40x1" alt=""></li>
-        <li class="slide4__trigger"><i></i><img class="slide4__trigger-img" src="http://art.yypm.com/80x40x2" alt=""></li>
-        <li class="slide4__trigger"><i></i><img class="slide4__trigger-img" src="http://art.yypm.com/80x40x3" alt=""></li>
-        <li class="slide4__trigger"><i></i><img class="slide4__trigger-img" src="http://art.yypm.com/80x40x4" alt=""></li>
-        <li class="slide4__trigger"><i></i><img class="slide4__trigger-img" src="http://art.yypm.com/80x40x5" alt=""></li>
-        <li class="slide4__trigger"><i></i><img class="slide4__trigger-img" src="http://art.yypm.com/80x40x6" alt=""></li>
-        <li class="slide4__trigger"><i></i><img class="slide4__trigger-img" src="http://art.yypm.com/80x40x7" alt=""></li>
-    </ul>
-</div>
-
-````
-
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/slide'], function(Slide) {
-    var slide4 = new Slide({
-        element: '#slide4',
-        duration: 300,
-        effect: 'fade',
-        easing: 'easeOutStrong',
-        autoplay: true,
-        activeTriggerClass: 'selected'
-    }).render();
-});
-````
-
-###幻灯片-s5
-````html
-<!-- 容器元素 -->
-<div id="slide5" class="slide5">
-    <div class="slide5__content">
-        <ul data-switchable-role="content">
-            <li class="slide5__item"><a class="slide5__item-link" href="#"><img class="slide5__item-img" alt="" src="http://art.yypm.com/550x235x1"></a>
-                <p class="slide5__intro">我是长标题长标题吃标题</p>
-            </li>
-            <li class="slide5__item"><a class="slide5__item-link" href="#"><img class="slide5__item-img" alt="" src="http://art.yypm.com/550x235x2"></a>
-                <p class="slide5__intro">我是标题吃题</p>
-            </li>
-            <li class="slide5__item"><a class="slide5__item-link" href="#"><img class="slide5__item-img" alt="" src="http://art.yypm.com/550x235x3"></a>
-                <p class="slide5__intro">我是长标题长标题长标题吃标题</p>
-            </li>
-            <li class="slide5__item"><a class="slide5__item-link" href="#"><img class="slide5__item-img" alt="" src="http://art.yypm.com/550x235x4"></a>
-                <p class="slide5__intro">我是长标题长标题长标题吃标题</p>
-            </li>
-            <li class="slide5__item"><a class="slide5__item-link" href="#"><img class="slide5__item-img" alt="" src="http://art.yypm.com/550x235x5"></a>
-                <p class="slide5__intro">我是长标题长标题长标题吃标题</p>
-            </li>
-        </ul>
-    </div>
-    <ul data-switchable-role="nav" class="slide5__nav">
-        <li class="slide5__trigger"><i></i><img class="slide5__trigger-img" src="http://art.yypm.com/80x40x1" alt=""></li>
-        <li class="slide5__trigger"><i></i><img class="slide5__trigger-img" src="http://art.yypm.com/80x40x2" alt=""></li>
-        <li class="slide5__trigger"><i></i><img class="slide5__trigger-img" src="http://art.yypm.com/80x40x3" alt=""></li>
-        <li class="slide5__trigger"><i></i><img class="slide5__trigger-img" src="http://art.yypm.com/80x40x4" alt=""></li>
-        <li class="slide5__trigger"><i></i><img class="slide5__trigger-img" src="http://art.yypm.com/80x40x5" alt=""></li>
-    </ul>
-</div>
-
-````
-
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/slide'], function(Slide) {
-    var slide5 = new Slide({
-        element: '#slide5',
-        duration: 300,
-        effect: 'scrollx',
-        easing: 'easeOutStrong',
-        autoplay: true,
-        activeTriggerClass: 'selected'
-    }).render();
-});
-````
-
-###幻灯片-s6
-````html
-<!-- 容器元素 -->
-<div id="slide6" class="slide6">
-    <span class="slide6__prev" data-switchable-role="prev">&lsaquo; 上一页</span>
-    <span class="slide6__next" data-switchable-role="next">下一页 &rsaquo;</span>
-    <div class="slide6__content">
-        <ul data-switchable-role="content">
-            <li class="slide6__item"><img src="http://art.yypm.com/300x80x1" alt="" class="slide6__item-img"></li>
-            <li class="slide6__item"><img src="http://art.yypm.com/300x80x2" alt="" class="slide6__item-img"></li>
-            <li class="slide6__item"><img src="http://art.yypm.com/300x80x3" alt="" class="slide6__item-img"></li>
-        </ul>
-    </div>
-</div>
-
-````
-
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/carousel'], function(Carousel) {
-    var slide6 = new Carousel({
-        element: '#slide6',
-        hasTriggers: false,
-        easing: 'easeOutStrong',
-        effect: 'scrollx',
-        step: 2,
-        viewSize: [332],
-        circular: false,
-        autoplay: false
-    }).render();
-});
-````
-
-
-

+ 0 - 319
2018专题/球球大作战竞猜/src/modules/switchable/demo/examples/scrollpic.md

@@ -1,319 +0,0 @@
-# 图片滚动
-
----------
-
-## 演示
-
-###图片滚动-s1 
-````html
-<!-- 容器元素 -->
-<div id="scrollpic1" class="scrollpic1">
-    <div class="scrollpic1__content">
-        <ul data-switchable-role="content" class="list-pic">
-            <li class="scrollpic1__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x1" alt="">
-                    <em class="list-pic_tit">x也玩非主流</em></a>
-            </li>
-            <li class="scrollpic1__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x2" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic1__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x3" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic1__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x4" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic1__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x5" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic1__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x6" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic1__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x7" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic1__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x8" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-        </ul>
-    </div>
-    <div data-switchable-role="nav" class="remove"></div>
-    <span class="scrollpic1__prev" data-switchable-role="prev">左</span>
-    <span class="scrollpic1__next" data-switchable-role="next">右</span>
-</div>
-
-````
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/carousel'], function(Carousel) {
-    var carousel = new Carousel({
-        element: '#scrollpic1',
-        viewSize: [536],
-        step: 4,
-        easing: 'easeOutStrong',
-        effect: 'scrollx',
-        autoplay: true,
-        duration: 300
-    }).render();
-});
-````
-
-###图片滚动-s2 
-````html
-<!-- 容器元素 -->
-<div id="scrollpic2" class="scrollpic2">
-    <div class="scrollpic2__content">
-        <ul data-switchable-role="content" class="list-pic">
-            <li class="scrollpic2__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x1" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic2__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x2" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic2__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x3" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic2__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x4" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic2__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x5" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic2__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x6" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic2__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x7" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic2__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/120x90x8" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-        </ul>
-    </div>
-    <div data-switchable-role="nav" class="remove"></div>
-    <span class="scrollpic2__prev" data-switchable-role="prev">左</span>
-    <span class="scrollpic2__next" data-switchable-role="next">右</span>
-    <span class="step">
-        <span id="currNum" class="step-curr">1</span>
-        <span class="step-total">/4</span>
-    </span>
-</div>
-
-````
-
-
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/carousel'], function(Carousel) {
-    var carousel2 = new Carousel({
-        element: '#scrollpic2',
-        viewSize: [284],
-        step: 2,
-        easing: 'easeOutStrong',
-        effect: 'scrollx',
-        autoplay: true,
-        duration: 300
-    }).render();
-
-    carousel2.on('change:activeIndex', function(toIndex, fromIndex) {
-        var currNum = document.getElementById('currNum');
-        currNum.innerHTML = toIndex+1;
-    });
-});
-````
-
-###图片滚动-s3
-````html
-<!-- 容器元素 -->
-<div id="scrollpic3" class="scrollpic3">
-    <div class="scrollpic3__content">
-        <ul data-switchable-role="content" class="list-pic">
-            <li class="scrollpic3__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x1" alt="">
-                    <em class="list-pic_tit">也玩非主流</em>
-                </a>
-            </li>
-            <li class="scrollpic3__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x2" alt="">
-                    <em class="list-pic_tit">也玩非主流</em>
-                </a>
-            </li>
-            <li class="scrollpic3__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x3" alt="">
-                    <em class="list-pic_tit">也玩非主流</em>
-                </a>
-            </li>
-            <li class="scrollpic3__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x4" alt="">
-                    <em class="list-pic_tit">也玩非主流</em>
-                </a>
-            </li>
-            <li class="scrollpic3__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x5" alt="">
-                    <em class="list-pic_tit">也玩非主流</em>
-                </a>
-            </li>
-            <li class="scrollpic3__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x6" alt="">
-                    <em class="list-pic_tit">也玩非主流</em>
-                </a>
-            </li>
-            <li class="scrollpic3__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x7" alt="">
-                    <em class="list-pic_tit">也玩非主流</em>
-                </a>
-            </li>
-            <li class="scrollpic3__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x8" alt="">
-                    <em class="list-pic_tit">也玩非主流</em>
-                </a>
-            </li>
-        </ul>
-    </div>
-    <ul data-switchable-role="nav" class="scrollpic3__nav">
-        <li class="scrollpic3__trigger"></li>
-        <li class="scrollpic3__trigger"></li>
-        <li class="scrollpic3__trigger"></li>
-    </ul>
-    <span class="scrollpic3__prev" data-switchable-role="prev">左</span>
-    <span class="scrollpic3__next" data-switchable-role="next">右</span>
-</div>
-
-````
-
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/carousel'], function(Carousel) {
-    var carousel3 = new Carousel({
-        element: '#scrollpic3',
-        viewSize: [444],
-        step: 3,
-        easing: 'easeOutStrong',
-        effect: 'scrollx',
-        autoplay: true,
-        activeTriggerClass: 'selected',
-        duration: 300
-    }).render();
-});
-````
-
-
-###图片滚动-s4
-````html
-<!-- 容器元素 -->
-
-<div id="scrollpic4" class="scrollpic4">
-    <div class="scrollpic4__content">
-        <ul data-switchable-role="content" class="list-pic">
-            <li class="scrollpic4__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x1" alt="">
-                    <em class="list-pic_tit">也玩非也玩非主流也玩非主流也玩非主流</em></a>
-            </li>
-            <li class="scrollpic4__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x2" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic4__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x3" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic4__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x4" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic4__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x5" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic4__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x6" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic4__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x7" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-            <li class="scrollpic4__item list-pic_item">
-                <a class="list-pic_link" href="#">
-                    <img class="list-pic_img" src="http://art.yypm.com/130x90x8" alt="">
-                    <em class="list-pic_tit">也玩非主流</em></a>
-            </li>
-        </ul>
-    </div>
-    <div class="scrollpic4__ft">
-        <span class="scrollpic4__prev" data-switchable-role="prev">左</span>
-        <ul data-switchable-role="nav" class="scrollpic4__nav">
-            <li class="scrollpic4__trigger"><a href="#">1</a></li>
-            <li class="scrollpic4__trigger"><a href="#">2</a></li>
-            <li class="scrollpic4__trigger"><a href="#">3</a></li>
-        </ul>
-        <span class="scrollpic4__next" data-switchable-role="next">右</span>
-    </div>
-</div>
-
-````
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/carousel'], function(Carousel) {
-    var carousel3 = new Carousel({
-        element: '#scrollpic4',
-        viewSize: [444],
-        step: 3,
-        easing: 'easeOutStrong',
-        effect: 'scrollx',
-        autoplay: true,
-        activeTriggerClass: 'selected',
-        duration: 300
-    }).render();
-});
-````

+ 0 - 84
2018专题/球球大作战竞猜/src/modules/switchable/demo/examples/scrolltxt.md

@@ -1,84 +0,0 @@
-# 文章滚动
-
----------
-
-## 演示
-
-###文章滚动-s1 
-````html
-<!-- 容器元素 -->
-<div id="scrolltxt1" class="scrolltxt1">
-    <ul data-switchable-role="content" class="scrolltxt1__content list-txt">
-        <li class="scrolltxt1__item list-txt_item"><a href="#">CAPCOM表示中国《怪物猎人OL》计划明年发表</a>
-        </li>
-        <li class="scrolltxt1__item list-txt_item"><a href="#">命苦不能怪政府 游戏史上转瞬即逝短命鬼小盘点</a>
-        </li>
-        <li class="scrolltxt1__item list-txt_item"><a href="#">收费网游高风险中高机遇 动视暴雪占据半壁江山</a>
-        </li>
-    </ul>
-    <span class="scrolltxt1__prev" data-switchable-role="prev"></span>
-    <span class="scrolltxt1__next" data-switchable-role="next"></span>
-</div>
-
-````
-
-
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/carousel', '$'], function(Carousel, $) {
-    var carousel = new Carousel({
-        element: '#scrolltxt1',
-        duration: 300,
-        effect: 'scrolly',
-        easing: 'easeOutStrong',
-        autoplay: true,
-        activeIndex: 0
-    }).render();
-
-});
-````
-
-###文章滚动-s2 
-````html
-<!-- 容器元素 -->
-<div id="scrolltxt2" class=" scrolltxt2">
-    <ul data-switchable-role="content" class="scrolltxt2__content list-txt">
-        <li class="scrolltxt2__item list-txt_item"><a href="#">CAPCOM表示中国《怪物猎人OL》计划明年发表</a></li>
-        <li class="scrolltxt2__item list-txt_item"><a href="#">游戏史上转瞬即逝短命鬼小盘点</a></li>
-        <li class="scrolltxt2__item list-txt_item"><a href="#">收费网游高风险中高机遇 动视暴雪占据半壁江山</a></li>
-        <li class="scrolltxt2__item list-txt_item"><a href="#">收费网游高风险中高机遇 动视暴雪占据半壁江山</a></li>
-        <li class="scrolltxt2__item list-txt_item"><a href="#">收费网游高风险中高机遇 动视暴雪占据半壁江山</a></li>
-        <li class="scrolltxt2__item list-txt_item"><a href="#">收费网游高风险中高机遇 动视暴雪占据半壁江山</a></li>
-        <li class="scrolltxt2__item list-txt_item"><a href="#">收费网游高风险中高机遇 动视暴雪占据半壁江山</a></li>
-        <li class="scrolltxt2__item list-txt_item"><a href="#">收费网游高风险中高机遇 动视暴雪占据半壁江山</a></li>
-    </ul>
-    <span class="scrolltxt2__prev" data-switchable-role="prev"></span>
-    <span class="scrolltxt2__next" data-switchable-role="next"></span>
-</div>
-
-````
-
-
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/carousel', '$'], function(Carousel, $) {
-    var $context = $('#scrolltxt2'),
-        contentHeight = $context.find('[data-switchable-role="content"]').height(),
-        maxHeight = $context.height();
-    if(contentHeight < maxHeight){
-        $context.find('[data-switchable-role="prev"]').hide();
-        $context.find('[data-switchable-role="next"]').hide();
-        return;
-    }
-    var carousel = new Carousel({
-        element: $context,
-        duration: 300,
-        effect: 'scrolly',
-        easing: 'easeOutStrong',
-        autoplay: false,
-        activeIndex: 0
-    }).render();
-});
-````

+ 0 - 138
2018专题/球球大作战竞猜/src/modules/switchable/demo/examples/tab.md

@@ -1,138 +0,0 @@
-# 选项卡
-
----------
-
-## 演示
-
-###选项卡-s1
-
-````html
-<!-- 容器元素 -->
-<div id="tab1" class="tab1">
-    <div class="tab1__hd">
-        <h3 class="tab1__title">可去掉标题</h3>
-        <ul class="tab1__nav" data-switchable-role="nav">
-            <li class="tab1__trigger" data-switchable-role="trigger">1</li>
-            <li class="tab1__trigger" data-switchable-role="trigger">2</li>
-            <li class="tab1__trigger" data-switchable-role="trigger">3</li>
-        </ul>
-        <div class="tab1__act">
-            <span class="tab1__act-links">
-                <a href="#" class="tab1__act-link">链接1</a>|
-                <a href="#" class="tab1__act-link">链接2</a>|
-                <a href="#" class="tab1__act-link">链接3</a>|
-                <a href="#" class="tab1__act-link">链接4</a>
-            </span>
-            <a class="tab1__act-more" href="#">更多»</a>
-        </div>
-    </div>
-    <div class="tab1__content" data-switchable-role="content">
-        <div class="tab1__panel"  data-switchable-role="panel">
-            TOP1:《魔兽世界》 - 国服直升90级服务开启
-  上周《魔兽世界》美服宣布第五部资料片《德拉诺之王》预售开始,并将于2014年秋天上线,这是WOW在全球首次如此早就宣布了下一个资料片的发售日期。同日,国服《魔兽世界》在线商店也已上线了“角色直升90级”的服务,玩家支付150战网点数购买这项服务,便能将一个低等级角色瞬间提升到90级。《魔兽世界》上周周均上涨20.65%,排名稳居第一。
-        </div>
-        <div class="tab1__panel" style="display: none" data-switchable-role="panel">
-            TOP2:《炉石传说》 - 国服正式运营 紧追魔兽
-  3月13日,国服《炉石传说》正式运营开始,本次正式运营与美服同步。国服更新的补丁是4944,主要包括添加了金色英雄头像,添加新的卡牌背面图案,添加了《魔兽世界》坐骑炉石天马等,而之前官网预告的金色的格尔宾•梅卡托克卡牌已经绝版,现在只能用奥术之尘合成普通版卡牌。《炉石传说》正式运营当天游戏热度指数接近17万,整体大涨101.62%,排名连升三位,55340的热度指数紧追魔兽,目前位居第二。
-        </div>
-        <div class="tab1__panel" style="display: none" data-switchable-role="panel">
-    TOP3:《激战2》 - 3月11日免费试玩开测
-  3月11日《激战2》开启了免费试玩,此次测试版本与全球同步,采用美服最新版本“狮城逃亡”,而且在测试期间,美服还将有一次的Living World的版本更新,国服也将最快在美服更新后的18小时同步上线。空中网此次对于《激战2》的宣传很是下工夫,不过玩家对于买断制、商城、VIP的共存还是抱着疑惑的态度。不过《激战2》的热度还是涨得很高,开测当天指数有8.7万,整体周均再涨43.16%,排名提升一位,目前位居第三。
-        </div>
-    </div>
-</div>
-````
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/tabs'], function(Tabs) {
-    var tabs = new Tabs({
-        element: '#tab1',
-        activeTriggerClass: 'selected',
-        triggerType: 'click' //default: 'hover'
-    });
-});
-````
-
-
-###选项卡-s2
-````html
-<!-- 容器元素 -->
-<div id="tab2" class="tab2">
-    <div class="tab2__hd">
-        <h3 class="tab2__title">模块标题</h3>
-        <ul class="tab2__nav" data-switchable-role="nav">
-            <li class="tab2__trigger tab2__trigger--round-left" data-switchable-role="trigger">周</li>
-            <li class="tab2__trigger" data-switchable-role="trigger">月</li>
-            <li class="tab2__trigger tab2__trigger--round-right" data-switchable-role="trigger">总</li>
-        </ul>
-    </div>
-    <div class="tab2__content" data-switchable-role="content">
-        <div class="tab2__panel"  data-switchable-role="panel">
-            TOP1:《魔兽世界》 - 国服直升90级服务开启
-  上周《魔兽世界》美服宣布第五部资料片《德拉诺之王》预售开始,并将于2014年秋天上线,这是WOW在全球首次如此早就宣布了下一个资料片的发售日期。同日,国服《魔兽世界》在线商店也已上线了“角色直升90级”的服务,玩家支付150战网点数购买这项服务,便能将一个低等级角色瞬间提升到90级。《魔兽世界》上周周均上涨20.65%,排名稳居第一。
-        </div>
-        <div class="tab2__panel" style="display: none" data-switchable-role="panel">
-            TOP2:《炉石传说》 - 国服正式运营 紧追魔兽
-  3月13日,国服《炉石传说》正式运营开始,本次正式运营与美服同步。国服更新的补丁是4944,主要包括添加了金色英雄头像,添加新的卡牌背面图案,添加了《魔兽世界》坐骑炉石天马等,而之前官网预告的金色的格尔宾•梅卡托克卡牌已经绝版,现在只能用奥术之尘合成普通版卡牌。《炉石传说》正式运营当天游戏热度指数接近17万,整体大涨101.62%,排名连升三位,55340的热度指数紧追魔兽,目前位居第二。
-        </div>
-        <div class="tab2__panel" style="display: none" data-switchable-role="panel">
-            TOP3:《激战2》 - 3月11日免费试玩开测
-  3月11日《激战2》开启了免费试玩,此次测试版本与全球同步,采用美服最新版本“狮城逃亡”,而且在测试期间,美服还将有一次的Living World的版本更新,国服也将最快在美服更新后的18小时同步上线。空中网此次对于《激战2》的宣传很是下工夫,不过玩家对于买断制、商城、VIP的共存还是抱着疑惑的态度。不过《激战2》的热度还是涨得很高,开测当天指数有8.7万,整体周均再涨43.16%,排名提升一位,目前位居第三。
-        </div>
-    </div>
-</div>
-
-````
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/tabs'], function(Tabs) {
-    var tabs3 = new Tabs({
-        element: '#tab2',
-        triggerType: 'click',
-        activeIndex: 1,
-        activeTriggerClass: 'selected'
-    });
-});
-````
-
-###选项卡-s3
-````html
-<!-- 容器元素 -->
-<div id="tab3" class="tab3">
-    <div class="tab3__hd">
-        <ul class="tab3__nav" data-switchable-role="nav">
-            <li class="tab3__trigger" data-switchable-role="trigger">1</li>
-            <li class="tab3__trigger" data-switchable-role="trigger">2</li>
-            <li class="tab3__trigger" data-switchable-role="trigger">3</li>
-        </ul>
-    </div>
-    <div class="tab3__content" data-switchable-role="content">
-        <div class="tab3__panel" data-switchable-role="panel">
-            <p>1</p>
-            <p>11</p>
-        </div>
-        <div class="tab3__panel" style="display: none" data-switchable-role="panel">
-            22222
-        </div>
-        <div class="tab3__panel" style="display: none" data-switchable-role="panel">
-            <p>3</p>
-            <p>33</p>
-            <p>333</p>
-        </div>
-    </div>
-</div>
-
-````
-
-####调用方法
-````javascript
-seajs.use(['arale/switchable/1.0.2/tabs', '$'], function(Tabs, $) {
-    var tabs4 = new Tabs({
-        element: '#tab3',
-        activeTriggerClass: 'selected'
-    });
-});
-````
-

+ 0 - 37
2018专题/球球大作战竞猜/src/modules/switchable/demo/package.json

@@ -1,37 +0,0 @@
-{
-  "family": "",
-  "name": "switchable",
-  "version": "1.0.0",
-  "description": "The best project ever.",
-  "homepage": "https://github.com/Administrator/demo",
-  "author": "LiuDawei",
-  "maintainers": [
-    "LiuDawei"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/Administrator/demo.git"
-  },
-  "bugs": {
-    "url": ""
-  },
-  "keywords": [],
-  "licenses": "MIT",
-  "spm": {
-      "ftp": {
-          "host": "172.19.103.15",
-          "port": 21,
-          "authKey": "publisher",
-          "dest": "/lego/2.1.0/demo/switchable",
-          "src": "_site/",
-          "exclusions": ["package.json", ".gitignore", ".DS_Store", ".svn", "bak", ".ftppass"]
-      },
-    "output": [
-      "switchable.js",
-      "switchable.css"
-    ],
-    "alias": {},
-    "devAlias": {},
-    "engines": {}
-  }
-}

+ 0 - 755
2018专题/球球大作战竞猜/src/modules/switchable/demo/src/switchable.css

@@ -1,755 +0,0 @@
-/* .switchable style module */
-
-/* global start */
-.z-index-action-sheet{
-    z-index: 10;
-}
-/* global end */
-
-/* demo start */
-    .demo{
-        margin: 10px 0 30px 0;
-    }
-    .demo, .demo a{ 
-        font: 12px/1.5 tahoma,\5fae\8f6f\96c5\9ed1;
-        color: #333;
-    }
-    .demo ul, ol, menu, dir{
-        list-style-type: none;
-        padding-left: 0;
-        margin: 0;
-    }
-    .demo img{
-        background: red;
-    }
-    .demo a{
-        /*display: block;*/
-    }
-    .demo a:hover{
-        color: red;
-    }
-    .demo em{
-        font-style: normal;
-    }
-    .demo p, .demo h1, .demo h2, .demo h3, .demo h4, .demo h5, .demo h6{
-        margin: 0;
-    }
-    .demo .remove{display: none;}
-/* demo end */
-
-/* list-pic start */
-    .list-pic__tit{
-        letter-spacing: 0;
-    }
-/* list-pic end */
-
-
-/* box start */
-.box-bd {
-  *zoom: 1; }
-  .box-bd:before, .box-bd:after {
-    content: "";
-    display: table;
-    line-height: 0; }
-  .box-bd:after {
-    clear: both; }
-
-.box {
-  zoom: 1;
-  position: relative; }
-  .box.is-bordered {
-    border: 1px solid #E5E5E5; }
-    .box.is-bordered .box-hd {
-      margin: -1px -1px 0;
-      border: 1px solid #E5E5E5; }
-  .box.is-rounded {
-    -webkit-border-radius: 4px;
-    border-radius: 4px;
-    -webkit-background-clip: padding-box;
-    -moz-background-clip: padding;
-    background-clip: padding-box; }
-    .box.is-rounded .box-hd {
-      -webkit-border-radius: 4px 4px 0 0;
-      border-radius: 4px 4px 0 0;
-      -webkit-background-clip: padding-box;
-      -moz-background-clip: padding;
-      background-clip: padding-box; }
-    .box.is-rounded .box-bd {
-      -webkit-border-radius: 4px;
-      border-radius: 4px;
-      -webkit-background-clip: padding-box;
-      -moz-background-clip: padding;
-      background-clip: padding-box; }
-
-.box-hd {
-  padding: 0 10px;
-  height: 30px;
-  line-height: 30px;
-  background-color: #EEE; }
-  .box-hd .icon {
-    float: left;
-    width: 16px;
-    height: 16px;
-    margin-top: 7px;
-    margin-right: 8px;
-    background-color: #3c6; }
-  .box-hd .title {
-    float: left;
-    margin: 0 10px 0 0;
-    font-size: 14px; }
-  .box-hd .act {
-    float: right; }
-    .box-hd .act .links {
-      float: left; }
-      .box-hd .act .links a,
-      .box-hd .act .links .line {
-        float: left;
-        margin: 0 4px;
-        font-size: 12px; }
-      .box-hd .act .links .line {
-        margin: 0 2px;
-        color: #999;
-        overflow: hidden; }
-    .box-hd .act .more {
-      margin-left: 10px; }
-
-/* box end */
-
-
-/* slide start */
-    .slide__s1 {
-        width: 320px;
-        overflow: hidden;
-    }
-    .slide__s1 .slide_content,
-    .slide__s1 .slide_content img {
-        display: block;
-        overflow: hidden;
-        position: relative;
-        width: 320px;
-        height: 200px;
-    }
-    .slide__s1 .slide_trigger {
-        overflow: hidden;
-        height: 24px;
-        line-height: 24px;
-        padding-left: 1em;
-        cursor: pointer;
-        margin: 5px 0 0;
-        background-color: #D9D9D9;
-    }
-    .slide__s1 .slide_trigger.selected { background-color: #474A4B }
-    .slide__s1 .slide_trigger.selected a {
-        font-weight: 900;
-        color: #FFF;
-    }
-    
-    .slide__s2 {
-        overflow: hidden;
-        position: relative;
-        width: 320px;
-        height: 200px;
-    }
-    .slide__s2 .slide_content { height: 200px; }
-    .slide__s2 .slide_item {}
-    .slide__s2 .slide_content a,
-    .slide__s2 .slide_content img {
-        display: block;
-        width: 320px;
-        height: 200px;
-    }
-    .slide__s2 .slide_nav {
-        position: absolute;
-        bottom: 10px;
-        right: 10px;
-        z-index:11;
-    }
-    .slide__s2 .slide_trigger {
-        cursor: pointer;
-        float: left;
-        margin-left: 5px;
-        width: 20px;
-        height: 20px;
-        line-height: 20px;
-        text-align: center;
-        background: #fff;
-        color: #333;
-    }
-    .slide__s2 .slide_trigger.selected {
-        font-weight: 700;
-        background-color: #289edd;
-        color: #fff;
-    }
-
-    .slide__s3 {
-        position: relative;
-        width: 480px;
-        height: 240px;
-        overflow: hidden;
-    }
-    .slide__s3 .slide_item{
-        display: block;
-        overflow: hidden;
-        height: 240px;
-        width:480px;
-    }
-    .slide__s3 .slide_content img {
-        display: block;
-        width: 480px;
-        height: 240px;
-        background-color: #333;
-    }
-    .slide__s3 .slide_nav {
-        position: absolute;
-        z-index: 10;
-        right: 65px;
-        bottom: 13px;
-        height: 8px;
-        overflow: hidden;
-    }
-    .slide__s3 .slide_trigger {
-        cursor: pointer;
-        overflow: hidden;
-        float: left;
-        margin-right: 2px;
-        width: 20px;
-        height: 8px;
-        text-indent: -9999px;
-        background-color: #FFF;
-    }
-    .slide__s3 .slide_trigger.selected { background-color: #289edd; }
-    .slide__s3 .slide_ctrlprev,
-    .slide__s3 .slide_ctrlnext {
-        cursor: pointer;
-        position: absolute;
-        z-index: 10;
-        right: 35px;
-        bottom: 10px;
-        width: 25px;
-        height: 15px;
-        background: url(../img/bg_slide_li.png) 0 -16px;
-    }
-    .slide__s3 .slide_ctrlnext {
-        background-position: -25px -16px;
-        right: 10px;
-    }
-
-
-    .slide__s4 {
-        overflow: hidden;
-        position: relative;
-        width: 650px;
-    }
-    .slide__s4 .slide_content {
-        overflow: hidden;
-        height: 325px;
-        background: #333;
-    }
-    .slide__s4 .slide_content a,
-    .slide__s4 .slide_content img {
-        display: block;
-        width: 650px;
-        height: 285px;
-    }
-    .slide__s4 .slide_content p {
-        overflow: hidden;
-        padding: 0 12px;
-        height: 40px;
-        font-size: 14px;
-        line-height: 40px;
-        background: #141414;
-        color: #fff;
-    }
-    .slide__s4 .slide_nav {
-        padding: 6px 0 8px 9px;
-        background: #333;
-        zoom: 1;
-    }
-    .slide__s4 .slide_nav:before,
-    .slide__s4 .slide_nav:after {
-        content: '';
-        display: table;
-        line-height: 0;
-    }
-    .slide__s4 .slide_nav:after { clear: both }
-    .slide__s4 .slide_trigger {
-        cursor: pointer;
-        position: relative;
-        z-index: 11;
-        float: left;
-        margin-right: 5px;
-        padding: 2px;
-        width: 82px;
-        height: 42px;
-    }
-    .slide__s4 .slide_trigger.selected { background: #2ba0de }
-    .slide__s4 .slide_trigger img {
-        display: block;
-        width: 80px;
-        height: 40px;
-        border: 1px solid #0d0d0d;
-        border-right-color: #3c3c3c;
-        border-bottom-color: #3c3c3c;
-    }
-    .slide__s4 .slide_trigger i {
-        overflow: hidden;
-        position: absolute;
-        left: 50%;
-        top: -9px;
-        margin-left: -9px;
-        width: 18px;
-        height: 9px;
-    }
-    .slide__s4 .slide_trigger.selected i { background: url(../img/bg_slide_li.png) 0 -51px }
-
-
-
-    .slide__s5 {
-        *zoom:1;
-        overflow: hidden;
-        position: relative;
-    }
-    .slide__s5 .slide_content {
-        overflow: hidden;
-        position: relative;
-        float: left;
-        width: 550px;
-        height: 275px;
-        background: #333;
-    }
-    .slide__s5 .slide_item,
-    .slide__s5 .slide_content img {
-        display: block;
-        width: 550px;
-        height: 235px;
-    }
-    .slide__s5 .slide_content p {
-        overflow: hidden;
-        padding:0 12px;
-        height: 40px;
-        font-size: 14px;
-        line-height: 40px;
-        background: #141414;
-        color: #fff;
-    }
-    .slide__s5 .slide_nav {
-        float: left;
-        padding: 8px 0 0 7px;
-        width: 93px;
-        _width: 100px;
-        height: 267px;
-        _height: 275px;
-        background: #222;
-        overflow: hidden;
-    }
-    .slide__s5 .slide_trigger {
-        cursor: pointer;
-        position: relative;
-        margin-bottom: 8px;
-        *margin-bottom: 6px;
-        padding: 2px;
-        width: 82px;
-        height: 42px;
-    }
-    .slide__s5 .slide_trigger.selected { background: #2ba0de }
-    .slide__s5 .slide_trigger img {
-        display: block;
-        width: 80px;
-        height: 40px;
-        border: 1px solid #0d0d0d;
-        border-right-color: #3c3c3c;
-        border-bottom-color: #3c3c3c;
-    }
-    .slide__s5 .slide_trigger i {
-        overflow: hidden;
-        position: absolute;
-        left: -6px;
-        top: 50%;
-        margin-top: -9px;
-        width: 6px;
-        height: 14px;
-    }
-    .slide__s5 .slide_trigger.selected i { background: url(../img/bg_slide_li.png) -18px -51px }
-/* slide end */
-
-
-
-/* scrollpic start */
-
-/* scrollpic end */
-
-
-
-/* scrolltxt start */
-
-/* scrolltxt end */
-
-
-/* tab start */
-
-.tab_item{
-    display: none;
-}   
-
-.tab__s1 {
-    zoom: 1;
-    position: relative;
-    border: 1px solid #d8d8d8;
-}
-.tab__s1 .tab_hd {
-    position: relative;
-    height: 30px;
-    line-height: 30px;
-    border-bottom: 1px solid #d8d8d8;
-    background-color: #e7e7e7;
-}
-.tab__s1 .tab_title {
-    float: left;
-    _display: inline;
-    font-size: 14px;
-    margin: 0 10px;
-}
-
-/* 右部连接独立成mod */
-.tab__s1 .act { float: right }
-.tab__s1 .act_links {
-    float: left;
-    _display: inline;
-    overflow: hidden;
-    color: #d8d8d8;
-}
-.tab__s1 .act_link {
-    margin: 0 8px;
-    white-space: nowrap;
-    color: #0082c3;
-}
-.tab__s1 .act_more {
-    margin: 0 10px;
-    color: #666;
-}
-/**/
-.tab__s1 .tab_nav {
-    float: left;
-    _display: inline;
-    margin-left: -1px;
-    border-left: 1px solid #d8d8d8;
-}
-.tab__s1 .tab_trigger {
-    position: relative;
-    cursor: pointer;
-    float: left;
-    padding: 0 12px;
-    border-right: 1px solid #d8d8d8;
-    background-color: #f5f5f5;
-    color: #666;
-}
-.tab__s1 .tab_trigger:hover {
-    background-color: #fff;
-    color: #333;
-}
-.tab__s1 .tab_trigger.selected {
-    padding-bottom: 1px;
-    margin-bottom: -1px;
-    font-weight: 700;
-    background-color: #fff;
-    color: #333;
-}
-.tab__s1 .tab_content {
-    height: 50px;
-    padding: 10px;
-}
-
-
-.tab__s2 {
-    zoom: 1;
-    position: relative;
-}
-.tab__s2 .tab_hd {
-    position: relative;
-    height: 30px;
-}
-/* 头部组件 */
-.tab__s2 .tab_title {
-    float: left;
-    _display: inline;
-    font-size: 14px;
-    margin: 0 10px;
-}
-.tab__s2 .act { float: right }
-.tab__s2 .act_links {
-    float: right;
-    overflow: hidden;
-    color: #d8d8d8;
-}
-.tab__s2 .act_link {
-    margin: 0 8px;
-    white-space: nowrap;
-    color: #0082c3;
-}
-.tab__s2 .act_more {
-    float: right;
-    margin: 0 10px;
-    color: #666;
-}
-/**/
-.tab__s2 .tab_nav {
-    float: left;
-}
-.tab__s2 .tab_trigger {
-    position: relative;
-    cursor: pointer;
-    float: left;
-    margin-right: 4px;
-    padding: 0 8px;
-    line-height: 29px;
-    border: 1px solid #d8d8d8;
-    border-bottom: 0 none;
-    -webkit-border-radius: 5px 5px 0 0;
-    border-radius: 5px 5px 0 0;
-    background: url(../img/bgs_tab_v3.png) 0 -30px;
-    color: #666;
-}
-.tab__s2 .tab_trigger:hover {
-    padding-bottom: 1px;
-    font-weight: 700;
-    background: #fff;
-    color: #333;
-}
-.tab__s2 .tab_trigger.selected {
-    padding-bottom: 1px;
-    margin-bottom: -1px;
-    font-weight: 700;
-    background: #fff;
-    color: #474A4B;
-}
-.tab__s2 .tab_content {
-    height: auto;
-    padding: 10px;
-    border: 1px solid #d8d8d8;
-}
-
-
-.tab__s3 {
-    zoom: 1;
-    position: relative;
-    background: #fff;
-}
-.tab__s3 .tab_hd {
-    position: relative;
-    height: 30px;
-    line-height: 30px;
-    border: 1px solid #d8d8d8;
-    border-bottom: none;
-    background: url(../img/bgs_tab_v3.png);
-}
-.tab__s3 .tab_title {
-    display: inline;
-    float: left;
-    font-size: 14px;
-    margin: 0 10px;
-}
-.tab__s3 .act { float: right }
-.tab__s3 .act_links {
-    float: right;
-    overflow: hidden;
-    display: inline;
-    color: #d8d8d8;
-}
-.tab__s3 .act_link{
-    margin: 0 8px;
-    white-space: nowrap;
-    color: #0082c3;
-}
-.tab__s3 .act_more {
-    float: right;
-    margin: 0 10px;
-    color: #666;
-}
-.tab__s3 .tab_nav {
-    display: inline;
-    float: right;
-    margin: 4px 5px 0 0;
-    font-size: 12px;
-}
-.tab__s3 .tab_trigger {
-    overflow: hidden;
-    position: relative;
-    cursor: pointer;
-    float: left;
-    margin-bottom: -1px;
-    margin-left: -1px;
-    width: 29px;
-    height: 20px;
-    line-height: 20px;
-    *line-height: 22px;
-    font-size: 12px;
-    text-align: center;
-    border: 1px solid #d8d8d8;
-    background: url(../img/bgs_tab_v3.png);
-    color: #666;
-}
-.tab__s3 .tab_trigger.selected {
-    background-position: -100px -92px;
-    color: #fff;
-}
-.tab__s3 .tab_trigger.round-left {
-    -webkit-border-radius: 3px 0 0 3px;
-    border-radius: 3px 0 0 3px;
-}
-.tab__s3 .tab_trigger.round-right {
-    -webkit-border-radius: 0 3px 3px 0;
-    border-radius: 0 3px 3px 0;
-}
-.tab__s3 .tab_content {
-    height: 72px;
-    padding: 10px;
-    border: 1px solid #d8d8d8;
-}
-
-
-.tab__s4 {
-    position: relative;
-    height: 300px;
-    padding: 0 0 0 150px;
-    border: 1px solid #d8d8d8;
-    background: #fff;
-}
-.tab__s4 .tab_hd {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 148px;
-    height: 100%;
-    line-height: 30px;
-    border-right: 1px solid #d8d8d8;
-    background: #f4f4f4;
-}
-.tab__s4 .tab_title {
-    display: inline;
-    float: left;
-    font-size: 14px;
-    margin: 0 10px;
-}
-.tab__s4 .act { float: right }
-.tab__s4 .act_links {
-    float: right;
-    overflow: hidden;
-    display: inline;
-    color: #d8d8d8;
-}
-.tab__s4 .act_link {
-    margin: 0 8px;
-    white-space: nowrap;
-    color: #0082c3;
-}
-.tab__s4 .act_more {
-    float: right;
-    margin: 0 10px;
-    color: #666;
-}
-.tab__s4 .tab_nav { }
-.tab__s4 .tab_trigger {
-    position: relative;
-    cursor: pointer;
-    padding-left: 32px;
-    width: 116px;
-    font-size: 14px;
-    border-bottom: 1px solid #d8d8d8;
-    color: #0082c3;
-}
-.tab__s4 .tab_trigger.selected {
-    width: 128px;
-    font-weight: bold;
-    border-bottom: 0;
-    background: url(../img/bgs_tab_v3.png) 0 -60px;
-    color: #fff;
-}
-.tab__s4 .tab_content {
-    height:100%;
-}
-.tab__s4 .tab_item{
-    padding: 10px;
-    padding-left: 15px;
-}
-/* tab end */
-
-
-/* accordion start */
-
-/* accordion end */
-
-
-
-
- /* lego 2.1.0 */
- @charset "UTF-8";
-/* 文字列表基础样式; */
-.list-txt { padding: 5px 10px; }
-.list-txt.list-txt--half { position: relative; padding: 5px 0px; right: -10px; overflow: hidden; *zoom: 1; }
-
-.list-txt__item { height: 24px; line-height: 24px; padding-left: 10px; background: url(../img/icon_li.png) no-repeat 0 12px; overflow: hidden; }
-
-.list-txt__tag { color: #F60; margin-right: 10px; }
-
-.list-txt__date { float: right; margin-left: 1em; color: #666; }
-
-.list-txt--half .list-txt__item { float: left; width: 50%; *width: 49.99%; padding-left: 0; }
-.list-txt--half a { height: 24px; margin-left: 10px; vertical-align: top; }
-.list-txt--half .list-txt__date { margin: 0 20px 0 10px; }
-.list-txt--half .list-txt__tag { margin-right: 0; }
-.list-txt--half .list-txt__num { float: left; _display: inline; -webkit-text-size-adjust: none; text-align: center; -webkit-border-radius: 2px; border-radius: 2px; font: 10px/14px verdana; width: 20px; height: 14px; color: #666; background-color: #E8E8E8; margin: 5px 0 0 0; }
-
-/* 图片列表基础样式一; list-pic__item的width,height值为list-pic__img的盒模型宽高值; 如果list-pic__tit定义了高度,在ie下鼠标移上去不会出现鼠标手型,需设置cursor:pointer; -0.34em前提是tahoma为默认英文字体。 */
-.list-pic { font-family: Tahoma, sans-serif; letter-spacing: -.34em; word-spacing: -.34em; /* 视频播放按钮 */ }
-@media all and (-webkit-min-device-pixel-ratio: 1) { .list-pic { word-spacing: normal; } }
-.list-pic .list-pic--icon-play { display: block; cursor: pointer; position: absolute; left: 52px; top: 32px; width: 25px; height: 25px; background: url(../img/btn_play_v3.png) no-repeat 0 0; opacity: 0.6; filter: alpha(opacity=60); }
-
-.list-pic__item { display: inline-block; *display: inline; *zoom: 1; vertical-align: top; letter-spacing: normal; word-spacing: normal; overflow: hidden; margin: 0 0 10px 10px; width: 130px; padding-top: 10px; }
-
-.list-pic__link { display: block; text-align: center; position: relative; *zoom: 1; }
-.list-pic__link:hover { text-decoration: none; *zoom: 1; }
-.list-pic__link:hover .list-pic__tit { text-decoration: underline; }
-.list-pic__link:hover .list-pic__img { border-color: #999; }
-.list-pic__link:hover .list-pic--icon-play { opacity: 1; filter: alpha(opacity=100); }
-
-.list-pic__img { width: 130px; height: 90px; }
-
-.list-pic__tit { display: inline-block; *display: inline; *zoom: 1; vertical-align: baseline; text-align: left; cursor: pointer; line-height: 16px; }
-
-/* 图片列表基础样式二; list-pic__item的width,height值为list-pic__img的盒模型宽高值; 如果list-pic__tit定义了高度,在ie下鼠标移上去不会出现鼠标手型,需设置cursor:pointer; -0.34em前提是tahoma为默认英文字体。 */
-.list-pic--in { font-family: Tahoma, sans-serif; letter-spacing: -.34em; word-spacing: -.34em; /* 视频播放按钮 */ }
-@media all and (-webkit-min-device-pixel-ratio: 1) { .list-pic--in { word-spacing: normal; } }
-.list-pic--in .list-pic--icon-play { display: block; cursor: pointer; position: absolute; left: 57px; top: 107px; width: 25px; height: 25px; background: url(../img/btn_play_v3.png) no-repeat 0 0; opacity: 0.6; filter: alpha(opacity=60); }
-
-.list-pic--in__item { display: inline-block; *display: inline; *zoom: 1; vertical-align: top; letter-spacing: normal; word-spacing: normal; overflow: hidden; width: 150px; margin: 0 0 10px 10px; }
-
-.list-pic--in__link { display: block; text-align: center; position: relative; *zoom: 1; }
-.list-pic--in__link:hover { text-decoration: none; border-color: #999; background-color: #F90; *zoom: 1; }
-.list-pic--in__link:hover .list-pic--in__img { text-decoration: none; border-color: #999; background-color: #F90; *zoom: 1; }
-.list-pic--in__link:hover .list-pic--icon-play { opacity: 1; filter: alpha(opacity=100); }
-
-.list-pic--in__img { width: 140px; height: 240px; padding: 4px; border: 1px solid #D8D8D8; background-color: #FFF; vertical-align: middle; }
-
-.list-pic--in__tit { display: block; vertical-align: baseline; text-align: center; cursor: pointer; line-height: 18px; padding: 4px 0; position: absolute; left: 4px; bottom: 4px; background-color: rgba(0, 0, 0, 0.6); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000,endColorstr=#99000000); color: #FFF; width: 140px; text-decoration: none; }
-
-:root .list-pic--in__tit { filter: none\9; }
-
-/* 文字列表基础样式; */
-.list-art { overflow: hidden; *zoom: 1; position: relative; padding: 0 20px; }
-
-.list-art__item { overflow: hidden; *zoom: 1; margin-top: -1px; border-top: 1px solid #CCC; padding: 20px 0; }
-
-.list-art__link { float: left; margin-right: 10px; }
-.list-art__link:hover { background-color: transparent; }
-.list-art__link.list-art-fr { margin-right: 0; margin-left: 10px; float: right; }
-
-.list-art__img { width: 130px; height: 90px; overflow: hidden; }
-
-.list-art__cont { overflow: hidden; *zoom: 1; }
-
-.list-art__tit { overflow: hidden; font-size: 14px; height: 30px; line-height: 26px; margin: 0; }
-
-.list-art__p { line-height: 20px; margin: 0; }
-
-.read-more { color: #0082C3; margin-left: 5px; }
-.read-more:hover { text-decoration: underline; }

+ 0 - 7
2018专题/球球大作战竞猜/src/modules/switchable/demo/src/switchable.js

@@ -1,7 +0,0 @@
-define(function(require, exports, module) {
-
-  var switchable;
-
-  module.exports = switchable;
-
-});

+ 0 - 12
2018专题/球球大作战竞猜/src/modules/switchable/demo/tests/switchable-spec.js

@@ -1,12 +0,0 @@
-define(function(require) {
-
-  var switchable = require('../src/switchable');
-
-  describe('switchable', function() {
-
-    it('normal usage', function() {
-
-    });
-  });
-
-});

+ 14 - 15
2018专题/球球大作战竞猜/src/sass/global.scss → 2018专题/球球大作战竞猜/src/sass/index/global.scss

@@ -1,16 +1,16 @@
 @charset "UTF-8";
-@import "base/base.scss";
-@import "base/mixins";
+@import "../base/base.scss";
+@import "../base/mixins";
 @import "swiper.css";
 body{
-    background: url('../img/footer-bg.jpg') center bottom no-repeat;   
+    background: url('../../img/footer-bg.jpg') center bottom no-repeat;   
     background-color: #0d2444;
 }
 .page-index{
     width: 100%;
     overflow: hidden;
     padding-bottom: 200px;
-    background: url('../img/index-banner.jpg') center top no-repeat;
+    background: url('../../img/index-banner.jpg') center top no-repeat;
     .pub-main{
         width: 1200px;
         margin: 0 auto;
@@ -29,14 +29,6 @@ body{
         height: 92px;
         position: relative;
         box-sizing: border-box;
-        .que-icon{
-            width: 20px;
-            height: 20px;
-            background: url('../img/que-icon.png');
-            position: absolute;
-            right: 10px;
-            top: 10px;
-        }
     }
     .user-info{
         float: left;
@@ -73,14 +65,14 @@ body{
             display: inline-block;
             width: 38px;
             height: 38px;
-            background: url('../img/score-icon.png') center center no-repeat;
+            background: url('../../img/score-icon.png') center center no-repeat;
             vertical-align: middle;
         }
         .guess-icon{
             display: inline-block;
             width: 38px;
             height: 36px;
-            background: url('../img/guess-icon.png') center center no-repeat;
+            background: url('../../img/guess-icon.png') center center no-repeat;
             vertical-align: middle;
         }
         .title{
@@ -524,6 +516,12 @@ body{
     }
 }
 
+.waiting-tips{
+    color: #ffffff;
+    text-align: center;
+    font-size: 30px;
+}
+
 $borderColor :#15335e;
 $contBgColor: #061529;
 
@@ -689,7 +687,7 @@ $contBgColor: #061529;
             display: inline-block;
             width: 9px;
             height: 6px;
-            background: url('../img/arrow-icon.png');
+            background: url('/src/img/arrow-icon.png');
             background-size:  100%;
             margin-left: 4px;
             transition: .3s all ease-in-out;
@@ -823,6 +821,7 @@ $contBgColor: #061529;
 
 // 匹配手机H5
 @import "media.scss";
+
 .mobile-guess-modal{
     padding: 30px 15px;
 }

+ 0 - 0
2018专题/球球大作战竞猜/src/sass/media.scss → 2018专题/球球大作战竞猜/src/sass/index/media.scss


+ 0 - 0
2018专题/球球大作战竞猜/src/sass/swiper.css → 2018专题/球球大作战竞猜/src/sass/index/swiper.css


+ 532 - 0
2018专题/球球大作战竞猜/src/sass/match08/global.scss

@@ -0,0 +1,532 @@
+@charset "UTF-8";
+@import "../base/base.scss";
+@import "../base/mixins";
+@import "swiper.css";
+body{
+    background: url('../../img/footer-bg.jpg') center bottom no-repeat;   
+    background-color: #0d2444;
+}
+.page-index{
+    width: 100%;
+    overflow: hidden;
+    padding-bottom: 200px;
+    background: url('../../img/index-banner.jpg') center top no-repeat;
+    .pub-main{
+        width: 1200px;
+        margin: 0 auto;
+    }
+}
+.topbar{
+    width: 100%;
+    height: 5px;
+    background-color: #1d539c;
+    background-size: cover;
+}
+.page-top{
+    margin-top: 660px;
+    .user{
+        background-color: #061529;
+        height: 92px;
+        position: relative;
+        box-sizing: border-box;
+    }
+    .user-info{
+        float: left;
+        margin-top: 14px;
+        img {
+            display: inline-block;
+            margin-left: 25px;
+            width: 62px;
+            height: 62px;
+        }
+        .name{
+            display: inline-block;
+            font-size: 18px;
+            color: #ffffff;
+            margin-left: 10px;
+            width: 110px;
+            overflow: hidden;
+            text-overflow:ellipsis;
+            white-space: nowrap;
+            vertical-align: text-bottom;
+        }
+        .btn{
+            display: inline-block;
+            color: #0083e8;
+            font-size: 14px;
+            text-decoration: underline;
+        }
+    }
+    .result-num{
+        float: left;
+        line-height: 92px;
+        margin-left: 40px;
+        .score-icon{
+            display: inline-block;
+            width: 38px;
+            height: 38px;
+            background: url('../../img/score-icon.png') center center no-repeat;
+            vertical-align: middle;
+        }
+        .guess-icon{
+            display: inline-block;
+            width: 38px;
+            height: 36px;
+            background: url('../../img/guess-icon.png') center center no-repeat;
+            vertical-align: middle;
+        }
+        .title{
+            display: inline-block;
+            font-size: 14px;
+            color: #ffd597;
+        }
+        .num{
+            display: inline-block;
+            font-size: 14px;
+            color: #ffffff;
+        }
+    }
+}
+.page-top-btnwrap{
+    float: right;
+    line-height: 92px;
+    margin-right: 28px;
+}
+.page-top-btn{
+    position: relative;
+    width: 110px;
+    height: 46px;
+    margin-right: 18px;
+    line-height: 46px;
+    border-radius: 4px;
+    font-size: 14px;
+    background-color: #234c83;
+    cursor: pointer;
+    color: #ffffff;
+    &:hover{
+        background-color: #1d3f6b;
+        color: #ffffff;
+        .active {
+            display: inline-block;
+        }
+        .normal {
+            display: none;
+        }
+    }
+    .active{
+        display: none;
+    }
+    .jump-tips{
+        position: absolute;
+        width: 40px;
+        padding: 0 6px;
+        font-size: 12px;
+        color: #ffffff;
+        background-color: #d90639;
+        text-align: center;
+        line-height: 20px;
+        top: -4px;
+        border-radius: 10px;
+        animation: jump .8s ease-in infinite;
+    }
+}
+@keyframes jump{
+    0% {
+        top: -6px;
+    }
+    100% {
+        top: -4px;
+    }
+}
+.page-title{
+    text-align: center;
+    font-size: 36px;
+    margin-top: 56px;
+    margin-bottom: 18px;
+    span{
+        position: relative;
+    }
+    .red{
+        color: #ffffff;
+        &::after{
+            content: '';
+            position: absolute;
+            width: 50px;
+            border-top: 2px solid #ff6600;
+            top: 18px;
+            left: -68px;
+        }
+    }
+    .blue{
+        color: #ffffff;
+        &::after{
+            content: '';
+            position: absolute;
+            width: 50px;
+            border-top: 2px solid #ff6600;
+            top: 18px;
+            right: -68px;
+        }
+    }
+}
+
+// 排行榜
+.rank-wrap{
+    background-color: #061529;
+    padding: 34px 30px;
+    overflow: hidden;
+    .rank-show-more{
+        cursor: pointer;
+        height: 46px;
+        line-height: 46px;
+        text-align: center;
+        color: #ffffff;
+        &:hover{
+            background-color: #525058;
+        }
+    }
+    .fix-height{
+        height: 736px;
+        overflow: hidden;
+    }
+    table{
+        width: 100%;
+        thead{
+            background-color: #0d2444;
+            td{
+                color: #ffffff;
+            }
+        }
+        tbody{
+            tr:nth-child(odd) {
+                background-color: #07172d;
+            }
+            tr:nth-child(even) {
+                background-color: #081c37;
+            }
+            td{
+                color: #84ade3;
+            }
+        }
+        tr{
+            color: #84ade3;
+            text-align: center;
+            font-size: 14px;
+        }
+        td{
+            padding: 16px;            
+        }
+    }
+}
+.bonusSpan{
+    display: inline-block;
+    margin: 0 5px;
+    line-height: 26px;
+}
+#bonus-table{
+    tr{
+        &:nth-child(even) {
+            text-align: left;
+        }
+    }
+}
+
+// 奖品
+.prize-wrap{
+    .prize-list{
+        float: left;
+        position: relative;
+        height: 590px;
+        overflow: hidden;
+        .prize-list-item{
+            position: relative;
+        }
+        img{
+            transition: all .2s ease-in-out;
+            width: 100%;
+            height: 590px;
+            &:hover{
+                transform: scale(1.1);
+            }
+        }
+        &.one{
+            width: 784px;
+            margin-right: 6px;      
+        }
+        &.two{
+            width: 410px;
+            .prize-list-item{
+                height: 295px;
+                margin-bottom: 6px;
+            }
+            img{
+                height: 295px;
+            }
+        }
+    }
+    .text-wrap{
+        width: 100%;
+        position: absolute;
+        z-index: 999;
+        bottom: 0;
+        // background-color: rgba($color: #000000, $alpha: .5);
+        padding-bottom: 10px;
+        left: 50%;
+        transform: translate(-50%,0);
+        .prize-name{
+            font-size: 20px;
+            color: #ffd18d;
+            text-align: center;
+            margin-bottom: 6px;
+        }
+        .prize-tips{
+            color: #ffffff;
+            font-size: 14px;
+            text-align: center;
+        }
+    }
+}
+.prize-wrap-moblie{
+    display: none;
+    .img-wrap{
+        float: left;
+        width: 50%;
+        padding: 0 4px;
+        box-sizing: border-box;
+        margin-bottom: 8px;
+        .cover{
+            width: 100%;
+            padding-bottom: 55%;
+            overflow: hidden;
+            height: 0;
+        }
+        img{
+            width: 100%;
+            height: auto;
+        }
+        .name{
+            font-size: 15px;
+            color: #ffd18d;
+            text-align: center;
+            margin-bottom: 10px;
+            margin-top: 6px;
+        }
+        .tips{
+            font-size: 12px;
+            color: #ffffff;
+            text-align: center;
+        }
+    }
+}
+.rule-wrap{
+    box-sizing: border-box;
+    background-color: #061529;
+    padding: 50px 36px;
+    .rule-explain{
+        color: #84ade3;
+        font-size: 14px;
+        >span{
+            color: #84ade3;
+        }
+    }
+    .rule-item{
+        font-size: 14px;
+        margin-top: 10px;
+        .title{
+            float: left;
+            color: #84ade3;
+            width: 94px;
+            text-align: right;
+            line-height: 1.7;
+        }
+        .text{
+            margin-left: 94px;
+            color: #84ade3;
+            line-height: 1.7;
+        }
+    }
+}
+
+// 弹窗
+.modal-mask{
+    display: none;
+    position: fixed;
+    z-index: 888;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background-color: rgba($color: #000000, $alpha: .2);
+}
+.pub-modal{
+    z-index: 999;
+    padding: 30px;
+    background-color: #ffffff;
+    border-top: 6px solid #1d539c;
+    position: fixed;
+    left: 50%;
+    top: 50%;
+    transform: translate(-50%, -50%);
+    .title{
+        color: #4d4d4d;
+        font-size: 22px;
+        text-align: center;
+        margin-bottom: 16px;
+    }
+    .form-item{
+        line-height: 36px;
+        margin-bottom: 10px;
+    }
+    .form-title{
+        width: 80px;
+        height: 36px;
+        float: left;
+        font-size: 14px;
+        color: #4d4d4d;
+    }
+    .form-text{
+        float: left;
+        width: 300px;
+        input{
+            height: 36px;
+            width: 294px;
+            padding-left: 6px;
+            font-size: 16px;
+            color: #333333;
+            line-height: 36px;
+            background-color: #f7f7f7;
+            border: 1px solid #807d8c;
+            outline: none;
+            border-radius: 4px;
+        }
+        textarea{
+            width: 294px;
+            background-color: #f7f7f7;
+            border: 1px solid #807d8c;
+            height: 118px;
+            resize: none;
+            border-radius: 4px;
+            outline: none;
+            font-size: 16px;
+            color: #333333;
+            padding: 6px;
+            vertical-align: middle;
+        }
+        .tips{
+            display: none;
+            font-size: 12px;
+            color: #f35353;
+            line-height: 1;
+            margin-top: 6px;
+        }
+    }
+    .submit-btn{
+        width: 90px;
+        height: 36px;
+        text-align: center;
+        color: #ffffff;
+        font-size: 14px;
+        background-color: #807d8c;
+        border-radius: 4px;
+    }
+    .list-table{
+        width: 820px;
+        tr.head{
+            background-color: #4d4d4d;
+        }
+        tr{
+            background-color: #f5f5f5;
+            &:nth-child(even){
+                background-color: #efefef;
+            }
+        }
+        th,td{
+            text-align: center;
+            font-size: 14px;
+            padding: 14px 0;
+        }
+        th{
+            color: #ffffff;
+        }
+        td{
+            color: #4d4d4d;
+        }
+        .right{
+            color: #6baf54;
+        }
+        .error{
+            color: #ff6600;
+        }
+    }
+}
+#myGueModal{
+    .pub-modal {
+        max-height: 660px;
+        overflow: auto;
+    }
+}
+
+// 移动端底部
+.m-footer{
+    display: none;
+    padding: 16px 0;
+    background-color: #262626;
+    .link{
+        text-align: center;
+        margin-bottom: 8px;
+        a{
+            font-size: 12px;
+            color: #b5b5b5;
+            display: inline-block;
+            margin: 0 6px;
+        }
+    }
+    .auth{
+        font-size: 12px;
+        text-align: center;
+        color: #6d6b6b;
+    }
+}
+
+// 获奖名单
+.bonus-wrap{
+    background-color: #061529;
+    padding: 30px;
+    .level-box{
+        float: left;
+        width: 33.33%;
+    }
+    .title{
+        font-size: 16px;
+        color: #ffffff;
+        text-align: center;
+        line-height: 44px;
+    }
+    .level-list{
+        padding: 20px 28px;
+        color: #ffffff;
+        background-color: #0b284d;
+        border-right: 1px solid #1d1d1d; 
+        min-height: 240px;
+        .name{
+            font-size: 14px;
+            line-height: 1.8;
+            color: #ffffff;
+            display: inline-block;
+            margin-right: 4px;
+        }
+    }
+}
+
+.waiting-tips{
+    color: #ffffff;
+    text-align: center;
+    font-size: 30px;
+}
+
+// 匹配手机H5
+@import "media.scss";
+
+.mobile-guess-modal{
+    padding: 30px 15px;
+}

+ 260 - 0
2018专题/球球大作战竞猜/src/sass/match08/media.scss

@@ -0,0 +1,260 @@
+@media screen and (max-width: 750px) {
+    .page-index{
+        padding: 0 15px;
+        box-sizing: border-box;
+    }
+    .page-index .pub-main{
+        width: 100%;
+    }
+    .page-index{
+        background: url('http://img.dwstatic.com/qqdzz/pic/qqdzz1.jpg') center top no-repeat;
+        height: auto;
+        padding-bottom: 50px;
+        background-size: contain;
+    }
+    /* 头部 */
+    .page-top .user{
+        height: auto;
+        padding: 10px;
+    }
+    .page-top .user-info img{
+        width: 45px;
+        height: 45px;
+    }
+    .page-top{
+        margin-top: 200px;
+        margin-bottom: 60px;
+    }
+    .page-top .user-info{
+        float: none;
+        position: relative;
+        margin-top: 0;
+    }
+    .page-top .user .que-icon{
+        display: none;
+    }
+    .page-top .result-num .title{
+        font-size: 12px;
+    }
+    .page-top .user-info .btn{
+        position: absolute;
+        width: 52px;
+        height: 27px;
+        color: #aaa6b7;
+        font-size: 12px;
+        line-height: 27px;
+        border: 1px solid #aaa6b7;
+        text-decoration: none;
+        text-align: center;
+        right: 10px;
+        top: 4px;
+    }
+    .page-top .user-info img{
+        margin-left: 0;
+    }
+    .page-top .result-num{
+        margin-left: 0;
+        line-height: 50px;
+        font-size: 12px;
+        width: 48%;
+        float: none;
+        display: inline-block;
+    }
+    .page-top .result-num .num{
+        font-size: 12px;
+    }
+    .page-top .result-num .score-icon,.page-top .result-num .guess-icon{
+        width: 20px;
+        height: 20px;
+        background-size: contain;
+    }
+    .page-top-btnwrap{
+        margin-left: 0;
+        display: flex;
+        float: none;
+    }
+    .page-top-btn{
+        flex: 1;
+        width: 100%;
+        margin-right: 10px;
+        border-radius: 0;
+        height: 30px;
+        line-height: 30px;
+    }
+    .page-top-btnwrap{
+        .page-top-btn{
+            i{
+                display: none;
+            }
+        }
+        .page-top-btn:hover .active{
+            display: none;
+        }
+    }
+    /* 轮播 */
+    .page-stake{
+        padding: 10px;
+    }
+    .page-stake .match-container {
+        padding: 10px;
+    }
+    .page-stake .swiper-slide .info .date{
+        margin-right: 2px;
+    }
+    .page-stake .swiper-slide .info .status{
+        font-size: 12px;
+        margin-top: 3px;
+    }
+    .page-stake .match .match-item img{
+        width: 32px;
+        display: inline-block;
+        margin-top: 18px;
+    }
+    .page-stake .match-res-title{
+        padding-left: 6px;
+        margin-top: 7px;
+    }
+    .page-stake .team-btn-wrap .team-btn{
+        width: 60px;
+        height: 30px;
+        line-height: 30px;
+    }
+    .page-stake .swiper-slide .title{
+        font-size: 12px;
+    }
+    .week-select .week-btn-wrap{
+        width: 80%;
+        height: 28px;
+    }
+    .week-select .btn-more{
+        height: 28px;
+        line-height: 28px;
+        width: 20%;
+        border-radius: 2px;
+    }
+    .week-select .week-btn-wrap .btn{
+        line-height: 28px;
+        height: 28px;
+        width: 24%;
+        margin-right: 1%;
+        border-radius: 2px;
+    }
+    /* 排名 */
+    .rank-wrap{
+        padding: 0;
+    }
+    .rank-wrap table td{
+        padding: 10px 0;
+    }
+    .rule-wrap{
+        padding: 20px 30px;
+        height: auto;
+    }
+    .rule-wrap .rule-item .title{
+        margin-bottom: 6px;
+    }
+    .rule-wrap .rule-item .title-p{
+        margin-bottom: 0;
+    }
+    .prize-wrap {
+        display: none;
+    }
+    .page-title{
+        font-size: 18px;
+    }
+    .page-title .red::after{
+        top: 12px;
+    }
+    .page-title .blue::after{
+        top: 12px;
+    }
+    .prize-wrap-moblie{
+        display: block;
+    }
+    .rule-wrap .rule-item .text p{
+        line-height: 1.6;
+    }
+    .rule-wrap .rule-item .text{
+        line-height: 1.6;
+    }
+    .rule-wrap .rule-explain > span{
+        line-height: 1.6;
+    }
+    // 弹窗
+    .pub-modal{
+        left: 15px;
+        right: 15px;
+        transform: translate(0, -50%);
+        padding: 0;
+        background-color: #e0dfe7;
+        .list-table{
+            width: 100%;
+            th{
+                font-size: 12px;
+            }
+            td{
+                font-size: 12px;
+            }
+        }
+        .form-title{
+            padding-left: 24px;
+            width: 70px;
+        }
+        .form-text{
+            margin-left: 96px;
+            width: auto;
+            float: none;
+            input{
+                width: 90%;
+                background-color: #ffffff;
+                height: 30px;
+                border-radius: 2px;
+            }
+            textarea{
+                width: 90%;
+                background-color: #ffffff;
+                height: 60px;
+                border-radius: 2px;
+            }
+        }
+        .title{
+            margin-top: 12px;
+            font-weight: bold;
+        }
+        .submit-btn{
+            height: 30px;
+            line-height: 30px;
+        }
+    }
+    // 底部
+    .dwCommonFooter {
+        display: none;
+    }
+    .m-footer{
+        display: block;
+    }
+
+    // 获奖弹窗
+    .bonus-wrap{
+        padding: 10px;
+        .level-list{
+            padding: 10px;
+        }
+    }
+
+    .zt-mod-schedule .zt-ui-carousel{
+        padding: 0 15px;
+    }
+    .zt-mod-schedule .item-info .item-info-padding{
+        padding: 20px;
+    }
+    .zt-mod-schedule .btn-prev, .zt-mod-schedule .btn-next{
+        width: 31px;
+        height: 32px;
+        i{
+            width: 31px;
+            height: 32px;
+            background-size: cover;
+        }
+    }
+}

+ 616 - 0
2018专题/球球大作战竞猜/src/sass/match08/swiper.css

@@ -0,0 +1,616 @@
+/**
+ * Swiper 4.2.0
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
+ * http://www.idangero.us/swiper/
+ *
+ * Copyright 2014-2018 Vladimir Kharlampidi
+ *
+ * Released under the MIT License
+ *
+ * Released on: March 16, 2018
+ */
+.top-swiper-container {
+  margin: 0 auto;
+  position: relative;
+  overflow: hidden;
+  list-style: none;
+  padding: 0;
+  /* Fix of Webkit flickering */
+  z-index: 1;
+}
+.swiper-container-no-flexbox .swiper-slide {
+  float: left;
+}
+.swiper-container-vertical > .swiper-wrapper {
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+  -webkit-flex-direction: column;
+  -ms-flex-direction: column;
+  flex-direction: column;
+}
+.swiper-wrapper {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  z-index: 1;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-transition-property: -webkit-transform;
+  transition-property: -webkit-transform;
+  -o-transition-property: transform;
+  transition-property: transform;
+  transition-property: transform, -webkit-transform;
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+}
+.swiper-container-android .swiper-slide,
+.swiper-wrapper {
+  -webkit-transform: translate3d(0px, 0, 0);
+  transform: translate3d(0px, 0, 0);
+}
+.swiper-container-multirow > .swiper-wrapper {
+  -webkit-flex-wrap: wrap;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+}
+.swiper-container-free-mode > .swiper-wrapper {
+  -webkit-transition-timing-function: ease-out;
+  -o-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+  margin: 0 auto;
+}
+.swiper-slide {
+  -webkit-flex-shrink: 0;
+  -ms-flex-negative: 0;
+  flex-shrink: 0;
+  width: 100%;
+  height: 100%;
+  position: relative;
+  -webkit-transition-property: -webkit-transform;
+  transition-property: -webkit-transform;
+  -o-transition-property: transform;
+  transition-property: transform;
+  transition-property: transform, -webkit-transform;
+}
+.swiper-invisible-blank-slide {
+  visibility: hidden;
+}
+/* Auto Height */
+.swiper-container-autoheight,
+.swiper-container-autoheight .swiper-slide {
+  height: auto;
+}
+.swiper-container-autoheight .swiper-wrapper {
+  -webkit-box-align: start;
+  -webkit-align-items: flex-start;
+  -ms-flex-align: start;
+  align-items: flex-start;
+  -webkit-transition-property: height, -webkit-transform;
+  transition-property: height, -webkit-transform;
+  -o-transition-property: transform, height;
+  transition-property: transform, height;
+  transition-property: transform, height, -webkit-transform;
+}
+/* 3D Effects */
+.swiper-container-3d {
+  -webkit-perspective: 1200px;
+  perspective: 1200px;
+}
+.swiper-container-3d .swiper-wrapper,
+.swiper-container-3d .swiper-slide,
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom,
+.swiper-container-3d .swiper-cube-shadow {
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d;
+}
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  pointer-events: none;
+  z-index: 10;
+}
+.swiper-container-3d .swiper-slide-shadow-left {
+  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+.swiper-container-3d .swiper-slide-shadow-right {
+  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+.swiper-container-3d .swiper-slide-shadow-top {
+  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+.swiper-container-3d .swiper-slide-shadow-bottom {
+  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+/* IE10 Windows Phone 8 Fixes */
+.swiper-container-wp8-horizontal,
+.swiper-container-wp8-horizontal > .swiper-wrapper {
+  -ms-touch-action: pan-y;
+  touch-action: pan-y;
+}
+.swiper-container-wp8-vertical,
+.swiper-container-wp8-vertical > .swiper-wrapper {
+  -ms-touch-action: pan-x;
+  touch-action: pan-x;
+}
+.swiper-button-prev,
+.swiper-button-next {
+  position: absolute;
+  top: 50%;
+  width: 18px;
+  height: 32px;
+  margin-top: -16px;
+  z-index: 10;
+  cursor: pointer;
+  background-size: 18px 32px;
+  background-position: center;
+  background-repeat: no-repeat;
+}
+.btn-prev.swiper-button-disabled,
+.btn-next.swiper-button-disabled {
+  opacity: 0.35;
+  cursor: auto;
+  pointer-events: none;
+}
+.swiper-button-prev,
+.swiper-container-rtl .swiper-button-next {
+  background-image: url('../img/arrow-left-icon.png');
+  left: 4px;
+  right: auto;
+}
+.swiper-button-next,
+.swiper-container-rtl .swiper-button-prev {
+  background-image: url('../img/arrow-right-icon.png');
+  right: 4px;
+  left: auto;
+}
+.swiper-button-prev.swiper-button-white,
+.swiper-container-rtl .swiper-button-next.swiper-button-white {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next.swiper-button-white,
+.swiper-container-rtl .swiper-button-prev.swiper-button-white {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-prev.swiper-button-black,
+.swiper-container-rtl .swiper-button-next.swiper-button-black {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next.swiper-button-black,
+.swiper-container-rtl .swiper-button-prev.swiper-button-black {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-lock {
+  display: none;
+}
+.swiper-pagination {
+  position: absolute;
+  text-align: center;
+  -webkit-transition: 300ms opacity;
+  -o-transition: 300ms opacity;
+  transition: 300ms opacity;
+  -webkit-transform: translate3d(0, 0, 0);
+  transform: translate3d(0, 0, 0);
+  z-index: 10;
+}
+.swiper-pagination.swiper-pagination-hidden {
+  opacity: 0;
+}
+/* Common Styles */
+.swiper-pagination-fraction,
+.swiper-pagination-custom,
+.swiper-container-horizontal > .swiper-pagination-bullets {
+  bottom: 10px;
+  left: 0;
+  width: 100%;
+}
+/* Bullets */
+.swiper-pagination-bullets-dynamic {
+  overflow: hidden;
+  font-size: 0;
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+  -webkit-transform: scale(0.33);
+  -ms-transform: scale(0.33);
+  transform: scale(0.33);
+  position: relative;
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {
+  -webkit-transform: scale(1);
+  -ms-transform: scale(1);
+  transform: scale(1);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {
+  -webkit-transform: scale(1);
+  -ms-transform: scale(1);
+  transform: scale(1);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {
+  -webkit-transform: scale(0.66);
+  -ms-transform: scale(0.66);
+  transform: scale(0.66);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {
+  -webkit-transform: scale(0.33);
+  -ms-transform: scale(0.33);
+  transform: scale(0.33);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {
+  -webkit-transform: scale(0.66);
+  -ms-transform: scale(0.66);
+  transform: scale(0.66);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {
+  -webkit-transform: scale(0.33);
+  -ms-transform: scale(0.33);
+  transform: scale(0.33);
+}
+.swiper-pagination-bullet {
+  width: 8px;
+  height: 8px;
+  display: inline-block;
+  border-radius: 100%;
+  background: #000;
+  opacity: 0.2;
+}
+button.swiper-pagination-bullet {
+  border: none;
+  margin: 0;
+  padding: 0;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+}
+.swiper-pagination-clickable .swiper-pagination-bullet {
+  cursor: pointer;
+}
+.swiper-pagination-bullet-active {
+  opacity: 1;
+  background: #007aff;
+}
+.swiper-container-vertical > .swiper-pagination-bullets {
+  right: 10px;
+  top: 50%;
+  -webkit-transform: translate3d(0px, -50%, 0);
+  transform: translate3d(0px, -50%, 0);
+}
+.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
+  margin: 6px 0;
+  display: block;
+}
+.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
+  top: 50%;
+  -webkit-transform: translateY(-50%);
+  -ms-transform: translateY(-50%);
+  transform: translateY(-50%);
+  width: 8px;
+}
+.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+  display: inline-block;
+  -webkit-transition: 200ms top, 200ms -webkit-transform;
+  transition: 200ms top, 200ms -webkit-transform;
+  -o-transition: 200ms transform, 200ms top;
+  transition: 200ms transform, 200ms top;
+  transition: 200ms transform, 200ms top, 200ms -webkit-transform;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
+  margin: 0 4px;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
+  left: 50%;
+  -webkit-transform: translateX(-50%);
+  -ms-transform: translateX(-50%);
+  transform: translateX(-50%);
+  white-space: nowrap;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+  -webkit-transition: 200ms left, 200ms -webkit-transform;
+  transition: 200ms left, 200ms -webkit-transform;
+  -o-transition: 200ms transform, 200ms left;
+  transition: 200ms transform, 200ms left;
+  transition: 200ms transform, 200ms left, 200ms -webkit-transform;
+}
+.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+  -webkit-transition: 200ms right, 200ms -webkit-transform;
+  transition: 200ms right, 200ms -webkit-transform;
+  -o-transition: 200ms transform, 200ms right;
+  transition: 200ms transform, 200ms right;
+  transition: 200ms transform, 200ms right, 200ms -webkit-transform;
+}
+/* Progress */
+.swiper-pagination-progressbar {
+  background: rgba(0, 0, 0, 0.25);
+  position: absolute;
+}
+.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
+  background: #007aff;
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  -webkit-transform: scale(0);
+  -ms-transform: scale(0);
+  transform: scale(0);
+  -webkit-transform-origin: left top;
+  -ms-transform-origin: left top;
+  transform-origin: left top;
+}
+.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
+  -webkit-transform-origin: right top;
+  -ms-transform-origin: right top;
+  transform-origin: right top;
+}
+.swiper-container-horizontal > .swiper-pagination-progressbar {
+  width: 100%;
+  height: 4px;
+  left: 0;
+  top: 0;
+}
+.swiper-container-vertical > .swiper-pagination-progressbar {
+  width: 4px;
+  height: 100%;
+  left: 0;
+  top: 0;
+}
+.swiper-pagination-white .swiper-pagination-bullet-active {
+  background: #ffffff;
+}
+.swiper-pagination-progressbar.swiper-pagination-white {
+  background: rgba(255, 255, 255, 0.25);
+}
+.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill {
+  background: #ffffff;
+}
+.swiper-pagination-black .swiper-pagination-bullet-active {
+  background: #000000;
+}
+.swiper-pagination-progressbar.swiper-pagination-black {
+  background: rgba(0, 0, 0, 0.25);
+}
+.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill {
+  background: #000000;
+}
+.swiper-pagination-lock {
+  display: none;
+}
+/* Scrollbar */
+.swiper-scrollbar {
+  border-radius: 10px;
+  position: relative;
+  -ms-touch-action: none;
+  background: rgba(0, 0, 0, 0.1);
+}
+.swiper-container-horizontal > .swiper-scrollbar {
+  position: absolute;
+  left: 1%;
+  bottom: 3px;
+  z-index: 50;
+  height: 5px;
+  width: 98%;
+}
+.swiper-container-vertical > .swiper-scrollbar {
+  position: absolute;
+  right: 3px;
+  top: 1%;
+  z-index: 50;
+  width: 5px;
+  height: 98%;
+}
+.swiper-scrollbar-drag {
+  height: 100%;
+  width: 100%;
+  position: relative;
+  background: rgba(0, 0, 0, 0.5);
+  border-radius: 10px;
+  left: 0;
+  top: 0;
+}
+.swiper-scrollbar-cursor-drag {
+  cursor: move;
+}
+.swiper-scrollbar-lock {
+  display: none;
+}
+.swiper-zoom-container {
+  width: 100%;
+  height: 100%;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+  -ms-flex-align: center;
+  align-items: center;
+  text-align: center;
+}
+.swiper-zoom-container > img,
+.swiper-zoom-container > svg,
+.swiper-zoom-container > canvas {
+  max-width: 100%;
+  max-height: 100%;
+  -o-object-fit: contain;
+  object-fit: contain;
+}
+.swiper-slide-zoomed {
+  cursor: move;
+}
+/* Preloader */
+.swiper-lazy-preloader {
+  width: 42px;
+  height: 42px;
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  margin-left: -21px;
+  margin-top: -21px;
+  z-index: 10;
+  -webkit-transform-origin: 50%;
+  -ms-transform-origin: 50%;
+  transform-origin: 50%;
+  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
+  animation: swiper-preloader-spin 1s steps(12, end) infinite;
+}
+.swiper-lazy-preloader:after {
+  display: block;
+  content: '';
+  width: 100%;
+  height: 100%;
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+  background-position: 50%;
+  background-size: 100%;
+  background-repeat: no-repeat;
+}
+.swiper-lazy-preloader-white:after {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+@-webkit-keyframes swiper-preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes swiper-preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* a11y */
+.swiper-container .swiper-notification {
+  position: absolute;
+  left: 0;
+  top: 0;
+  pointer-events: none;
+  opacity: 0;
+  z-index: -1000;
+}
+.swiper-container-fade.swiper-container-free-mode .swiper-slide {
+  -webkit-transition-timing-function: ease-out;
+  -o-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+}
+.swiper-container-fade .swiper-slide {
+  pointer-events: none;
+  -webkit-transition-property: opacity;
+  -o-transition-property: opacity;
+  transition-property: opacity;
+}
+.swiper-container-fade .swiper-slide .swiper-slide {
+  pointer-events: none;
+}
+.swiper-container-fade .swiper-slide-active,
+.swiper-container-fade .swiper-slide-active .swiper-slide-active {
+  pointer-events: auto;
+}
+.swiper-container-cube {
+  overflow: visible;
+}
+.swiper-container-cube .swiper-slide {
+  pointer-events: none;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  z-index: 1;
+  visibility: hidden;
+  -webkit-transform-origin: 0 0;
+  -ms-transform-origin: 0 0;
+  transform-origin: 0 0;
+  width: 100%;
+  height: 100%;
+}
+.swiper-container-cube .swiper-slide .swiper-slide {
+  pointer-events: none;
+}
+.swiper-container-cube.swiper-container-rtl .swiper-slide {
+  -webkit-transform-origin: 100% 0;
+  -ms-transform-origin: 100% 0;
+  transform-origin: 100% 0;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-cube .swiper-slide-active .swiper-slide-active {
+  pointer-events: auto;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-cube .swiper-slide-next,
+.swiper-container-cube .swiper-slide-prev,
+.swiper-container-cube .swiper-slide-next + .swiper-slide {
+  pointer-events: auto;
+  visibility: visible;
+}
+.swiper-container-cube .swiper-slide-shadow-top,
+.swiper-container-cube .swiper-slide-shadow-bottom,
+.swiper-container-cube .swiper-slide-shadow-left,
+.swiper-container-cube .swiper-slide-shadow-right {
+  z-index: 0;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+}
+.swiper-container-cube .swiper-cube-shadow {
+  position: absolute;
+  left: 0;
+  bottom: 0px;
+  width: 100%;
+  height: 100%;
+  background: #000;
+  opacity: 0.6;
+  -webkit-filter: blur(50px);
+  filter: blur(50px);
+  z-index: 0;
+}
+.swiper-container-flip {
+  overflow: visible;
+}
+.swiper-container-flip .swiper-slide {
+  pointer-events: none;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  z-index: 1;
+}
+.swiper-container-flip .swiper-slide .swiper-slide {
+  pointer-events: none;
+}
+.swiper-container-flip .swiper-slide-active,
+.swiper-container-flip .swiper-slide-active .swiper-slide-active {
+  pointer-events: auto;
+}
+.swiper-container-flip .swiper-slide-shadow-top,
+.swiper-container-flip .swiper-slide-shadow-bottom,
+.swiper-container-flip .swiper-slide-shadow-left,
+.swiper-container-flip .swiper-slide-shadow-right {
+  z-index: 0;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+}
+.swiper-container-coverflow .swiper-wrapper {
+  /* Windows 8 IE 10 fix */
+  -ms-perspective: 1200px;
+}

+ 20 - 0
2018专题/球球大作战竞猜/src/sass/pubswiper/media.scss

@@ -0,0 +1,20 @@
+@media screen and (max-width: 750px) {
+    .zt-mod-schedule{
+        width: 100%;
+    }
+    .zt-mod-schedule .zt-ui-carousel{
+        padding: 0 15px;
+    }
+    .zt-mod-schedule .item-info .item-info-padding{
+        padding: 20px;
+    }
+    .zt-mod-schedule .btn-prev, .zt-mod-schedule .btn-next{
+        width: 31px;
+        height: 32px;
+        i{
+            width: 31px;
+            height: 32px;
+            background-size: cover;
+        }
+    }
+}

+ 304 - 0
2018专题/球球大作战竞猜/src/sass/pubswiper/pubswiper.scss

@@ -0,0 +1,304 @@
+@import "../base/base.scss";
+@import "../base/mixins";
+@import "swiper.css";
+
+$borderColor :#15335e;
+$contBgColor: #061529;
+
+// 竞猜面板
+.zt-mod-schedule{
+    width: 1200px;
+    margin: 0 auto;
+    .fr{
+        float: right;
+    }
+    .item-info{
+        position: relative;
+        float: left;
+        text-align: center;
+        font-size: 14px;
+        color: #84ade3;
+        box-sizing: border-box;
+        padding: 25px 0;
+        .item-info-padding {
+            padding: 0 48px;
+        }
+        h2{
+            color: #f8dd59;
+            font-size: 18px;
+        }
+        &:before{
+            content: '';
+            position: absolute;
+            top: 50%;
+            right: 0;
+            margin-top: -35px;
+            height: 70px;
+            border-left: 1px solid $borderColor;
+        }
+        &:last-child{
+            &:before{
+                display: none;
+            }
+        }
+    }
+    .info_time{
+        @include clearfix();
+        line-height: 46px;
+        height: 40px;
+        text-align: left;
+        border-bottom: 1px dashed $borderColor;
+        span{
+            margin: 0 10px;
+        }
+    }
+    .info_res{
+        padding: 0 8px 0 8px;
+        .rank{
+            // float: left;
+            // width: 47px;
+            margin-top: 20px;
+        }
+        .rank1{
+            // margin: -12px 49px 0 49px;
+        }
+        .left-side{
+            width: 150px;
+            float: left;
+        }
+        .right-side{
+            float: right;
+            width: 102px;
+            margin-top: 16px;
+            .rank-tips{
+                float: left;
+                color: #e0c953;
+                font-size: 14px;
+                font-weight: bold;
+                width: 22px;
+                text-align: left;
+                margin-top: 50px;
+                line-height: 1.4;
+            }
+            .team-list{
+                float: right;
+                width: 80px;
+            }
+            .team-item{
+                width: 32px;
+                float: left;
+                margin: 0 6px 8px 0;
+                img{
+                    width: 32px;
+                    height: 32px;
+                    border: 1px solid $borderColor;
+                }
+            }
+            .team-name{
+                float: none;
+                font-size: 12px;
+                color: #84ade3;
+                margin-top: 6px;
+                text-align: center;
+            }
+        }
+        @for $i from 1 through 3{
+            .rank#{$i}{
+                .icon{
+                    background: url(/src/img/icon-rank#{$i}.png?__sprite) no-repeat;
+                }
+            }
+        }
+        .icon{
+            // display: block;
+            float: left;
+            width: 47px;
+            height: 37px;
+        }
+        .cover{
+            float: left;
+            margin: 0 10px;
+            width: 40px;
+            height: 40px;
+            border: 1px solid $borderColor;
+            img{
+                width: 40px;
+                height: 40px;
+                max-width: 100%;
+                vertical-align: middle;
+            }
+        }
+        p{
+            float: left;
+            margin-top: 14px;
+            // line-height: 24px;
+            @include ellipsis();
+        }
+        h3{
+            position: relative;
+            margin-top: 12px;
+            &:before,&:after{
+                content: "";
+                position: absolute;
+                top: 10px;
+                right: -10px;
+                width: 85px;
+                border-top: 1px solid $borderColor;
+            }
+            &:before{
+                left: -10px;
+            }
+            a{
+                color: #4882cf;
+            }
+        }
+    }
+    .info-status{
+        width: 138px;
+        height: 34px;
+        line-height: 34px;
+        border-radius: 17px;
+        color: #FFF;
+        margin: 14px auto 0;
+        background-color: #234c83;
+        cursor: pointer;
+        &:hover{
+            background-color: #1b3c66;
+        }
+        .arrow-icon{
+            display: inline-block;
+            width: 9px;
+            height: 6px;
+            background: url('/src/img/arrow-icon.png');
+            background-size:  100%;
+            margin-left: 4px;
+            transition: .3s all ease-in-out;
+            &.rotate {
+                transform: rotate(180deg);
+            }
+        }
+    }
+    .info-define{
+        display: inline-block;
+        height: 34px;
+        line-height: 34px;
+        border-radius: 17px;
+        color: #FFF;
+        margin: 14px auto 0;
+        background-color: #234c83;
+        padding: 0 20px;
+    }
+    .zt-ui-carousel{
+        position: relative;
+        background: $contBgColor;
+        padding: 0 50px;
+        border-radius: 8px;
+    }
+    .ui-slide__tags{
+        display: none;
+    }
+    .zt-ui-carousel__scroller{
+        overflow: hidden;
+    }
+    .btn-prev,.btn-next{
+        position: absolute;
+        z-index: 999;
+        top: 50%;
+        margin-top: -32px;
+        width: 62px;
+        height: 64px;
+        cursor: pointer;
+        i{
+            display: inline-block;
+            width: 100%;
+            height: 100%;
+            vertical-align: middle;
+            transition: all .2s;
+            &:hover{
+                @include opacity(0.8);
+            }
+        }
+    }
+    .btn-prev{
+        left: 0;
+        i{
+            background: url(/src/img/icon-prev.png) no-repeat;
+        }
+    }
+    .btn-next{
+        right: 0;
+        i{
+            background: url(/src/img/icon-next.png) no-repeat;
+        }
+    }
+    .schedule-guess{
+        display: none;
+        background-color: #0d2444;
+        padding: 35px 28px;
+        border-radius: 10px;
+        margin-top: 15px;
+        text-align: left;
+        .que-title{
+            position: relative;
+            padding-left: 10px;
+            line-height: 1.6;
+            text-align: left;
+            color: #84ade3;
+            font-size: 12px;
+            .tips{
+                color: #2c5fa4;
+            }
+            &::after{
+                content: '';
+                position: absolute;
+                left: 0;
+                top: 3px;
+                height: 12px;
+                width: 4px;
+                background-color: #ff6600;
+            }
+        }
+        .que-radio {
+            margin-top: 15px;
+            margin-bottom: 10px;
+            padding-left: 10px;
+            text-align: left;
+            label {
+                display: inline-block;
+                color: #84ade3;
+                font-size: 12px;
+                margin-right: 15px;
+                margin-bottom: 12px;
+                line-height: 1.6;
+            }
+            input{
+                margin-right: 6px;
+                vertical-align: middle;
+            }
+        }
+    }
+    .live-que-submit{
+        color: #ffffff;
+        width: 102px;
+        line-height: 34px;
+        text-align: center;
+        background-color: #234c83;
+        border-radius: 17px;
+        cursor: pointer;
+        &:hover{
+            background-color: #1b3c66;
+        }
+    }
+    .live-que-disabled{
+        color: #ffffff;
+        width: 102px;
+        line-height: 34px;
+        text-align: center;
+        background-color: #234c83;
+        border-radius: 17px;
+        pointer-events: none;
+        opacity: .6;
+    }
+}
+
+@import "media.scss";

+ 616 - 0
2018专题/球球大作战竞猜/src/sass/pubswiper/swiper.css

@@ -0,0 +1,616 @@
+/**
+ * Swiper 4.2.0
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
+ * http://www.idangero.us/swiper/
+ *
+ * Copyright 2014-2018 Vladimir Kharlampidi
+ *
+ * Released under the MIT License
+ *
+ * Released on: March 16, 2018
+ */
+.top-swiper-container {
+  margin: 0 auto;
+  position: relative;
+  overflow: hidden;
+  list-style: none;
+  padding: 0;
+  /* Fix of Webkit flickering */
+  z-index: 1;
+}
+.swiper-container-no-flexbox .swiper-slide {
+  float: left;
+}
+.swiper-container-vertical > .swiper-wrapper {
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+  -webkit-flex-direction: column;
+  -ms-flex-direction: column;
+  flex-direction: column;
+}
+.swiper-wrapper {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  z-index: 1;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-transition-property: -webkit-transform;
+  transition-property: -webkit-transform;
+  -o-transition-property: transform;
+  transition-property: transform;
+  transition-property: transform, -webkit-transform;
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+}
+.swiper-container-android .swiper-slide,
+.swiper-wrapper {
+  -webkit-transform: translate3d(0px, 0, 0);
+  transform: translate3d(0px, 0, 0);
+}
+.swiper-container-multirow > .swiper-wrapper {
+  -webkit-flex-wrap: wrap;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+}
+.swiper-container-free-mode > .swiper-wrapper {
+  -webkit-transition-timing-function: ease-out;
+  -o-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+  margin: 0 auto;
+}
+.swiper-slide {
+  -webkit-flex-shrink: 0;
+  -ms-flex-negative: 0;
+  flex-shrink: 0;
+  width: 100%;
+  height: 100%;
+  position: relative;
+  -webkit-transition-property: -webkit-transform;
+  transition-property: -webkit-transform;
+  -o-transition-property: transform;
+  transition-property: transform;
+  transition-property: transform, -webkit-transform;
+}
+.swiper-invisible-blank-slide {
+  visibility: hidden;
+}
+/* Auto Height */
+.swiper-container-autoheight,
+.swiper-container-autoheight .swiper-slide {
+  height: auto;
+}
+.swiper-container-autoheight .swiper-wrapper {
+  -webkit-box-align: start;
+  -webkit-align-items: flex-start;
+  -ms-flex-align: start;
+  align-items: flex-start;
+  -webkit-transition-property: height, -webkit-transform;
+  transition-property: height, -webkit-transform;
+  -o-transition-property: transform, height;
+  transition-property: transform, height;
+  transition-property: transform, height, -webkit-transform;
+}
+/* 3D Effects */
+.swiper-container-3d {
+  -webkit-perspective: 1200px;
+  perspective: 1200px;
+}
+.swiper-container-3d .swiper-wrapper,
+.swiper-container-3d .swiper-slide,
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom,
+.swiper-container-3d .swiper-cube-shadow {
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d;
+}
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  pointer-events: none;
+  z-index: 10;
+}
+.swiper-container-3d .swiper-slide-shadow-left {
+  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+.swiper-container-3d .swiper-slide-shadow-right {
+  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+.swiper-container-3d .swiper-slide-shadow-top {
+  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+.swiper-container-3d .swiper-slide-shadow-bottom {
+  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+/* IE10 Windows Phone 8 Fixes */
+.swiper-container-wp8-horizontal,
+.swiper-container-wp8-horizontal > .swiper-wrapper {
+  -ms-touch-action: pan-y;
+  touch-action: pan-y;
+}
+.swiper-container-wp8-vertical,
+.swiper-container-wp8-vertical > .swiper-wrapper {
+  -ms-touch-action: pan-x;
+  touch-action: pan-x;
+}
+.swiper-button-prev,
+.swiper-button-next {
+  position: absolute;
+  top: 50%;
+  width: 18px;
+  height: 32px;
+  margin-top: -16px;
+  z-index: 10;
+  cursor: pointer;
+  background-size: 18px 32px;
+  background-position: center;
+  background-repeat: no-repeat;
+}
+.btn-prev.swiper-button-disabled,
+.btn-next.swiper-button-disabled {
+  opacity: 0.35;
+  cursor: auto;
+  pointer-events: none;
+}
+.swiper-button-prev,
+.swiper-container-rtl .swiper-button-next {
+  background-image: url('../img/arrow-left-icon.png');
+  left: 4px;
+  right: auto;
+}
+.swiper-button-next,
+.swiper-container-rtl .swiper-button-prev {
+  background-image: url('../img/arrow-right-icon.png');
+  right: 4px;
+  left: auto;
+}
+.swiper-button-prev.swiper-button-white,
+.swiper-container-rtl .swiper-button-next.swiper-button-white {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next.swiper-button-white,
+.swiper-container-rtl .swiper-button-prev.swiper-button-white {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-prev.swiper-button-black,
+.swiper-container-rtl .swiper-button-next.swiper-button-black {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next.swiper-button-black,
+.swiper-container-rtl .swiper-button-prev.swiper-button-black {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-lock {
+  display: none;
+}
+.swiper-pagination {
+  position: absolute;
+  text-align: center;
+  -webkit-transition: 300ms opacity;
+  -o-transition: 300ms opacity;
+  transition: 300ms opacity;
+  -webkit-transform: translate3d(0, 0, 0);
+  transform: translate3d(0, 0, 0);
+  z-index: 10;
+}
+.swiper-pagination.swiper-pagination-hidden {
+  opacity: 0;
+}
+/* Common Styles */
+.swiper-pagination-fraction,
+.swiper-pagination-custom,
+.swiper-container-horizontal > .swiper-pagination-bullets {
+  bottom: 10px;
+  left: 0;
+  width: 100%;
+}
+/* Bullets */
+.swiper-pagination-bullets-dynamic {
+  overflow: hidden;
+  font-size: 0;
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+  -webkit-transform: scale(0.33);
+  -ms-transform: scale(0.33);
+  transform: scale(0.33);
+  position: relative;
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {
+  -webkit-transform: scale(1);
+  -ms-transform: scale(1);
+  transform: scale(1);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {
+  -webkit-transform: scale(1);
+  -ms-transform: scale(1);
+  transform: scale(1);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {
+  -webkit-transform: scale(0.66);
+  -ms-transform: scale(0.66);
+  transform: scale(0.66);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {
+  -webkit-transform: scale(0.33);
+  -ms-transform: scale(0.33);
+  transform: scale(0.33);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {
+  -webkit-transform: scale(0.66);
+  -ms-transform: scale(0.66);
+  transform: scale(0.66);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {
+  -webkit-transform: scale(0.33);
+  -ms-transform: scale(0.33);
+  transform: scale(0.33);
+}
+.swiper-pagination-bullet {
+  width: 8px;
+  height: 8px;
+  display: inline-block;
+  border-radius: 100%;
+  background: #000;
+  opacity: 0.2;
+}
+button.swiper-pagination-bullet {
+  border: none;
+  margin: 0;
+  padding: 0;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+}
+.swiper-pagination-clickable .swiper-pagination-bullet {
+  cursor: pointer;
+}
+.swiper-pagination-bullet-active {
+  opacity: 1;
+  background: #007aff;
+}
+.swiper-container-vertical > .swiper-pagination-bullets {
+  right: 10px;
+  top: 50%;
+  -webkit-transform: translate3d(0px, -50%, 0);
+  transform: translate3d(0px, -50%, 0);
+}
+.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
+  margin: 6px 0;
+  display: block;
+}
+.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
+  top: 50%;
+  -webkit-transform: translateY(-50%);
+  -ms-transform: translateY(-50%);
+  transform: translateY(-50%);
+  width: 8px;
+}
+.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+  display: inline-block;
+  -webkit-transition: 200ms top, 200ms -webkit-transform;
+  transition: 200ms top, 200ms -webkit-transform;
+  -o-transition: 200ms transform, 200ms top;
+  transition: 200ms transform, 200ms top;
+  transition: 200ms transform, 200ms top, 200ms -webkit-transform;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
+  margin: 0 4px;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
+  left: 50%;
+  -webkit-transform: translateX(-50%);
+  -ms-transform: translateX(-50%);
+  transform: translateX(-50%);
+  white-space: nowrap;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+  -webkit-transition: 200ms left, 200ms -webkit-transform;
+  transition: 200ms left, 200ms -webkit-transform;
+  -o-transition: 200ms transform, 200ms left;
+  transition: 200ms transform, 200ms left;
+  transition: 200ms transform, 200ms left, 200ms -webkit-transform;
+}
+.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+  -webkit-transition: 200ms right, 200ms -webkit-transform;
+  transition: 200ms right, 200ms -webkit-transform;
+  -o-transition: 200ms transform, 200ms right;
+  transition: 200ms transform, 200ms right;
+  transition: 200ms transform, 200ms right, 200ms -webkit-transform;
+}
+/* Progress */
+.swiper-pagination-progressbar {
+  background: rgba(0, 0, 0, 0.25);
+  position: absolute;
+}
+.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
+  background: #007aff;
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  -webkit-transform: scale(0);
+  -ms-transform: scale(0);
+  transform: scale(0);
+  -webkit-transform-origin: left top;
+  -ms-transform-origin: left top;
+  transform-origin: left top;
+}
+.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
+  -webkit-transform-origin: right top;
+  -ms-transform-origin: right top;
+  transform-origin: right top;
+}
+.swiper-container-horizontal > .swiper-pagination-progressbar {
+  width: 100%;
+  height: 4px;
+  left: 0;
+  top: 0;
+}
+.swiper-container-vertical > .swiper-pagination-progressbar {
+  width: 4px;
+  height: 100%;
+  left: 0;
+  top: 0;
+}
+.swiper-pagination-white .swiper-pagination-bullet-active {
+  background: #ffffff;
+}
+.swiper-pagination-progressbar.swiper-pagination-white {
+  background: rgba(255, 255, 255, 0.25);
+}
+.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill {
+  background: #ffffff;
+}
+.swiper-pagination-black .swiper-pagination-bullet-active {
+  background: #000000;
+}
+.swiper-pagination-progressbar.swiper-pagination-black {
+  background: rgba(0, 0, 0, 0.25);
+}
+.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill {
+  background: #000000;
+}
+.swiper-pagination-lock {
+  display: none;
+}
+/* Scrollbar */
+.swiper-scrollbar {
+  border-radius: 10px;
+  position: relative;
+  -ms-touch-action: none;
+  background: rgba(0, 0, 0, 0.1);
+}
+.swiper-container-horizontal > .swiper-scrollbar {
+  position: absolute;
+  left: 1%;
+  bottom: 3px;
+  z-index: 50;
+  height: 5px;
+  width: 98%;
+}
+.swiper-container-vertical > .swiper-scrollbar {
+  position: absolute;
+  right: 3px;
+  top: 1%;
+  z-index: 50;
+  width: 5px;
+  height: 98%;
+}
+.swiper-scrollbar-drag {
+  height: 100%;
+  width: 100%;
+  position: relative;
+  background: rgba(0, 0, 0, 0.5);
+  border-radius: 10px;
+  left: 0;
+  top: 0;
+}
+.swiper-scrollbar-cursor-drag {
+  cursor: move;
+}
+.swiper-scrollbar-lock {
+  display: none;
+}
+.swiper-zoom-container {
+  width: 100%;
+  height: 100%;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+  -ms-flex-align: center;
+  align-items: center;
+  text-align: center;
+}
+.swiper-zoom-container > img,
+.swiper-zoom-container > svg,
+.swiper-zoom-container > canvas {
+  max-width: 100%;
+  max-height: 100%;
+  -o-object-fit: contain;
+  object-fit: contain;
+}
+.swiper-slide-zoomed {
+  cursor: move;
+}
+/* Preloader */
+.swiper-lazy-preloader {
+  width: 42px;
+  height: 42px;
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  margin-left: -21px;
+  margin-top: -21px;
+  z-index: 10;
+  -webkit-transform-origin: 50%;
+  -ms-transform-origin: 50%;
+  transform-origin: 50%;
+  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
+  animation: swiper-preloader-spin 1s steps(12, end) infinite;
+}
+.swiper-lazy-preloader:after {
+  display: block;
+  content: '';
+  width: 100%;
+  height: 100%;
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+  background-position: 50%;
+  background-size: 100%;
+  background-repeat: no-repeat;
+}
+.swiper-lazy-preloader-white:after {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+@-webkit-keyframes swiper-preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes swiper-preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* a11y */
+.swiper-container .swiper-notification {
+  position: absolute;
+  left: 0;
+  top: 0;
+  pointer-events: none;
+  opacity: 0;
+  z-index: -1000;
+}
+.swiper-container-fade.swiper-container-free-mode .swiper-slide {
+  -webkit-transition-timing-function: ease-out;
+  -o-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+}
+.swiper-container-fade .swiper-slide {
+  pointer-events: none;
+  -webkit-transition-property: opacity;
+  -o-transition-property: opacity;
+  transition-property: opacity;
+}
+.swiper-container-fade .swiper-slide .swiper-slide {
+  pointer-events: none;
+}
+.swiper-container-fade .swiper-slide-active,
+.swiper-container-fade .swiper-slide-active .swiper-slide-active {
+  pointer-events: auto;
+}
+.swiper-container-cube {
+  overflow: visible;
+}
+.swiper-container-cube .swiper-slide {
+  pointer-events: none;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  z-index: 1;
+  visibility: hidden;
+  -webkit-transform-origin: 0 0;
+  -ms-transform-origin: 0 0;
+  transform-origin: 0 0;
+  width: 100%;
+  height: 100%;
+}
+.swiper-container-cube .swiper-slide .swiper-slide {
+  pointer-events: none;
+}
+.swiper-container-cube.swiper-container-rtl .swiper-slide {
+  -webkit-transform-origin: 100% 0;
+  -ms-transform-origin: 100% 0;
+  transform-origin: 100% 0;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-cube .swiper-slide-active .swiper-slide-active {
+  pointer-events: auto;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-cube .swiper-slide-next,
+.swiper-container-cube .swiper-slide-prev,
+.swiper-container-cube .swiper-slide-next + .swiper-slide {
+  pointer-events: auto;
+  visibility: visible;
+}
+.swiper-container-cube .swiper-slide-shadow-top,
+.swiper-container-cube .swiper-slide-shadow-bottom,
+.swiper-container-cube .swiper-slide-shadow-left,
+.swiper-container-cube .swiper-slide-shadow-right {
+  z-index: 0;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+}
+.swiper-container-cube .swiper-cube-shadow {
+  position: absolute;
+  left: 0;
+  bottom: 0px;
+  width: 100%;
+  height: 100%;
+  background: #000;
+  opacity: 0.6;
+  -webkit-filter: blur(50px);
+  filter: blur(50px);
+  z-index: 0;
+}
+.swiper-container-flip {
+  overflow: visible;
+}
+.swiper-container-flip .swiper-slide {
+  pointer-events: none;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  z-index: 1;
+}
+.swiper-container-flip .swiper-slide .swiper-slide {
+  pointer-events: none;
+}
+.swiper-container-flip .swiper-slide-active,
+.swiper-container-flip .swiper-slide-active .swiper-slide-active {
+  pointer-events: auto;
+}
+.swiper-container-flip .swiper-slide-shadow-top,
+.swiper-container-flip .swiper-slide-shadow-bottom,
+.swiper-container-flip .swiper-slide-shadow-left,
+.swiper-container-flip .swiper-slide-shadow-right {
+  z-index: 0;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+}
+.swiper-container-coverflow .swiper-wrapper {
+  /* Windows 8 IE 10 fix */
+  -ms-perspective: 1200px;
+}

+ 0 - 26
2018专题/球球大作战竞猜/src/tpl/bindWx.tmpl

@@ -1,26 +0,0 @@
-<div class="bind-wx-header">
-    <button i='close' class="ui-dialog-close" title="关闭">×</button>
-</div>
-<div class="bind-wrap">
-    <h3 class="bind-title">领取礼包需先绑定微信账号</h3>
-    <button class="bind-btn">
-        绑定微信
-    </button>
-    <div class="bind-tips">
-        <p class="why-bind">为什么要绑定微信?</p>
-        <ol class="bind-tips__list">
-            <li class="bind-tip__item"><label>1、</label>
-                <p>多玩特权已经上线微信版。绑定微信后,通过<em>微信公众号(duowanmall)</em>即可轻松使用。
-                    <p>
-            </li>
-            <!--<li class="bind-tip__item"><label>2、</label>
-                <p>完成微信绑定可获得获得价值<em>40RMB</em>的钻石奖励(40钻)
-                    <p>
-            </li>-->
-            <li class="bind-tip__item"><label>2、</label>
-                <p>完成微信绑定后可参与多玩游戏特权推出的玩游戏、领红包任务。完成任务要求即可获得<em>微信现金红包</em>+特权钻石双重奖励。
-                    <p>
-            </li>
-        </ol>
-    </div>
-</div>

+ 1 - 1
2018专题/球球大作战竞猜/src/tpl/userInfo.tmpl

@@ -1,7 +1,7 @@
 <% if(data["isLogin"]) { %>
 <div class="user-info">
     <img src="<%=data["avatar"]%>" alt="" class="avater">
-    <div class="name"><%= data["nickname"] %></div>
+    <div class="name" title="<%=data["nickname"]%>"><%= data["nickname"] %></div>
     <a class="btn loginOut" href="javascript:">注销</a>
 </div>
 <div class="result-num">

Vissa filer visades inte eftersom för många filer har ändrats