引言
在项目的开发过程中,遇到一个需求,如下图所示,当选项卡里面的选项个数大于等于5的时候,按照右箭头→形式展现,用户点击右箭头通过调用picker组件来选择选项;当选项卡里面的选项小于5个的时候直接以按钮的形式展示在页面上,用户通过点击进行选择;因为这里的选项个数是是动态的,为了方便调用以及日后维护,将代码项封装成组件,通过遍历arr[],去判断arr的长度是否大于等于5,然后展示具体的形式。
1、首先定义一个choiceView立即执行函数
var choiceView = (function () { })();
所有的函数都写在choiceView函数中
2、定义fillInfo函数,传三个参数,arr为选项卡的列表,defval为默认值,callback回调函数
首先通过document.createElement('div')创建最外层的包裹div 。
使用 if 判断语句通过 arr.length 的值判断生成哪种形式的dom;
如果大于等于5,给创建的div设计index的值为a;如果小于5,给div设置index的值为i;
最后返回创建好的dom结构;
function fillInfo(arr, defval, callback) { sourceArr = arr; callbackAction = callback; var contentDiv = document.createElement('div'); contentDiv.id = "contentDiv" + ''; contentDiv.class = "contentDiv"; // 判断按钮的个数是否大于5, 如果大于5返回右箭头格式,如果小于5,返回按钮展示的方式 if (arr.length > 5) { let inp = document.createElement("input"); inp.setAttribute('value', defval); inp.id = "cdfv"; inp.readonly="readonly" contentDiv.appendChild(inp); contentDiv.setAttribute('index', 'a'); contentDiv.onclick = didTapBtn; let img = document.createElement("img"); img.src = "../img/02jiantouright@2x.png"; contentDiv.appendChild(img); contentDiv.style = "float: right;"; console.log(contentHtml) } else { for (var i = 0; i < arr.length; i++) { let button = document.createElement("button"); button.innerText = arr[i]; button.setAttribute('index', i); button.onclick = didTapBtn; button.style = "float: right; margin-left: 8px"; contentHtml.appendChild(button); } } return contentHtml; }
3、定义didTapBtn函数,设置不同展示方式的点击事件
首先获取该元素的index值,判断index的值为是否为a,如果是a的话证明是右箭头格式的dom,点击直接调用picker组件,然后设置input的value为点击选中的值;否则的话就是按钮的形式展现的dom,点击直接返回点击相对应的按钮的值;
function didTapBtn() { var index = $(this).attr('index'); console.log(index) if (index == 'a') { // 右箭头点击出现picker组件 picker.setData(sourceArr); var showUserPickerButton = document.getElementById("contentHtml"); var userResult = showUserPickerButton.firstElementChild; picker.show(function(items) { userResult.value = items[0]; console.log(items[0]) }); } else { // 单个按钮点击 callbackAction(sourceArr[index]); } }
4、通过以上操作,该组件就算完成整个封装了。
完成整个封装之后就可以直接使用了,首先在页面中引入该js文件,就不需要我们单独的调用了。首先通过拿localStorage中的“userInfoTest”来判断用户是否登录,如果登录,直接调用接口,从接口里面拿到相应的数据,遍历数据,生成相应的dom,点击dom调用相应的点击事件,返回数据。这样就可以了。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦