欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js+vue、纯js 按条件分页

程序员文章站 2023-04-02 10:20:25
听说大牛都从博客开始的。。。 人狠话不多,翠花上酸菜代码: 有注解基本上都看的懂!但是自己还是要注意以下几点,免得以后再浪费时间。 #.vue 中监听事件 v-on:change=“vueChange($event.target.value)”(或@),注意 纯 js中监听事件 onchange=" ......

听说大牛都从博客开始的。。。

人狠话不多,翠花上酸菜代码:

有注解基本上都看的懂!但是自己还是要注意以下几点,免得以后再浪费时间。

#.vue 中监听事件 v-on:change=“vuechange($event.target.value)”(或@),注意 纯 js中监听事件 onchange="jschange( this.options[this.options.selectedindex].value  )"来获得 value;也可以在函数中拿到标签 dom 用  addvaddeventlistener ('change', function(){ jschange(this.options[this.options.selectedindex].value ) },false).然后在  jschange()方法中接收 value 处理数据。分页代码都差不多。

#.通过name属性获取标签 dom: document.getelementsbytagname('select')[name="test"].

#.类型为 number 的 input 框意外的输入字母 e (自然常数,为数学中一个常数,是一个无限不循环小数,且为超越数,其值约为2.71828)处理:onkeypress="return( /[\d]/.test(string.fromcharcode(event.keycode) ) )"。

#.分页功能主要在 winnergroup() 方法,双层循环没啥说的要做保险。

#.css 中 select 和 input 设置了同样的宽高 但 select content 总是少 2px 

select:

js+vue、纯js 按条件分页

input:

 
js+vue、纯js 按条件分页

 box-sizing: border-box;/* 元素的任何内边距和边框都将包括在已设定的宽度和高度内 */

也就是把内边距和边框都包含在你设置的 height 和 width 里了(应该可以理解包含在 content)这样就解决了不一致的状况。

#. v-model 双向数据绑定,监听 pagenumber 变化随之变化。

  1 <!-- 中奖查询及查询条件 -->
  2 <template>
  3     <div id="paging">
  4         <div class="winners">
  5             <ul>
  6                 <li v-for="winner in winners" :key="winner.id">{{winner.name}}</li>
  7             </ul>
  8         </div>
  9         <div class="condition">每页显示
 10             <!-- 1.获取事件对象 , 方法参数传递  $event -->
 11             <!-- 2.在标签上添加 ref = “name” ,表示获取当前元素节点(this.$refs.info.value) -->
 12             <select name="changeitems" @change="changeitems($event.target.value)">
 13                 <option :value="3">3</option>
 14                 <option :value="6">6</option>
 15                 <option :value="9">9</option>
 16             </select>条
 17             <button v-on:click= "changepage(pagenumber -= 1)">上一页</button>第
 18             <button disabled="disabled">{{pagenumber}}</button>页
 19             <button v-on:click= "changepage(pagenumber += 1)">下一页</button>
 20             前往第
 21             <input name="inputpagenum" type="number" v-on:change="changepage($event.target.value)" v-model="value" onkeypress="return( /[\d]/.test(string.fromcharcode(event.keycode) ) )" min="0"/>页&nbsp;总共
 22             <button disabled="disabled">{{size}}</button>页
 23         </div>
 24     </div>
 25 </template>
 26 
 27 <script>
 28 export default {
 29     data() {
 30         return {
 31             winners: [],         // 要展示的中奖人
 32             groups: new array(), // 按条件分组后的元素集合
 33             pagenumber: 1,       // 页码   
 34             items: 3,            // 展示条数
 35             value: 1,            // input 值
 36             size: '',            // 分组需要的空间大小
 37             // 后台数据
 38             data: [
 39                 { id: 0, name: "张三1", age: 17 },
 40                 { id: 1, name: "张三2", age: 18 },
 41                 { id: 2, name: "张三3", age: 19 },
 42                 { id: 3, name: "张三4", age: 20 },
 43                 { id: 4, name: "张三5", age: 21 },
 44                 { id: 5, name: "张三6", age: 17 },
 45                 { id: 6, name: "张三7", age: 18 },
 46                 { id: 7, name: "张三8", age: 19 },
 47                 { id: 8, name: "张三9", age: 20 },
 48                 { id: 9, name: "张三10", age: 21 }
 49             ]
 50         }
 51     },
 52 
 53     created: function () {
 54         // 此时才加载 data 数据
 55         this.winnergroup();
 56     },
 57 
 58     methods:{
 59         // 改变展示条数
 60         changeitems: function(e) {
 61             console.log("changeitems" + e);
 62             // 必须要清空 groups 否则会带入上次的分组 (原因 push)
 63             this.groups = [];
 64             this.items = e;
 65             this.winnergroup();          
 66         },
 67         // 设置、选择页数
 68         changepage(e) {
 69             console.log("changepage:" + e);
 70             this.pagenumber = e;
 71             // 选择、输入 pagenumber 值大于、小于 所需空间 size 将其置为 1
 72             if(this.pagenumber > this.size || this.pagenumber <= 0) {
 73                 this.pagenumber = 1;  
 74             } 
 75             this.winners = this.groups[this.pagenumber-1].onegroup;    
 76             // 前面页数改变后 input 框页数也要改变
 77             this.value=this.pagenumber; 
 78         },
 79         // 按展示条目分组默认 3 个一组
 80         winnergroup() {
 81             console.log(this.items+"items")
 82             let winnercount = this.data;
 83             let objlist = new object();
 84             if(winnercount.length > 0) {
 85                 this.size = winnercount.length/this.items==0 ? winnercount.length/this.items : math.ceil((winnercount.length/this.items));
 86                 // 控制外层及内循环开始遍历的基数
 87                 for (let i = 1; i <= this.size; i++) {
 88                     let temparr = [];   // 分好的单个数组
 89                     let temp;           //  遍历次数
 90                     if (this.items * i > winnercount.length) {
 91                         temp = winnercount.length;
 92                     } else {
 93                         temp = this.items * i;
 94                     }
 95                     // 三个打包成一组
 96                     for (let j = this.items * (i - 1); j < temp; j++) {
 97                         temparr.push(winnercount[j]) ;
 98                     }
 99                     let newobj = new object();
100                     // newobj. onegroup = json.stringify(temparr);
101                     newobj.onegroup = temparr;
102                     this.groups.push(newobj);
103                 }
104                 console.log(this.groups)
105                 this.winners = this.groups[this.pagenumber-1].onegroup;              
106                 // objlist.data = this.groups;
107             }
108         }
109     }
110 }
111 </script>
112 
113 <style>
114     /* 去掉上下箭头 */
115     input::-webkit-outer-spin-button,
116     input::-webkit-inner-spin-button {
117         -webkit-appearance: none;
118     }
119     input[type="number"]{
120         -moz-appearance: textfield;
121     }
122 
123     .condition{
124         float: right;
125     }
126 
127     input, select{
128         /* 元素的任何内边距和边框都将包括在已设定的宽度和高度内 */
129         box-sizing: border-box;
130         text-align: center;
131         padding: 0px;
132         border: 1px solid rgb(169, 169, 169);
133         height: 23px;
134         width: 30px;
135     }
136 </style>