Translate

2017년 4월 5일 수요일

Blogger jQuery 적용 및 자체 스크롤 만들기


* Blogger 기본 테마 중 '세련' 테마 적용 중에 작성하였다.

항목 중에서 Tap 영역에 overflow: auto; 로 스크롤을 추가하였는데, div태그라 그런지 전체 스크롤과 동시에 움직이는 문제가 발생하였다.

검색해보니 두가지 해결법이 있는데,
mouseenter 이벤트를 이용하여 커서가 div에 진입할때 전체 스크롤를 없애거나(overflow: hidden;)
mousewheel 이벤트를 이용하여 스크립트로 작동하는 자체 스크롤을 만들어주는것.

후자가 더 깔끔해보여서 선택하기로 했다.
좋은지 나쁜지 애매한 점은 스크롤이 눈으로 보이진 않는다.

일단 CSS부분은 overflow: hidden; 으로 바꿔준다.
(이전글 http://bluebead38.blogspot.kr/2017/04/blogger-css.html 참고)


일단 소스는 다음과 같다.


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js">
    <!-- jQuery Connection -->
</script>

<script>
    $(function() {

        // column-left-outer class 지정 개체에서 스크롤 액션이 감지될 때
        $('.column-left-outer').on('mousewheel DOMMouseScroll', function(e) {

            var E = e.originalEvent;

            // 스크롤 액션의 변화값 증감에 따라 화면 스크롤 변화
            if (E.wheelDelta >= 100) {

                this.scrollTop -= 20;

            } else if (E.wheelDelta < -100) {
              
                this.scrollTop += 20;

            }

            return false;

        });

    });
</script>

이걸 그대로 복사하면 기호를 인식하지 못하고 오류가 난다.
Entity Name으로 전환해주는 작업이 필요하다.

https://mothereff.in/html-entities
여기서 간단하게 전환이 가능하다.
allow named character references in output도 체크해준다.


결과적으로는 아래 소스를 추가하면 된다. (주석도 같이 전환되기 때문에  지저분해서 지웠다.)
붙여넣는 위치는 <head> 내부면 된다. 적당히 </head> 위로 했다.



<b:include data='blog' name='google-analytics'/>
&lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js&quot;&gt;
    &lt;!-- jQuery Connection --&gt;
&lt;/script&gt;

&lt;script&gt;
    $(function() {

     
        $(&apos;.column-left-outer&apos;).on(&apos;mousewheel DOMMouseScroll&apos;, function(e) {

            var E = e.originalEvent;
          
            if (E.wheelDelta &gt;= 100) {

                this.scrollTop -= 20;
           
            } else if (E.wheelDelta &lt; -100) {
                this.scrollTop += 20;

            }
            return false;
        });
    });
&lt;/script&gt;

</head>



+ 문제점
Firefox에서는 작동하지 않는다.
좀더 자세히 말하면 DOMMouseScroll 까진 인식이 되나 scrollTop에서 문제가 생기는듯하다.

+다음 소스로 수정하면 Firefox에서도 동작한다.


$( '.column-left-outer' ).on( 'mousewheel DOMMouseScroll', function ( e ) {
    var E = e.originalEvent;
    delta = E.wheelDelta || -E.detail;

    this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30;
    e.preventDefault();
});

알아보니 detail이라는 값이 Firefox에서만 사용되는 값인데, +, - 만 구분하기 때문에 값을 더 곱함으로써 스크롤처럼 보이도록 하는 것 같다.


참고 사이트 :
http://alik.info/p/65
http://stackoverflow.com/questions/7600454/how-to-prevent-page-scrolling-when-scrolling-a-div-element
http://recoveryman.tistory.com/120

0 개의 댓글:

댓글 쓰기