zoukankan      html  css  js  c++  java
  • 仿制淘宝sku点击效果

    1.依赖jquery,主要利用二维数组。

    2.原生手写。

    代码如下:

      1 <!DOCTYPE html>
      2 <html>
      3     <head>
      4         <meta charset="UTF-8">
      5         <title></title>
      6         <style>
      7             input{
      8                 width: 50px;
      9                 height: 35px;
     10                 background: orange;            
     11             }
     12         </style>
     13     </head>
     14     <body>
     15         <div class="container">
     16               <div class="row">
     17                 <input type="button" value="红" />
     18                 <input type="button" value="黄" />
     19                 <input type="button" value="蓝"/>
     20                 <input type="button" value="白"/>
     21                 <input type="button" value="军绿"/>
     22                 
     23             </div>
     24         
     25             <div class="row">
     26                 <input type="button" value="xl"/>
     27                 <input type="button" value="xxl"/>
     28                 <input type="button" value="xxxl"/>
     29             </div>
     30         
     31             <div class="row">
     32                 <input type="button" value="纯棉"/>
     33                 <input type="button" value="牛仔"/>
     34                 <input type="button" value="针织"/>
     35             </div>
     36             
     37             <div class="row">
     38                 <input type="button" value="A"/>
     39                 <input type="button" value="B"/>
     40                 <input type="button" value="C"/>
     41                 <input type="button" value="D"/>
     42                 <input type="button" value="E"/>
     43             </div>
     44           </div>    
     45     
     46         <div class="box">
     47             
     48         </div>
     49     
     50         <script src="jquery-3.2.1.min.js"></script>
     51         <script type="text/javascript">
     52             
     53             //给按钮添加选中取消标志
     54             $(".container .row input").attr("data-check",1);    
     55             //获取矩阵按钮
     56             function getBtn(ele){
     57                 var arr=[];
     58                 var contain = $(ele);
     59                 for(let i=0;i<contain.length;i++){
     60                     arr.push($.makeArray(contain[i].children));
     61                 }
     62                 return arr;
     63             }
     64             //生成二维数组
     65             var data = getBtn(".container .row"); 
     66             
     67         
     68             //判断点击的元素是否在二维数组中
     69             function getIndex(ele,map){
     70                 var res=[];
     71                 for(let i=0;i<map.length;i++){
     72                     for(let j=0;j<map[i].length;j++){
     73                         if(map[i][j] == ele){
     74                             res = [i,j];
     75                         }
     76                     }
     77                 }
     78                 return res;            
     79             }
     80            
     81             //生成默认值
     82             function init(data){
     83                 var arr = [];
     84                 for(let i = 0;i<data.length;i++){
     85                     arr.push([i,0]);
     86                     //默认选中的样式
     87                     $(data[i][0]).attr("data-check",0);
     88                     $(data[i][0]).css("background","gray");    
     89                 }
     90                 return arr;
     91             }
     92             var defaultVal = init(data);
     93             
     94             
     95             //渲染函数
     96             function myRender(s,data){
     97                     var str="";
     98                     for(let i = 0; i<data.length;i++){                    
     99                         str+=data[s[i][0]][s[i][1]].value+",";    
    100                     }                    
    101                     $(".box").append("<p>"+str+"</p>");
    102             }
    103             
    104             //绑定点击事件
    105             $(".container .row input").on("click",function(){
    106                 var _this=$(this);
    107                 //判断在哪行那列
    108                 var res = getIndex(_this[0],data);
    109                 
    110                 if(_this.attr("data-check")==1 ){
    111                     _this.attr("data-check",0);
    112                     _this.css("background","gray");
    113                     _this.siblings().css("background","orange")    
    114                     _this.siblings().attr("data-check",1)
    115                         
    116                     //插入要渲染的数据
    117                     defaultVal.splice(res[0],1,res);
    118                     //渲染数据
    119                     myRender(defaultVal,data);
    120                 
    121                 }else{
    122                     //点击取消,替换回这一行的默认值
    123                     defaultVal[res[0]] = [res[0],0];
    124                     myRender(defaultVal,data);
    125                     _this.attr("data-check",1);
    126                     if(res[1]!==0){
    127                         _this.css("background","orange");
    128                     }
    129                 }
    130         })
    131         
    132         </script>
    133     </body>
    134 </html>

    事实上这个东西还有无限扩展,包括利用vue或react进行dom操作,还有各种接口,商品数量的操作等,时间有限,先这些。

  • 相关阅读:
    Jersey Politics
    网络流——最小费用最大流
    网络流——最大流Dinic算法
    【洛谷2756】飞行员配对方案问题(二分图匹配,网络流24题)
    状压dp入门
    2018九江市赛
    [CQOI2007]余数求和
    CSAPC2008 skyline
    [ZJOI2009]函数 题解
    由不定方程想到的——数论选讲
  • 原文地址:https://www.cnblogs.com/chengyunshen/p/7244278.html
Copyright © 2011-2022 走看看