Skip to content

CHICPRO

  • Life Log
  • Cycling Log
  • Photo Log
    • Portrait
    • Landscape
    • Flower
    • Etc
  • Coding Log
  • Information

[jQuery] 모바일 상품 리스트 정렬 스크립트

2013-10-06 by 편리

제목 정하는 게 여전히 쉽지 않다. 모바일 환경에서 쇼핑몰 상품 리스트 정렬은 쉽지 않은 문제이다. 해상도가 제가각이고 가로 세로 회전이 가능하기 때문에 그에 따라 리스트 정렬이 변경되어야 하는데.. 이번에 그걸 하기 위해서 간단한 스크립트를 작성해 봤다. float: left; 속성을 가지는 li들을 나열시키는데 화면 사이즈에 맞춰서 적당히 패딩값을 부여해서 상품이 화면 가운데 보이도록 했다. padding-right 값 때문에 한 줄에 4개가 표시되어야할 것이 3개로 표시되는 것은 해당 라인의 마지막 엘리먼트 padding-right 값을 0으로 설정하는 것으로 해서 4개가 표시되도록 했다.

<script>
$(function() {
    set_list_margin();
});

$(window).resize(function() {
    set_list_margin();
});

function set_list_margin()
{
    var li_padding = 0;
    if($("li.sct_li:first").data("padding-right") == undefined) {
        li_padding = parseInt($("li.sct_li:first").css("padding-right"));
        $("li.sct_li:first").data("padding-right", li_padding);
    }
    else
        li_padding = $("li.sct_li:first").data("padding-right");

    $("li.sct_li").css("padding-left", 0).css("padding-right", li_padding);
    $("li.sct_clear").removeClass("sct_clear");

    var ul_width = parseInt($("ul.sct").width());
    var li_width = parseInt($("li.sct_li:first").outerWidth());
    var li_count = parseInt((ul_width + li_padding) / li_width);

    if(li_count == 0)
        return;

    var space = parseInt(ul_width % li_width);

    if((space + li_padding) < li_width) {
        var new_padding = parseInt((space + li_padding) / (li_count * 2));

        if(new_padding > li_padding)
            $("li.sct_li").css("padding-left", new_padding+"px").css("padding-right", new_padding);
    }

    $("li.sct_li:nth-child("+li_count+"n)").css("padding-right", 0);
    $("li.sct_li:nth-child("+li_count+"n+1)").addClass("sct_clear");
}
</script>

패드와 여러 안드로이드폰에서 테스트를 해봤는데 정상적으로 표시가 되는 것 같았다. 그러나 아직 테스트해보지 못한 기기가 더 많기 때문에 완벽하다고는 할 수 없다.
15:01분 추가.. 위 스크립트를 jQuery 플러그인화 해봤다.

(function($) {
    $.fn.itemList = function(element, clear)
    {
        var cfg = {
                element: "li.sct_li",
                clear: "sct_clear"
            };

        if(typeof element == "object")
            cfg = $.extend( cfg, element );
        else {
            if(element)
                cfg = $.extend( cfg, { element: element } );
            if(clear)
                cfg = $.extend( cfg, { clear: clear } );
        }

        var $element = this.find(cfg.element);
        var $this = this;

        function item_arrange()
        {
            var $el = $element.filter(":first");
            var padding = 0;
            if($el.data("padding-right") == undefined) {
                padding = parseInt($el.css("padding-right"));
                $el.data("padding-right", padding);
            }
            else
                padding = $el.data("padding-right");

            $element.css("padding-left", 0).css("padding-right", padding);
            $element.filter("."+cfg.clear).removeClass(cfg.clear);

            var wrap_width = parseInt($this.width());
            var item_width = parseInt($el.outerWidth());
            var line_count = parseInt((wrap_width + padding) / item_width);

            if(line_count == 0)
                return;

            var space = parseInt(wrap_width % item_width);

            if((space + padding) < item_width) {
                space = wrap_width - ((item_width - padding) * line_count);
                var new_padding = parseInt(space / (line_count * 2));

                if(new_padding > padding)
                    $element.css("padding-left", new_padding+"px").css("padding-right", new_padding);
            }

            $element.filter(":nth-child("+line_count+"n)").css("padding-right", 0);
            $element.filter(":nth-child("+line_count+"n+1)").addClass(cfg.clear);
        }

        item_arrange();

        $(window).resize(function() {
            item_arrange();
        });
    }
}(jQuery));

사용법은 $(“ul.wrap”).itemLIst(); 이렇게 하면 된다.

Post navigation

Previous Post:

초등학교 동창 모임 밴드

Next Post:

MariaDB 5.5.33a 업데이트

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • php 배열 연산에서 + 와 array_merge 의 차이
  • pcntl_fork 를 이용한 다중 프로세스 실행
  • 아이폰 단축어를 이용하여 주중 공휴일엔 알람 울리지 않게 하기
  • 구글 캘린더 전체일정 재동기화
  • OpenLiteSpeed 웹서버에 HTTP 인증 적용
  • OpenLiteSpeed 웹어드민 도메인 연결
  • WireGuard를 이용한 VPN 환경 구축
  • Ubuntu 22.04 서버에 OpenLiteSpeed 웹서버 세팅
  • 맥 vim 세팅
  • 우분투 시스템 터미널쉘 zsh 로 변경

Recent Comments

  • 편리 on 업무관리용 그누보드 게시판 스킨
  • 임종섭 on 업무관리용 그누보드 게시판 스킨
  • 캐논 5D 펌웨어 | Dslr 펌웨어 업그레이드 방법 82 개의 베스트 답변 on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • Top 5 캐논 5D 펌웨어 Top 89 Best Answers on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • 편리 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 임팀장 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 편리 on Notepad++ NppFTP 플러그인 수동 설치
  • paul-j on Notepad++ NppFTP 플러그인 수동 설치
  • YS on Windows 10 iCloud 사진 저장 폴더 변경
  • 편리 on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2025 CHICPRO | Built using WordPress and SuperbThemes