item.page.js 4.63 KB
/**
 * 商品详情
 * @author: yyqing<yanqing.yang@yoho.cn>
 * @date: 2016/7/15
 */
var $ = require('yoho-jquery'),
    lazyload = require('yoho-jquery-lazyload');

var $main = $('.product-main'),
    $mainThumb = $('#main-thumb'),
    $checkBtns = $('.check-btns');

var $tradeWrapper = $('.trade-wrapper'),
    $balanceWrapper = $('.balance-wrapper'),
    $thumbWrap = $('.thumb-wrap'),
    $colorText = $('.choose-color .color'),
    $sizeText = $('.choose-size .size'),
    $colorItem = $('.color-list .round-color'),
    $sizeList = $('.size-list'),
    $sizeItem = $('.size-list > li');

var $addToBag = $('#add-to-bag'),
    $soldOut = $('#sold-out');

var $thumbCur = $('.thumb-wrap .cur'); // 当前选中展示图片

var SLIDETIME = 200;

var thumbsLoaded = [],
    id = $main.data('id');

require('../common/header');

lazyload($('img.lazy'));

function changeThumb($dom) {
    var data;

    if ($dom && $dom.length) {
        $thumbCur = $dom;
        $dom.addClass('cur').siblings('.cur').removeClass('cur');

        data = $dom.data();
        if (data.shower) {
            $mainThumb.attr('src', data.shower);
        }
    }
}

function getBuyProduct() {
    var sku;

    $sizeItem.each(function() {
        var $this = $(this),
            data;

        if ($this.hasClass('cur')) {
            data = $this.data();
            sku = data.sku;
        }
    });

    return sku;
}

function chooseColor(index) {
    var $thumb = $thumbWrap.eq(index),
        $imgs = $thumb.children();

    $thumbWrap.not('.hide').addClass('hide');
    $thumb.removeClass('hide');
    changeThumb($imgs.first());

    if (!thumbsLoaded[index]) {
        lazyload($imgs, {
            event: 'sporty'
        });
        $imgs.trigger('sporty');

        thumbsLoaded[index] = true;
    }

    // 控制左右切换按钮显示与隐藏
    if ($imgs.length > 1) {
        $checkBtns.removeClass('hide');
    } else {
        $checkBtns.addClass('hide');
    }

    // 控制才显示对应颜色尺码
    $sizeList.not('.hide').addClass('hide').children('.cur').removeClass('cur');
    $sizeList.eq(index).removeClass('hide');
    $sizeText.text('');
}

// 缩略图垂直居中
$thumbWrap.each(function() {
    var $this = $(this),
        $child = $this.children();

    if ($child.length) {
        $this.css('padding-top', (642 - 105 * $child.length) / 2);
    }

});

// $thumbWrap.parent().animate({visibility: 'visible'});
$thumbWrap.parent().removeClass('hide');

// 展示图
$thumbWrap.on('mouseenter', '.thumb', function() {
    changeThumb($(this));
});

$checkBtns.on('click', '.iconfont', function() {
    var $dom;

    if ($(this).hasClass('pre-thumb')) {
        $dom = $thumbCur.prev();
    } else {
        $dom = $thumbCur.next();
    }

    if ($dom.length) {
        changeThumb($dom);
    }
});

// 颜色
$('.color-list').on('click', '.color-item', function() {
    var $this = $(this),
        index = $this.index(),
        data = $this.data();

    if (!$this.children().hasClass('cur')) {
        $colorItem.removeClass('cur');
        $colorText.text(data.color ? data.color : '');
        $this.children().addClass('cur');

        // 设置图片及尺码
        chooseColor(index);

        if (+data.total) {
            $addToBag.removeClass('hide');
            $soldOut.addClass('hide');
        } else {
            $addToBag.addClass('hide');
            $soldOut.removeClass('hide');
        }
    }
});

// 尺码
$('.size-list').on('click', 'li', function() {
    var $this = $(this),
        data = $this.data();

    if (!$this.hasClass('disable') && +data.num) {
        $sizeItem.removeClass('cur');
        $sizeText.text(data.name ? data.name : '');
        $this.addClass('cur');
    }
});

$addToBag.click(function() {
    var sku = getBuyProduct();

    if (sku) {
        $.ajax({
            type: 'POST',
            url: '/shopping/cart/add',
            data: {
                productSku: sku,
                buyNumber: 1
            }
        }).then(function(data) {
            if (data.code === 200) {
                $tradeWrapper.slideUp(SLIDETIME);
                $balanceWrapper.slideDown(SLIDETIME);
            }
        });
    }
});

$('#collect-product').click(function() {
    var $this = $(this),
        param = {
            productId: id,
            type: 'add'
        };

    if ($this.hasClass('coll')) {
        param.type = 'cancel';
    }

    $.ajax({
        type: 'POST',
        url: '/product/item/togglecollect',
        data: param
    }).then(function(data) {
        if (data.code === 200) {
            $this.toggleClass('coll');
        } else if (data.code === 403) {
            location.href = data.data.refer;
        }
    });

});