继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

对choiceView组件的封装

yangmiemie123
关注TA
已关注
手记 1
粉丝 0
获赞 0

引言

在项目的开发过程中,遇到一个需求,如下图所示,当选项卡里面的选项个数大于等于5的时候,按照右箭头→形式展现,用户点击右箭头通过调用picker组件来选择选项;当选项卡里面的选项小于5个的时候直接以按钮的形式展示在页面上,用户通过点击进行选择;因为这里的选项个数是是动态的,为了方便调用以及日后维护,将代码项封装成组件,通过遍历arr[],去判断arr的长度是否大于等于5,然后展示具体的形式。


spacer.gifhttps://img3.mukewang.com/5cecd2b40001c15b04670434.jpg


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调用相应的点击事件,返回数据。这样就可以了。




打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP