maybe-like.js 2.53 KB
/**
 * “你可能喜欢”模块JS
 * @author: xuqi(qi.xu@yoho.cn)
 * @date: 2015/7/15
 */

var $ = require('jquery'),
    Mustache = require('mustache'),
    lazyLoad = require('./lazyload');

var $maybeLike = $('.maybe-like:last');

// 无可能喜欢模块时直接返回
if ($maybeLike.length === 0) {
    return;
}

var winH = $(window).height(),
    loading = false,
    end = false,
    page = 1,
    tpl;

var $goodList = $maybeLike.children('.goods-list'),
    mblTop = $maybeLike.offset().top; //页面内容固定,可以预先求出高度

//read good-info template
$.get('/common/goodinfo', function(data) {
    tpl = '{{# goods}}' + data + '{{/ goods}}';
    Mustache.parse(tpl);
});

var gender = $('.mobile-wrap').hasClass('boys-wrap') ? 'index' : 'girl';
var isLogin = 'Y'; //TODO:是否登录,后台提供,区分走Ajax还是页面跳转

//商品收藏
$('.goods-list').delegate('.good-islike', 'touchstart', function(e) {
    var $cur, $good, id, url;

    if (isLogin === 'Y') {
        e.preventDefault(); // 阻止链接跳转改AJAX

        $cur = $(e.currentTarget);
        $good = $cur.closest('.good-info');
        id = $good.data('id');

        if ($cur.hasClass('good-like')) {
            url = '/' + gender + '/cancelprise';
        } else {
            url = '/' + gender + '/prise';
        }


        $.ajax({
            type: 'GET',
            url: url,
            data: {
                id: id
            }
        }).then(function(data) {
            if (data.code === 200) {
                $cur.toggleClass('good-like');
            } else if (data.code === 400) {
                //TODO:提示登录
            }
        });
    }
});


//srcoll to load more
$(window).scroll(function() {
    var num;
    if (end || loading) {
        return;
    }

    if ($(window).scrollTop() + winH < mblTop + $maybeLike.height()) {
        return;
    }

    loading = true;
    num = $goodList.children('.good-info').length;
    $.ajax({
        type: 'GET',
        url: '/' + gender + '/getmore',
        data: {
            page: page + 1
        }
    }).then(function(data) {
        var res,
            i;
        if (data.code === 200) {
            res = data.data;

            if (res.end) {
                end = res.end;
            }

            $goodList.append(Mustache.render(tpl, {
                goods: res.goods
            }));

            //lazyLoad
            lazyLoad($goodList.children('.good-info:gt(' + (num - 1) + ')').find('img.lazy'));

            loading = false;
            page++;
        }
    });
});