포럼
cookie에 매력을 느끼고 있습니다~~
2014.05.27 01:13
최근 cookie 사용 방법을 알게 되어서
열심히 이곳 저곳에 적용하고 있습니다 :)
그 중 가장 잘했다고 생각하는 것은!
바로 XE위젯 채팅(srchat 사용중)입니다!
어떤 기능을 적용했냐면요~
제 사이트의 경우 반응형으로 구축되어 있습니다.
1300px 이하 해상도의 경우 위젯 레이어가 하단으로 이동합니다. ( 1300px 이상은 우측에 고정)
그곳에 채팅 위젯까지 같이 있다보니 유일한 회원분께서 불편함을 느끼셔서..ㅜ.ㅜ
어떻게 하면 좋을까 ~? 하다가
cookie를 이용하여 상단으로 고정하는 기능을 추가했습니다.
방식은 대충 이러이러합니다.
위젯 창 위에 별도의 function을 걸어주고....('채팅창 고정'라고 명명함)
해당 레이어를 클릭하게 되면 우선 jquery를 이용하여
position을 fixed로 바꾸고 left를 0으로 top은 상단 header 크기 만큼 추가하고 여유롭게 170px 정도 줬습니다.
항상 위에 있을 수 있도록 하기 위해 z-index를 적당히 주고요~ (전 90 정도 줬네요 header가 아마 100인가 그래서..)
그런데! 그냥 이렇게 하면 페이지 이동하면 다시 원위치로 돌아가겠죠?!
그래서 위의 css 를 변경 하기전에 해당 값을 모조리! 쿠키로 저장합니다.
jquery.cookie.js 플러그인을 이용하면 보다 쉽게 쿠키를 요리조리 구울 수 있습니다.(플러그인 말고 그냥 쓰는 방법을 몰라용)
그래서 해당 값을 모조리~ 저장하고...
페이지가 시작될때마다 쿠키를 체크합니다.
$(document).ready(function(){
//대충 요안에 넣어주면 페이지가 시작될때마다 작동합니다.
});
적당한 if문으로 쿠키값이 있으면!
강제적으로 고정값을 추가해줍니다. absolute 라던지~ left 라던지 이런 값들을요!
그럼..
페이지를 이리저리 움직여도~~
항상 스크린 위에 고정되어 있습니다~
고정을 했으면 반대로 취소하는 기능을 만들어야겠죠...
맨첨에 만든 function에 if문을 걸어서 cookie가 있으면~ 기존 쿠키값을 지우는 작업을 해줍니다.
쿠키를 지우기 전에! 아까 쿠키로 저장했단 변경전 값을 전부 매칭해주고요! (jquery.css() 이용)
기존 쿠키를 날려버리면!
다시 초기화가 되고 페이지 이동을 해도 쿠키값이 없으니 기존 상태를 유지할 수 있겠죠...?
단순히 위치만 고정하면.. 재미 없고.. 또 불편할 수 있습니다.
따라서 jquery.ui를 이용하여 드래그하여 원하는 위치로 이동할 수 있도록 기능을 추가하면
매우 유용하겠죠?
기본적으로 xe에서 jquery.ui를 불러올 겁니다. 따라서 별도로 script를 불러올 필요가 없지요!
그리고.. 드래그 하는 방법은
http://jqueryui.com/draggable/
이곳에 아주 잘~ 설명되어 있습니다.
저같은 경우 다른 건 다 필요없고
stop 요녀석이 중요합니다.
드래그가 끝나면 함수를 실행할 수 있는 녀석입니다.
$( "#targetID" ).draggable({
stop: function() {
//이곳에서 현재 위치값을 쿠키로 저장!
}
});
대충 이런식으로 구현이 되는데
$( "#targetID" ).draggable();
단순히 이렇게만 해도 드래그가 됩니다!
하지만 저희는 해당 값을 쿠키로 저장해서 페이지를 이동하더라도 마지막으로 멈춘 위치값을 기억해야하기 때문에
$( "#targetID" ).draggable({
stop: function() {
//이곳에서 현재 위치값을 쿠키로 저장!
}
});
이렇게 이벤트를 주는 겁니다!
이곳에서 현재 위치값을 쿠키로 저장!~ 이곳에 쿠키로 현재 위치값을 구해서..
쉽게 하면 뭐 대충 이렇게 되겠네요
$( "#targetID" ).draggable({
stop: function() {
//이곳에서 현재 위치값을 쿠키로 저장!
$.cookie('chatter_move_style_left',$(this).css('left'));
$.cookie('chatter_move_style_top',$(this).css('top'));
}
});
이렇게 하면 'widget_move_left'와 'widget_move_top'의 마지막 위치가 저장됩니다~
그럼 다시 처음으로 돌아가서 페이지가 로드 될 때! 그곳 가장 끝에다가.. - > $(document).ready()
if($.cookie('chatter_move_style_left')) $('#targetID').css('left',$.cookie('chatter_move_style_left'));
if($.cookie('chatter_move_style_top')) $('#targetID').css('top',$.cookie('chatter_move_style_top'));
이런식으로... 하면 페이지가 로드 될 때마다 해당 쿠키값이 있을 경우 해당 값을 입력해주기 때문에
페이지를 이동하더라도 이동했던 위치에 항상 고정할 수 있게 됩니다~
저는 이것 외에도 쿠키 기능을 이용하여
확장변수값을 고정하는 기능을 추가하여 여러번 같은 확장변수를 동일하게 입력해야 할 경우
편리하게 쿠키값을 체크하여 자동으로 입력되도록 하고 있습니다 :)
여러분도 쿠키의 매력에 빠져보세요~~
참고로 위처럼 쿠키를 사용하게 되면 브라우저가 열려있는 동안만 유지가 됩니다~
기간을 지정할 수도 있지만 굳이 그럴 필요성은 못느끼기에~~
이상 자기전에 주저리였습니다.
ps. 그냥 $()~ 이런식으로 쓰면 에러 납니다~~
jQuery(function($){
});
이런식으로 감싸주거나
$ 이거 대신 jQuery로 사용해도 됩니다.
댓글 26
-
혼마_메이코
2014.05.27 01:19
-
애니즌
2014.05.27 01:35
오오 좋은 아이디어입니다 :)!!
으아니! 그런데 채팅창 디자인이 카카카카카카오톡이군요! 대단해요! 커스텀마이징도 되는 가 보군요~
-
혼마_메이코
2014.05.27 01:37
다음카카오...ㅋㅋㅋㅋㅋㅋ
주무신다면서... ' ω ' ...
-
애니즌
2014.05.27 01:38
마이피플 + 카카오톡 해서 My KAKAO TALK 줄여서. .마카오톡이라고..ㅋㅋㅋ
-
혼마_메이코
2014.05.27 01:40
필요하시면... 커스터마이징 방법은...음... 안얄랴줌...
ㅋㅋ
예전에도 이런 디자인의 채팅솔루션이 존재했던 것 같은데 못찾겠는데다가 개인용이었던것 같아서
SRchat을 이용해 만들어봤는뎅...ㅋㅋ
필요하면 살짝... (근데 지금 마구 뜯어고친거라 버그가 좀 많음영...)
XE 개발자 서브컬쳐 커뮤니티는 어떻게할지 ㅇ_ㅇ...
쪽지가 안보내져서 물어봅니당.
-
애니즌
2014.05.27 01:43
전 자리만 마련되면 언제든지 ~ :)
시간나면 저도 한번 파봐야 겠네요. 멋집니다! 대단합니다!
이정도로 커스텀마이징이 될 줄이야...
다소 어렵다는 소리가 들어서 아예 시도조차 안하고 있었거든요..
-
혼마_메이코
2014.05.27 01:44
전 버그가 넘치게 커스터마이징 시켰지만, 방법만 잘 알려드리면 버그없이 잘 만드실것 같아요 +_+
그럼 제 홈페이지 개편 후에 따로 만들어서 알려드릴게요!
@LI-NA 님 @mAKEkr 님도 같이 ㅇ_ㅇ
-
애니즌
2014.05.27 01:47
아닙니다.. 미흡합니다 ㅋㅋ 저두 여러 시행착오와 버그가 넘실넘실 출렁출렁합니다.ㅋㅋ
-
키스투엑스이
2014.05.27 01:52
저두저두 -
혼마_메이코
2014.05.27 01:59
ㅋㅋ넴 리뉴얼 후에 알려드릴게여!
-
애니즌
2014.05.27 02:17
기대하겠습니다 ㅋㅋ
-
mAKEkr
2014.05.27 11:03
기대할게요!
-
혼마_메이코
2014.05.27 15:10
프로필이 바뀌셨다...
-
AJKJ
2014.05.27 01:19
서버에서 처리할 내용이 아니라면 html5 session storage도 괜찮더군요. 서버로 쿠키를 보내지 않아서 트래픽 절약(?) 되고. 사용하는것도 별도의 플러그인 없이 이용이 가능해요. 단 IE7 이하를 지원하려면 쿠키굽는게 더 좋을것 같아요. ㅎㅎ
http://www.w3schools.com/html/html5_webstorage.asp
http://caniuse.com/namevalue-storage
-
애니즌
2014.05.27 01:37
쿠키도 서버로 데이터를 보내는 건 아니지 않나요~?
뭐.. ie7을 이제.. 놓아줘야 하니 덕분에 새로운 것을 알아가네요~ 역시나 배움은 재밌습니다 :)!!
근데 이것은 어디에 저장이 되는 원리일까요? ㅎㅎ 신기하네용!
-
이즈야
2014.05.27 01:48
jQuery.cookie.js 플러그인이나, 자바스크립트에서 쿠키를 구워버리면 PHP에서 $_COOKIE['쿠키 이름']으로 호출 가능합니다 :)
-
애니즌
2014.05.27 02:17
오 그렇군요 :)!! 놀라운 쿠키의 세계네용!!
-
AJKJ
2014.05.27 01:59
쿠키는 한번 저장 되면 따로 서버나 클라이언트(JS)에서 삭제요청이 되거나 만료가 되지 않는한 모든 http 패킷에 붙어서 서버 전송되는것으로 알고있어요.
html5 webstorage 역시 브라우저상의 적절한곳에 정해진 기간 또는 세션동안 저장되는것으로 알고있어요. 다만 서버로 전송이 안되어서 보안측면 및 트래픽측면(?)에서 조금 유리하지 않을까 생각해요.
-
애니즌
2014.05.27 02:18
단순히 사용자 템포러리폴더에 저장한 후 그것을 불러오기만 하는 건 줄 알았는데
서버로 왔다갔다 하는 거로군요.. 새로운 사실 알아가네용 ㅎㅎ
-
이즈야
2014.05.27 01:31
(function($)
{
내용 솰라솰라...
})(jQuery);
이런 식으로 제이쿼리 사용해도 됩니다.
예전에 만들었던 레이아웃에 쿠키를 적용했던 기억이 떠올라 이번에 플랫시리즈 레이아웃에도 쿠키 적용해봤습니다 :)
-
애니즌
2014.05.27 01:36
오오 역시 대단하십니다!
그나저나
jQuery(function($){
});
이 방식과
(function($)
{
내용 솰라솰라...
})(jQuery);
이방식의 차이점이 있나요~? 후자가 더 안정적이라던지.. 뭐 그런.. :)
-
이즈야
2014.05.27 01:47
전자는 블럭 안에서 $라는 기호를 jQuery의 별칭으로 사용하겠다는 의미를 포함함과 동시에 '페이지가 로딩되면' 함수가 실행될 겁니다(window.onload 같은 것).
후자는 $ 기호를 jQuery의 별칭으로 사용하는 것까지는 같은데 일반 코딩하듯이 함수 호출할 겁니다. 페이지 로딩되기 전에 호출되는 녀석이요.
-
애니즌
2014.05.27 01:47
아 어떤 차이인지 알겠습니다!
덕분에 이해가 쏙쏙 되네요~ 감사합니다 :)
-
Luatic™
2014.05.27 05:10
전 제목만 보고 먹는 쿠키 생각 해버렸네요 ; ㅁ;
-
혼마_메이코
2014.05.27 08:45
냠냠...쩝쩝... 아마 쿠키가 그 의미라고 들었는데
결국은 먹을거네용
안드로이드 버전들같이 맛있...
-
애니즌
2014.05.27 10:14
그래서 쿠키를 굽는다~ 하잖아요 ㅎㅎ
저는 요렇게...
역시 SRChat입니다.
ㅋㅋ
애드온을 이용해 중간 POST 값을 받아와 저장하는 방식입니다.
제이쿼리...많이 써먹곤 싶은데 뭔가 쓸수록 렉을 유발하는 기분이..