컨텐츠 바로가기


스마트디자인 팁 상세
제목 [모바일] Lazy Loaging 이나 [더보기] 기능 사용하기
작성자 대표 관리자 (ip:) 작성일 2015-12-07 13:16:57 조회수 3474

product_additional모바일 쇼핑몰의 상품상세 이미지 로딩을 Lazy loading 또는 [더보기] 형태로 구현하는 방법을 각각 알아보겠습니다.

2개 기능은 동시에 사용할 수 없으며 각자 쇼핑몰에 맞게 운영하시면 됩니다.


Lazy Loading 방식 사용하기


※ Lazy Loading 이란, 사용자 화면에 보이는 이미지만 로딩하고 다른 이미지들은 사용자가 스크롤 하면서 이미지에 가까워지면 로딩되는 방식입니다.

   [더보기] 버튼을 클릭하면 추가된 이미지를 로딩해주는 방법 대신 고객에게 더 빠르고 편리한 Lazy Loading 을 적용해보시기 바랍니다.


1. 설정하기 : 모바일쇼핑몰 > 모바일 환경설정 > 이미지 로딩 속도 개선 설정을 "사용함"으로 변경합니다.



2. 불필요한 소스 삭제하기

상품상세 화면에서 <div module="product_additional"> 의 모듈을 찾아 그 안에 있는 아래 소스가 있다면  제거합니다.

<!-@js(/js/module/product/additional.js)->
<!-@js(/js/module/product/additional_animation.js)->

.... 중간생략 ....

<div class="btnMore" id="btnMore">
    <a href="#none">
        더보기<span class="icoMore"></span>
    </a>
</div>

※ 기존 '더보기' 기능을 사용 중인 쇼핑몰의 경우, 사용함 설정 시 더보기 기능이 비활성화 되며 사용안함 설정시에는 다시 활성화 됩니다.

더보기 방식 사용하기


1. 설정하기
 : Lazy Loading과 더보기는 함께 사용할 수 없기 때문에 모바일쇼핑몰 > 모바일 환경설정 > 이미지 로딩 속도 개선 설정을 "사용안함"으로 설정합니다.

2. 소스 추가하기

(1) HTML

상품상세 화면에서 <div module="product_additional"> 의 모듈을 찾아 그 안에 있는 아래 파란색 소스들을 추가합니다.

 ... 상단생략 ...

<div module="product_additional">
    <!-@css(/css/module/product/additional.css)->
    <!-@css(/css/module/product/additional_animation.css)->
    <!-@js(/js/module/product/additional.js)->
    <!-@js(/js/module/product/additional_animation.js)->

... 중간생략 ...

<!-- 상세정보 -->
<div id="prdDetail">
    <div class="button" id="prdDetailBtn">
        <a href="/product/zoom.html?product_no={$product_no}" target="_blank" class="btnNormal">원본보기 <span class="ico"></span></a>
    </div>
    <div id="prdDetailContent">{$product_detail}</div>
    <div class="btnMore" id="btnMore">
        <a href="#none">
            더보기<span class="icoMore"></span>
        </a>
    </div>
</div>

(2) 자바스크립트 - 위 html 을 적용한 후 해당 javascrip 파일에 아무내용이 없다면 해당 소스는 정상 작동하지 않습니다. 하단의 소스를 각각 추가해주세요.

<!-@js(/js/module/product/additional.js)->


/**
 * 모바일 상품상세 더보기
 * @package app/Shop
 * @subpackage Front/Disp/Product
 * @since 2014. 5. 12.
 * @version 1.0
 */
$(function() {
    var $DetailMore = {
        /*
         * current module name
         */
        sModule : 'xans-product-additional',

        /*
         * active div
         */
        iActive : 0,

        /**
         * module
         */
        $module : null,

        /**
         * detail
         */
        $detail : null,

        /**
         * more
         */
        $more : null,

        /**
         * real height
         */
        realHeight : 0,

        /**
         * fake height
         */
        fakeHeight : 0,

        /**
         * run
         */
        run : function() {
            setTimeout(function(){ $DetailMore.init(); }, 500);
        },

        /**
         * init
         */
        init : function() {
            // validate
            if (this.validate === false) return;

            // set object
            this.setObject();

            // set detail height
            this.setDetailHeight();

            // set more
            this.setMore();
        },

        /**
         * set event
         */
        setMore : function() {
            if (this.realHeight <= this.fakeHeight) {
                this.$more.remove();
            } else {
                this.$more.unbind().bind('click', function() { if (this.validate === false) return; $DetailMore.load(); });
            }
        },

        /**
         * set detail height
         */
        setDetailHeight : function() {
            this.$detail.css({'max-height' : parseInt($(window).height()*4) + 'px', overflow : 'hidden'});
            this.fakeHeight = this.$detail.height();
        },

        /**
         * validate
         */
        validate : function() {
            if (mobileWeb === false) return false;
        },

        /**
         * set object
         */
        setObject : function(){
            try {
                // current module class
                var sActiveProduct = this.iActive > 0 ? '.' + this.sModule + '-' + this.iActive : '.' + this.sModule;
                // set module
                this.$module = $(sActiveProduct);

                // set detail
                this.$detail = this.$module.find('div#prdDetailContent');

                // set more
                this.$more = this.$module.find('div#btnMore');

                // set real height
                this.realHeight = this.$detail.height();
            } catch(e) { }
        },

        /**
         * load detail
         */
        load : function() {
            this.$detail.css({'max-height' : 'none'});
            this.$more.remove();
        }
    };
    $DetailMore.run();
});

<!-@js(/js/module/product/additional_animation.js)->

$(function(){
    var sModule = '#prdDetail', $pop = $(sModule).find('img');

    // set pop image
    $pop.each(function(i){ $(this).data('index', i).css('z-index', '100'); });

    $pop.click(function(){
        var _index = $(this).data('index');
        $pop.each(function(i){
            if (i != _index) {
                $(this).css("z-index", "100").removeClass();
            } else {
                $(this).css("z-index", "9999");
                $(this).removeClass().delay(1).queue(function (a) {
                    $(this).addClass("animate pop");
                    a();
                    $(this).dequeue();
                });
            }
        });
    });
});
첨부파일
목록 관리자게시 삭제 수정