shop--10.店铺列表(前端)

利用SUI Mobile的模板来进行拼装

http://m.sui.taobao.org/components/#searchbar 

搜索栏、栅栏和按钮组合

卡片

无限滚动

shoplist.html

  

shoplist.js

$(function() {
    //无限滚动事件
    // 加载flag
    var loading = false;
    // 最多可加载的条目,超过此数目,禁止访问后台
    var maxItems = 999;
    // 每次加载添加多少条目
    var pageSize = 10;
    //获取店铺列表的URL
    var listUrl = '/frontend/listshop';
    //获取店铺类别列表以及区域列表的URL
    var searchDivUrl = '/frontend/listshoppageinfo';
    //页码
    var pageNum = 1;
    //从地址栏URL里尝试获取parent shop category Id
    var parentId = getQueryString('parentId');
    var areaId = '';
    var shopCategoryId = '';
    var shopName = '';
    //渲染出店铺类别列表以及区域列表以供搜索
    getSearchDivData();
    //预先加载10条店铺信息
    addItems(pageSize, pageNum);

    /**
     * 获取店铺类别列表以及区域列表
     */
    function getSearchDivData(){
        //如果传入了parentId,则将parentId传入后台,用来获取parentId下的二级店铺列表
        var url = searchDivUrl + '?' + 'parentId=' + parentId;
        $.getJSON(url, function(data) {
            if (data.success) {
                //获取后台返回的店铺类别列表
                var shopCategoryList = data.shopCategoryList;
                var html = '';
                html += ' 全部类别  ';
                //遍历店铺类别列表,拼接处 a 标签集
                shopCategoryList.map(function(item, index) {
                    html += ''
                        + item.shopCategoryName
                        + '';
                });
                //将拼接好的类别标签嵌入前提的html组件里
                $('#shoplist-search-div').html(html);
                var selectOptions = '';
                //获取后台返回的区域列表
                var areaList = data.areaList;
                //遍历区域列表,拼接处option标签集
                areaList.map(function(item, index) {
                    selectOptions += '';
                });
                //将标签集添加到area列表里
                $('#area-search').html(selectOptions);
            }
        });
    }


    /**
     * 获取分页展示的店铺列表信息
     * @param pageSize
     * @param pageIndex
     */
    function addItems(pageSize, pageIndex) {
        //拼接出查询的URL,为空就默认去掉这个条件的限制,有值就代表按这个条件去查询
        var url = listUrl + '?' + 'pageIndex=' + pageIndex + '&pageSize='
            + pageSize + '&parentId=' + parentId + '&areaId=' + areaId
            + '&shopCategoryId=' + shopCategoryId + '&shopName=' + shopName;
        //设定加载符,若还在后台取数据则不能再次访问后台,避免多次重复加载
        loading = true;
        //访问后台获取相应查询条件下的店铺列表
        $.getJSON(url, function(data) {
            if (data.success) {
                //获取当前查询条件下的店铺总数
                maxItems = data.count;
                var html = '';
                //遍历店铺列表,拼接处卡片集合
                data.shopList.map(function(item, index) {
                    html += '' + '
' + '
' + item.shopName + '
' + '
' + '
' + '
    ' + '
  • ' + '
    ' + '' + '
    ' + '
    ' + '
    ' + item.shopDesc + '
    ' + '
    ' + '
  • ' + '
' + '
' + '
' + '' + '
'; }); //将卡片集合添加到目录html组件里 $('.list-div').append(html); //获取目前为止已显示的卡片总数,包含之前已经加载的 var total = $('.list-div .card').length; //若总数达到按照此查询条件列出来的总数一致时,则停止后台的加载 if (total >= maxItems) { // 加载完毕,则注销无限加载事件,以防不必要的加载 $.detachInfiniteScroll($('.infinite-scroll')); // 删除加载提示符 $('.infinite-scroll-preloader').remove(); } //否则页码+1,继续load新的店铺 pageNum += 1; //加载结束,可以再次加载 loading = false; //刷新页面,显示新加载的店铺 $.refreshScroller(); } }); } //下滑屏幕自动进行分页搜索 $(document).on('infinite', '.infinite-scroll-bottom', function() { if (loading) return; addItems(pageSize, pageNum); }); //点击店铺的卡片进入该店铺的详情页 $('.shop-list').on('click', '.card', function(e) { var shopId = e.currentTarget.dataset.shopId; window.location.href = '/frontend/shopdetail?shopId=' + shopId; }); //选择新的店铺类别之后,重置页码,清空原先的店铺列表,按照新的类别去查询 $('#shoplist-search-div').on( 'click', '.button', function(e) { //如果传递过来的是一个父类下的子类 if (parentId) { shopCategoryId = e.target.dataset.categoryId; //若之前已选定了别的category,则移除其选定效果,改成选定新的 if ($(e.target).hasClass('button-fill')) { $(e.target).removeClass('button-fill'); shopCategoryId = ''; } else { $(e.target).addClass('button-fill').siblings() .removeClass('button-fill'); } //由于查询条件改变,清空店铺列表再进行查询 $('.list-div').empty(); //重置页码 pageNum = 1; addItems(pageSize, pageNum); } else { // 如果传递过来的父类为空,则按照父类查询 parentId = e.target.dataset.categoryId; if ($(e.target).hasClass('button-fill')) { $(e.target).removeClass('button-fill'); parentId = ''; } else { $(e.target).addClass('button-fill').siblings() .removeClass('button-fill'); } //由于查询条件改变,清空店铺列表再进行查询 $('.list-div').empty(); //重置页码 pageNum = 1; addItems(pageSize, pageNum); parentId = ''; } }); //需要查询的店铺名字发生变化后,重置页码,清空原先的店铺列表,按照新的名字进行查询 $('#search').on('input', function(e) { shopName = e.target.value; $('.list-div').empty(); pageNum = 1; addItems(pageSize, pageNum); }); //需要查询的区域信息发生变化后,重置页码,清空原先的店铺列表,按照新的名字进行查询 $('#area-search').on('change', function() { areaId = $('#area-search').val(); $('.list-div').empty(); pageNum = 1; addItems(pageSize, pageNum); }); //点击后打开右侧栏 $('#me').click(function() { $.openPanel('#panel-left-demo'); }); //初始化页面 $.init(); });

  

shoplist.css

.infinite-scroll-preloader {
    margin-top: -5px;
}
.shoplist-button-div {
    margin: 0 .3rem;
}
.shoplist-button-div > .button {
    width: 30%;
    height: 1.5rem;
    line-height: 1.5rem;
    display: inline-block;
    margin: 1%;
    overflow: hidden;
}
.select-wrap {
    margin: 0 .5rem;
}
.select {
    border: 1px solid #0894ec;
    color: #0894ec;
    background-color: #efeff4;
    width: 100%;
    height: 1.5rem;
    font-size: .7rem;
}

  

commons.js

function changeVerifyCode(img){
    img.src = "../Kaptcha?" + Math.floor(Math.random() * 100);
}

/**
 * 获取前端url中的name的id值
 * @param name
 * @returns {*}
 */
function getQueryString(name){
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if(r != null){
        return decodeURIComponent(r[2]);
    }
    return '';
}


Date.prototype.Format = function(fmt) {
    var o = {
        "M+" : this.getMonth() + 1, // 月份
        "d+" : this.getDate(), // 日
        "h+" : this.getHours(), // 小时
        "m+" : this.getMinutes(), // 分
        "s+" : this.getSeconds(), // 秒
        "q+" : Math.floor((this.getMonth() + 3) / 3), // 季度
        "S" : this.getMilliseconds()
        // 毫秒
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "")
            .substr(4 - RegExp.$1.length));
    for ( var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k])
                : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

  

转载于:https://www.cnblogs.com/SkyeAngel/p/9026942.html

你可能感兴趣的:(前端)