#7431 一对N小组滚动事件的优化

Posted susan-home

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#7431 一对N小组滚动事件的优化相关的知识,希望对你有一定的参考价值。

    //添加滚动事件
        studentGrid.on(scroll,function(){
            var sT = $(this)[0].scrollTop,
                sH = $(this)[0].scrollHeight,
                h =$(this).height();

            //滚动到底部了 加载下一页
            if((sT+h)>=sH){
                pageCurGroupMember(pageCache,curScrollPage+1);
            }
        })
数组filter方法对数组元素进行过滤
2018年03月19日 10:12:46
阅读数:448
Array.prototype.filter
对数组中元素进行过滤

/**
 * @method reduce
 * @param {number}   item   当前迭代的数组元素
 * @param {number}   index  当前迭代的数组元素下下标
 * @param {array}    array  原数组
 */
  let arr = [1,2,6,3,4,5];
  let res = arr.filter(function(item,index,array){
      //元素值,元素的索引,原数组。
      return (item>3);
  });
  console.log(res);//[6, 4, 5]
filter 方法可以将数组中不符合的元素去掉,返回一个新数组。

 

 
(function(){
    var hrefSrc = "function/modals/oneOnNGroupStudentModal.html",
        curGroupId = Util.getModalParameter(hrefSrc, groupId),
        blCampusId = Util.getModalParameter(hrefSrc, blCampusId),
        modal = $(#oneOnNGroupStudentModal),
        studentGrid = modal.find(#studentGrid),
        chosenStudent = modal.find(#chosenStudent),
        groupName = modal.find(#groupName),
        title = modal.find(#title),
        frm = modal.find(#frm),
        noChosenStudentTips = modal.find(#noChosenStudentTips).clone(),
        groupInfoForm = modal.find(#groupInfoForm),
        studyManagerPost = modal.find(#studyManagerPost),
        saveGroupBlCampusId = modal.find(#blCampusId),//保存小组的校区
        searchBtn = modal.find(#searchBtn);
    var curChooseListData = [],//已选学员列表
        modGroupName = true,//默认选完学员小组名也变
        userId = Index.currentLoginUser.userId,
        students = Util.getModalParameter(hrefSrc, "data"),
        pageCache = {},
        curScrollPage = 0;
       
    initEvent();
    initData();

    //刷新已选学员列表
    function refreshChosenList() {
        chosenStudent.html(template(template-chosenStudent, { items: curChooseListData }));
        if (curChooseListData.length === 0) {
            chosenStudent.html(noChosenStudentTips);
        }
        if (modGroupName) {
            groupName.val(curChooseListData.map(function (item) {
                return item.name
            }).join().substring(0,20));
        }
        Util.datepicker(chosenStudent.find(.firstCourseDateInput),{buttonPaneClass:noCloseBtn}); //统一初始化时间选择框
        pageSetUp(chosenStudent);
    }
    //modal列表数据分页处理
    function pageCurGroupMember(pageCache,page){
        var showData = [];
        pageCache = pageCache || [];
        page = page || 1;
        curScrollPage = page ;
        showData = pageCache.filter(function(item,i){
            return (i>=(page-1)*20 && i<page*20)
        });
        var noItemTips = <div id="noMemberItems" class="normal-gray">暂无数据,请重新查询!</div>;
        if(pageCache.length === 0 &&  page===1){
          studentGrid.html($(noItemTips));
          return;
        }
        var dom = showData.length>0 ?  $(template(template-studentGrid,{ items:showData})):‘‘;
        page===1? studentGrid.html(dom):studentGrid.append(dom);
        if(showData.length === 0) return;
        dom.filter(.item).each(function (i) {
            $(this).data(data, showData[i]);
        })
        //修改的时候选中已改数据
        $(curChooseListData).each(function (i, item) {
            studentGrid.find(div.item[data-id=" + item.id + "] i.check-ico).addClass(fa-check-circle).removeClass(fa-circle-thin);
        })
        pageSetUp(studentGrid);
    }
    function initEvent() {

        //查询学员
        searchBtn.click(function () {
            var params = Util.tranFormVarToJson(frm);
            params.blCampusId = blCampusId;//查询带上参数
            $.get(Api.listStudentsForChoose, params, function (res) {
                pageCache = res.rows;
                pageCurGroupMember(pageCache);
            })
        })

        //左侧列表选中/取消
        studentGrid.on(click, div.item, function () {
            var item = $(this),
                ico = item.find(i.check-ico),
                id = item.attr(data-id),
                data = item.data(data);
            if (!data.firstCourseDate) {
                data.firstCourseDate = DateUtil.getCurrentDate();
            }
            //选中
            if (ico.hasClass(fa-circle-thin)) {
                ico.addClass(fa-check-circle).removeClass(fa-circle-thin);
                curChooseListData.push(data);
                refreshChosenList();
            } else {
                chosenStudent.find(div.item[data-id=" + id + "] i).click();
            }
        })
        //添加滚动事件
        studentGrid.on(scroll,function(){
            var sT = $(this)[0].scrollTop,
                sH = $(this)[0].scrollHeight,
                h =$(this).height();

            //滚动到底部了 加载下一页
            if((sT+h)>=sH){
                pageCurGroupMember(pageCache,curScrollPage+1);
            }
        })
        //右侧列表删除
        chosenStudent.on(click, i, function () {
            if ($(this).hasClass(disabled)) return;

            var item = $(this).parents(.item:eq(0)),
                id = item.attr(data-id);

            //处理数据
            $(curChooseListData).each(function (i, item) {
                if (item.id == id) {
                    curChooseListData.splice(i, 1);
                }
            });
            refreshChosenList();
            studentGrid.find(div.item[data-id=" + id + "] i.check-ico).removeClass(fa-check-circle).addClass(fa-circle-thin);
        })

        //小组名接受输入后,modGroupName关闭
        groupName.one(input, function () {
            modGroupName = false;
        })

        //保存
        modal.on(click, .submit, function () {
            //alert(blCampusId);
            var params = {};

            if (curGroupId) {
                params.id = curGroupId;
            } else {
                params = Util.tranFormVarToJson(groupInfoForm);
                if (!params) return;
            }
            //过滤之前学员
            var tmpArr = curChooseListData.filter(function (item) {
                return !item.oriFlag;
            });
            //拼学员id
            params.studentIds = tmpArr.map(function (item) {
                return item.id;
            }).join(,);
            if (!params.studentIds) {
                Util.showAlert(请选择学员,true);
                return false;
            }
            // 首课日期
            var firstCourseDateArray = [];
            $.each(chosenStudent.find(.firstCourseDateInput), function () {
               var that = $(this),
                   studentId = that.attr(data-studentId),
                   firstCourseDate = that.val();
                    firstCourseDateArray.push({
                        studentId: studentId,
                        firstCourseDate: firstCourseDate
                    });
            });

            params.firstCourseDate = JSON.stringify(firstCourseDateArray);
            params.blCampusId=blCampusId;

            $.post(Api.quickSaveOneOnNGroup, params, function (res) {
                if (res.resultCode === 0) {
                    Util.showAlert(保存成功);
                    Util.closeModal(hrefSrc);
                }
            })
        })
    }

    function initData() {
        
        studyManagerPost.attr(data-value, userId);
        //初始化学管师
        InitUtil.initCampusStudy(modal.find(#studyManagerEl).add(studyManagerPost));
        //修改和新增不同
        if (curGroupId) {
            //小组信息
            $.get(Api.findOneOnNGroupById, { id: curGroupId }, function (res) {
                Util.fillElmentValueByTag(res.data, data-from, null, groupInfoForm);
                groupInfoForm.find(select,input).prop(disabled,true).change();
                modGroupName = false;
            });

            //组员信息
            $.get(Api.listStudentsInGroup, { groupId: curGroupId }, function (res) {
                curChooseListData = res.data;
                //旧数据不能删
                $(curChooseListData).each(function (i, item) {
                    item.oriFlag = true;
                    if (!item.firstCourseDate) item.firstCourseDate = -;
                })
                searchBtn.click();
                refreshChosenList();
            });

            title.text(添加组员);
        } else {
            saveGroupBlCampusId.val(blCampusId).change();
            searchBtn.click();
        }
        // 默认选中 从一对N学员列表跳转到新建小组的学员
        if (students) {
            curChooseListData = students.slice() ;
            $(curChooseListData).each(function (i, item) {
                if (!item.firstCourseDate) item.firstCourseDate = DateUtil.getCurrentDate();
            });
            refreshChosenList();
        }
    }
})();

 


以上是关于#7431 一对N小组滚动事件的优化的主要内容,如果未能解决你的问题,请参考以下文章

谷歌地图片段在 N​​estedScrollView 内滚动

滚动优化

性能优化懒懒加载懒动画 --- 基于window滚动事件来实时更新DOM的视图状态,以表明是否在规定的可视区,并作有change回调

原生js禁止页面滚动

高性能滚动 scroll 及页面渲染优化

高性能滚动 scroll 及页面渲染优化