안녕하세요.
즐겁게 책을 보면서 공부를 하고있는 중입니다.
3장 슬라이드식 이미지 겔러리에서 click 펑션에 focus펑션을 추가할수가있는건가요?
책에나온코드에 클릭을 포커스로 바꾼후 (스크립트는 잘몰라서 click를 그냥 focus로 바꿔서했습니다)
두개의 펑션을 쓰고 페이지를 작동해보니
탭버튼을 먼저 사용하면 정상작동을 하는데
클릭을하면 불러오는 이미지가 기존이미지위에 겹쳐집니다.
(클릭후에 탭버튼을 눌러도 겹쳐집니다)
이미지가 반투명이라서 계속겹치니깐 이상해집니다..ㅡㅡ;
제가 스크립트에대한 이해도가 떨어지다보니 질문도 참 엉성합니다. ㅡㅡ;;
자바파일변형을 아래처럼 할수없는건가요??
$(function(){
$(".brand_navi2 a").click(function(){
$(".brand_load img").before("
![]()
");
$(".brand_load img:last").fadeOut("fast",function(){
$(this).remove();
});
return false;
});
});
$(function(){
$(".brand_navi2 a").focus(function(){
$(".brand_load img").before("
![]()
");
$(".brand_load img:last").fadeout("fast",function(){
$(this).remove();
});
return false;
});
});
수고하세요.
음 우선 보내주신 코드를 사용해서 현상을 재현해 보려 하였으나 잘 안되어서요.
먼가 다른쪽에도 손을 대신게 아닌가 하는 생각이 들긴합니다.
예측 가능한 상황으로 설명을 드려볼까 합니다.
우선 focus, click 둘다 이벤트 발생에 대한 처리 입니다.
focus는 해당 태그(요소)가 탭, 클릭 등에 포커싱되었을때 발생합니다. 예를 들어서 폼태그라고 하면
글을 쓰기 위해 해당부분을 클릭했을때가 되었을때 겠죠. 클릭은 그보다 앞서 마우스가 클릭했을때
발생하는 이벤트 입니다. 그러면 위에 주신 코드를 그대로 분석하면
$(function(){
//해달 brand_navi2 클래스를 가진 태그의 a태그가 포커싱 되었을때(클릭하거나 탭으로 포커싱이 될수 있겠네요)
$(".brand_navi2 a").focus(function(){
// brand_load 클래스 다음에 img 태그 앞에 아무것도 추가하지 않고
$(".brand_load img").before("");
// brand_load 클래스 다음에 img 태그의 마지막을 빠르게 fadeout처리하며 제거한다.
$(".brand_load img:last").fadeout("fast",function(){
$(this).remove();
});
return false;
});
});
위의 소스는 그렇습니다. 즉 위의 소스는 focus와 click과는 상관 없이 아무것도 나오지 않습니다.
내용을 어떻게 수정하셨는지 전체적으로 보내주시면 살펴보고 답변 드릴수 있을 것 같습니다.
다만 추측해보면
tab을 통해 focus를 이동하면 focus이벤트만 발생하지만
클릭을 할경우 focus와 click이 둘다 일어납니다.
이럴경우 예전 이미지가 fadeout되며 remove가 되기 전에 새 이미지가 추가되어 버려 겹쳐지는 현상이 일어날수도 있습니다.
이런 것을 이벤트 버블링이라고 하는데 방지하는 방법은 아래와 같이
$("#navi a").focus(function(e){
e.stopPropagation();
$("#main img").before("
$("#main img:last").fadeOut("fast",function(){
$(this).remove();
});
return false;
});
e.stopPropagation();를 추가하여 더이상 이벤트를 발생시키지 않게 하는 방법이 있습니다.
스크립트 이벤트 발생 구조에 대해서 더 알고 싶으시면 따로 자바스크립트를 공부하시는게 좋을 것 같습니다.
이야기가 점점 깊어지고 나잡해져 간것 같은데.. 답변이 되었을지 모르겠네요
감사합니다~