仿制淘宝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操作,还有各种接口,商品数量的操作等,时间有限,先这些。