n***@qq.com
n***@qq.com
  • 发布:2016-05-27 11:33
  • 更新:2016-08-11 17:21
  • 阅读:1599

关于联系人列表IndexedList的体验问题

分类:MUI

那个类似联系人列表IndexedList的页面非常棒,可是当联系人到了700多个,在实际手机应用时,搜索速度严重影响,输入字母后停顿两三秒,我的手机是OPPO R7S,机器配置还算正常。
请问这个问题是否能解决呢?

2016-05-27 11:33 负责人:无 分享
已邀请:
小飞牛

小飞牛

关于这个问题,我做了测试,是代码实现方式造成的。代码是通过样式叠加,把不符合条件的项目display设成none,再一次性添加给style元素,就是那一行赋值代码执行了几秒钟,隐藏越多执行得越慢,跟浏览器的解析有关。后来我改变了实现方式,用循环语句逐个隐藏,700多个应该能缩短到几十到几百毫秒。 另外,还可以修改一下,扩展到三级分类,侧边页可以做成中文导航,动态加载。这插件还是不错的。
关键代码如下:

 searchCustom: function(keyword) { //自定义搜索函数,改变搜索方式  
            var self = this;  
            keyword = (keyword || '').toLowerCase();  
            var selectorBuffer = [];  
            var selectorBuffer2=[];//  
            var groupIndex = -1;  
            var itemCount = 0;  
            var liArray = self.el.liArray;  
            var itemTotal = liArray.length;  
            self.hiddenGroups = [];  
            var checkGroup = function(currentIndex, last) {  
                if (itemCount >= currentIndex - groupIndex - (last ? 0 : 1)) {  
                    selectorBuffer.push('.mui-indexed-list-inner li:nth-child(' + (groupIndex + 1) + ')');  
                    selectorBuffer2.push((groupIndex + 1));  
                    self.hiddenGroups.push(liArray[groupIndex]);  
                };  
                groupIndex = currentIndex;  
                itemCount = 0;  
            }  
            liArray.forEach(function(item) {  
                var currentIndex = liArray.indexOf(item);  
               if (item.classList.contains('mui-indexed-list-group')) {  
                    checkGroup(currentIndex, false);  
                } else {  
                    var text = (item.innerText || '').toLowerCase();  
                    if (keyword && text.indexOf(keyword) < 0) {  
                        selectorBuffer.push('.mui-indexed-list-inner li:nth-child(' + (currentIndex + 1) + ')');  
                        selectorBuffer2.push((currentIndex + 1) );  
                        itemCount++;  
                    }  
                    if (currentIndex >= itemTotal - 1) {  
                        checkGroup(currentIndex, true);  
                    }  
                }  
            });  
            liArray.forEach(function(item){  
                item.style.display="block";  
            });  
            if (selectorBuffer.length >= itemTotal) {  
                self.el.inner.classList.add('empty');  
            } else if (selectorBuffer.length > 0) {  
                self.el.inner.classList.remove('empty');  
                mui.each(selectorBuffer2,function(idx,item){  
                    if(item>0){  
                    liArray[item-1].style.display="none";  
                    }  
                });  
            } else {  
                self.el.inner.classList.remove('empty');  
                self.el.styleForSearch.innerText = "";  
            }  
        },  
        bindSearchEvent: function() {  
            var self = this;  
            self.el.searchInput.addEventListener('input',function(event) {  
                var keyword = this.value;  
                if(keyword==self.el.oldKeyword){  
                    return;  
                }  
                self.el.oldKeyword=keyword;  
                //if(mui.os.android && parseFloat(mui.os.version) <= 4.3){  
                self.searchCustom(keyword);  
                //}else{  
                //  self.search(keyword);  
                //}  
            }, false);  

            $(self.el.search).on('tap', classSelector('icon-clear'), function() {  
                self.searchCustom('');  
            }, false);  
        },
TS

TS

不错,赞一个

2***@qq.com

2***@qq.com

不错,可以用 不过还是有点慢

该问题目前已经被锁定, 无法添加新回复