fav.js 7.02 KB
/**
 * 个人中心--收藏
 * @author: chenglong<chenglong.wang@yoho.cn>
 * @date: 2015/11/12
 */

var $ = require('jquery'),
    Hammer = require('yoho.hammer'),
    Swiper = require('yoho.iswiper');

var diaLog = require('./dialog');

var $navLi = $('#fav-tab > li'),
    $favContainer = $('.fav-content > .fav-type'),
    swiperObj = {},
    favTabHammer,
    favContentHammer,
    $loadMore = $('.fav-load-more'),
    $brandLoadMore = $('.fav-brand-load-more'),
    winH = $(window).height(),
    footerH = $('#yoho-footer').height(),
    $favProductList = $('.fav-product-list'),
    $favBrandList = $('.fav-brand-swiper-wrapper'),
    pageId = 1,
    brandPageId = 1, //收藏品牌的当前页数
    lockId = true,
    brandLockId = true, //收藏品牌是否可下拉加载更多
    brandTab = false; //当前是否停留在收藏品牌页

function showFavTab(index) {
    $navLi.filter('.active').removeClass('active');
    $navLi.eq(index).addClass('active');

    $favContainer.filter('.show').removeClass('show');
    $favContainer.eq(index).addClass('show');
}

//初始化swiper
function initSwiper(data) {
    var i,
        idStrReg = /container-(\d+)['"]{1}/gi,
        idReg = /\d+/,
        idArr = data.match(idStrReg),
        idArrLen = idArr.length,
        containerId;

    //$swiperList = $('.swiper-container');
    for (i = 0; i < idArrLen; i++) {

        /*id = $swiperList.eq(i).attr('data-id');

        if (!!swiperObj[id]) {
            swiperObj[id].destroy(true, true);
        }*/

        containerId = idArr[i].match(idReg)[0];

        swiperObj[containerId] = new Swiper('#swiper-container-' + containerId, {
            slidesPerView: 'auto',
            grabCursor: true,
            slideElement: 'li',
            wrapperClass: 'swiper-wrapper-' + containerId,
            lazyLoading: true,
            watchSlidesVisibility: true
        });
    }
}

// 上拉加载更多
function loadData($parent, url, page) {
    if (url === 'favBrand') {
        brandLockId = true;
    } else {
        lockId = true;
    }
    $.ajax({
        method: 'post',
        url: '/home/' + url,
        data: {
            page: page
        },
        success: function(data) {

            //setTimeout(function() { //模拟延时

            if (url === 'favBrand') {
                $brandLoadMore.addClass('hide');
            } else {
                $loadMore.addClass('hide');
            }

            if (data === ' ') {
                $parent.closest('.fav-type').find('.fav-content-loading').addClass('hide');
                $parent.closest('.fav-type').find('.fav-null-box').removeClass('hide');
            } else if (data === 'end') {
                $parent.closest('.fav-type').find('.fav-load-background')
                    .removeClass('fav-load-background').html('没有更多了');

            } else if (data.length > 10) {
                $parent.append(data);
                $parent.closest('.fav-type').find('.fav-content-loading').remove();
                if (url === 'favBrand') {
                    initSwiper(data);//如果是收藏品牌需要初始化swiper

                    brandLockId = false;//请求成功后解锁品牌收藏page++
                } else {
                    lockId = false;//请求成功后解锁商品收藏page++
                }

                window.rePosFooter();

            } else {
                return;
            }

            //},1000);
        }
    });
}

// 如果从品牌收藏入口进入
if ($('#fav-tab').hasClass('brand-tab')) {
    showFavTab(1);
    loadData($favBrandList, 'favBrand', 1);
    brandTab = true;
    window.rePosFooter();
} else {
    showFavTab(0);
    loadData($favProductList, 'favProduct', 1);
    brandTab = false;
    window.rePosFooter();
}

favTabHammer = new Hammer(document.getElementById('fav-tab'));
favTabHammer.on('tap', function(e) {
    var $cur = $(e.target).closest('li'),
        index;

    if ($cur.length === 0 || $cur.hasClass('active')) {
        return;
    }

    index = $cur.index();

    if (index === 0) {
        brandTab = false;
        if ($favProductList.find('li').length === 0 &&
            $favProductList.closest('.fav-type').find('.fav-null-box').hasClass('hide')) {
            loadData($favProductList, 'favProduct', 1);
        }
    } else {
        brandTab = true;
        if ($favBrandList.find('div').length === 0 &&
            $favBrandList.closest('.fav-type').find('.fav-null-box').hasClass('hide')) {
            loadData($favBrandList, 'favBrand', 1);
        }
    }
    showFavTab(index);
    window.rePosFooter();

});

//删除收藏的商品
favContentHammer = new Hammer(document.getElementById('fav-content'));

favContentHammer.on('tap', function(e) {
    var id = '';

    if (!$(e.target).hasClass('del-fav')) {
        return;
    }

    diaLog.showDialog({
        dialogText: '您确定要取消收藏吗?',
        hasFooter: {
            leftBtnText: '取消',
            rightBtnText: '确定'
        }
    }, function() {
        id = $(e.target).closest('li').attr('data-id');
        $.ajax({
            method: 'post',
            url: '/home/favoriteDel',
            data: {
                id: id
            }
        }).then(function(data) {

            if (data.code === 200) {
                diaLog.showDialog({
                    autoHide: true,
                    fast: true,
                    dialogText: '已经取消收藏'
                });
                $(e.target).closest('li').remove();
            } else if (data.code === 400) {
                diaLog.showDialog({
                    autoHide: true,
                    fast: true,
                    dialogText: data.message
                });
            } else {
                diaLog.showDialog({
                    autoHide: true,
                    fast: true,
                    dialogText: '取消收藏失败'
                });
            }
        }).fail(function() {

            //TODO

            diaLog.showDialog({
                autoHide: true,
                dialogText: '网络错误~'
            });
        });
    });
});

function scrollHandler() {

    //距离底部未1/4列表高度+底部高度的时候加载更多
    if ($(window).scrollTop() + winH >= $(document).height() - 0.25 * $favBrandList.height() - footerH) {
        if (brandTab) {
            $brandLoadMore.filter('.hide').removeClass('hide');

            if (!brandLockId) {
                brandPageId++;
                loadData($favBrandList, 'favBrand', brandPageId);
            }

        } else {

            $loadMore.filter('.hide').removeClass('hide');

            if (!lockId) {
                pageId++;
                loadData($favProductList, 'favProduct', pageId);
            }
        }
    }
}

//srcoll to load more
$(window).scroll(function() {
    window.requestAnimationFrame(scrollHandler);
});