자바스크립트(jQuery) 함수에 변수를 초기화해서 넘기고 싶어요.
조회수 1924회
$gall 이라는 요소 클릭시 사진에 보이는 슬라이드 쇼 화면 $zoom이 나오는 그림인데, 밑 $previewImg 들을 클릭해서도 slide()함수가 실행되게끔 하고싶은데 새로운 변수 i를 기존 slide()함수에 들어가있는 i에 덮고싶습니다.
예를 들어 $gall 중 세번째 요소를 클릭해서 $zoom이 화면에 나오게 됐을 때, 변수 i 에는 2라는 값이 저장돼 있는데, $zoom 안에 $previewImg 중 네번째 요소를 클릭하면, 그대로 $gall을 클릭했던 때의 세번째 사진이 화면에 출력됩니다. 당연히 slide()함수 안에 변수 i에는 2라는 값이 저장돼 있구요. 어떻게 해결해야 할까요? 도와주세요!
var $gall = $('div.after_load > div.modal_wrap > div.modals.modal_history > div.content > div.gallery > div.images');
var i,
count = $gall.length - 1,
$viewImg = $zoom.find('div.image > img'),
$previewImg = $zoom.find('div.preview > div.item_wrap > div.items');
//var $imgTitle = $gall.eq(i).children('h5.img_expl');
$gall.on('click', function(){
//show $zoom
$zoom.show();
i = $gall.index(this);
slide();
// 닫기 버튼을 누를때.
$zoom.children('span').on('click', function(){
$zoom.hide();
});
});
function slide(){
var cur = $gall.eq(i).children('img');
// $previeImg hover effect.
if (!$previewImg.hasClass('active')) {
$previewImg.children('img').mouseover(function(){
$(this).addClass('active');
});
};
$viewImg.attr('src', cur.attr('src'));
$viewImg.fadeOut(0);
$viewImg.fadeIn(500);
$previewImg.children('div.border').css('display', 'none');
$previewImg.eq(i).children('div.border').css('display', 'block');
$previewImg.children('img').removeClass('active');
$previewImg.eq(i).children('img').addClass('active');
console.log('current ',i)
};
$previewImg.on('click', function(){
var i = $previewImg.index(this);
**//slide() 함수 안에 새로운 변수 i를 전달하기.**
slide();
});
function previous(){
if(i > 0){
i = i-1;
}else{
i = count;
};
slide();
};
function next(){
if(i < count) {
i = i+1;
}else{
i = 0;
};
slide();
};
$('div.gall_mask > div.zoom > div.controller > div.btn.left').on('click', function(){
previous();
});
$('div.gall_mask > div.zoom > div.controller > div.btn.right').on('click', function(){
next();
});
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
지금
i
를 전역변수로 쓰고 계시기 때문에 이 클로저 안에서var i
를 초기화하는 건 무의미합니다. 클로저 안에서var i
를 초기화하면 그건 그 클로저 안에서만 통하는i
이기 때문에,slide()
함수가 참조하고 있는 전역변수i
와는 무관하거든요.제 생각으로는
i
란 "어떤 슬라이더의 현재 활성 슬라이드"를 의미하고 이건 상당히 지엽적인 변수입니다. 이걸 전역변수로 쓰시는 이유가 궁금하네요. 클릭으로 슬라이드 넘기는 것 자체는 그냥 이렇게 하면 작동할 듯한데... 정확히 문제가 뭔가요?$previewImg.on('click', function() { i = $previewImg.index(this); // prev(), next() 와 동일한 원리 slide(); });
- slide() 함수에 이미 변수 `i`가 지정돼있는 상태여서 새로운 변수 i가 on() 메서드를 통해 slide() 함수로 넘어가지 못하는 현상입니다 알 수 없는 사용자 2019.1.25 21:11
댓글 입력