2013-03-06 3 views
0

기본적으로 나는 작업중인 JQuery 이미지 갤러리에 대해 다음 및 이전 버튼을 만들고 싶습니다. 각 버튼의 ID는 각각 "next"와 "prev"입니다. 내가하려고하는 것은 갤러리 (메인 ID가 id 인)의 메인 이미지의 소스에있는 숫자를 변경하는 것입니다. 각 이미지의 소스 내에서 숫자를 타겟팅 할 수 있었지만 올바르게 증가시키지 못하고 현재 이미지의 소스 번호를 새롭게 증가 된 숫자로 바꿀 수 없습니다. while 루프, for 루프, if 문을 사용해 보았지만 제대로 작동하지 않았습니다. 지금까지 가지고있는 갤러리를 보려면 여기에 업로드했습니다 : http://tiger.towson.edu/~abarso2/463/projecta/index.html 내 script.js 파일에 들어가면 하단에 주석 처리 된 블록이 표시됩니다. 그것이 지금까지 이미지 소스 내의 숫자를 대상으로하고 정수로 파싱하는 함수입니다. 모든 도움을 미리 감사드립니다.클릭시 이미지 소스의 숫자 증가

는 여기에 내가 현재 가지고있는 작업은 다음과 같습니다

여기
(function(){ 
    var mainImg = $('#mainImg').attr('src'); 
    var mainImgStr = mainImg.charAt(mainImg.length - 5); 
    var mainImgNum = parseInt(mainImgStr); 
     $('#next').click(function(){ 

     }); 
}()); 
+1

해결해야 ... –

답변

1

이 문제 당신은 복사/솔리드 답을 얻기의 당신의 기회를 증가 할 경우, 귀하의 질문에 지금까지 무엇을 붙여 넣을 수 있습니다

$(function(){ 
    var mainImg = $('#mainImg'); 
    var slidshow = $('#slideShow'); 

    $('#next').click(function(){ 
     var src = mainImg.attr('src').replace('thumb','shot'); 
     var next = $('img[src="' + src +'"]', slidshow).next(); 
     if(next.length){ 
      mainImg.attr('src',next.attr('src').replace('thumb','shot')); 
     } 
    }); 

    $('#prev').click(function(){ 
     var src = mainImg.attr('src').replace('thumb','shot'); 
     var prev = $('img[src="' + src +'"]', slidshow).prev(); 
     if(prev.length){ 
      mainImg.attr('src',prev.attr('src').replace('thumb','shot')); 
     } 
    }); 
}); 
+0

#slideShow div 내의 모든 이미지를 정렬되지 않은 목록의 목록 항목에 넣을 때까지이 작업이 유용했습니다. 지금 제대로 작동하도록 코드 수정을 시도했지만 제대로 작동하지 않을 수 있습니다. 이것을 단순히 이미지 대신 목록 항목에서 가져 오도록 수정할 수 있습니까? –

+0

원래 질문에 게시 한 링크로 이동하면 지금 #slideShow div 형식을 정확히 볼 수 있습니다. –

+0

당신은'next.parent(). children ('img') .attr ('src')'와'prev.parent(). children ('img'). attr ('src')' –

1

는 수정 된 코드입니다. regexp가 더 잘 작동합니다. 사용자는 다음 버튼을 여러 번 클릭 할 수 있지만 이미지를 건너 뛰지는 않습니다. 주 이미지는 다음 이미지가로드 될 때와 다음 이미지로만 이동하기 때문입니다. 따라서 다음 번에 빠르게 5 번 클릭하면 다음 이미지 만 표시됩니다 (4 개의 이미지를 건너 뛰지 않음).

(function(){ 
// replace all non digit characters from src 
// only the last set of numbers so www.123.com/image7.jpg 
// will give us 7 
function getNumber(src){ 
    return parseInt(src.replace(/[\d]+(?=[\/])/g,"") 
    .replace(/[^\d]/g,""),10); 
} 
// replaces last number of a source with the number provided 
// www.123.com/imgage7.jpg will be www.123.com/image8.jpg 
// if number 8 is given 
function setNumber(src,num){ 
    return src.replace(/[\d]+(?![\d])/g,num); 
} 
var $mainImg = $('#mainImg'); 
$('#next').click(function(){ 
    var src= $mainImg.attr('src'), 
    mainImgNum = getNumber(src); 
    var $img=$(document.createElement("img")); 
    $img.data("checkNext",false); 
    $img.on("load",function(){ 
    // image exsist, load it as main image src 
    if($img.data("checkNext")===true){ 
     $img.remove(); 
    }else{ 
     $mainImg.attr('src',$img.attr('src')); 
     $("#prev").show(1000); 
     $img.data("checkNext",true); 
     $img.attr('src',setNumber($img.attr('src'), 
     new String(mainImgNum+2)); 
    }); 
    $img.on("error",function(){ 
    if($img.data("checkNext")===true){ 
     $("#next").hide(1000); 
    } 
    // clean up 
    $img.remove(); 
    }); 
    $img.attr('src',setNumber(src,new String(mainImgNum+1))); 
}); 
}()); 
+0

트릭을 마친 것 같아서 고마워! 이제 한 가지 더 알 필요가 있습니다. 마지막 이미지에 도달했다면 이전 버튼에 대해 멈추고 싶습니다 (코드 덕분에 작동합니다). mainImgNum이 내가 가지고있는 미리보기 이미지의 수와 같은지 확인해야한다고 생각합니다. 그럴 경우 다음 버튼을 숨기고 싶습니다. 내가 어떻게 할 수 있는지 알아? –

+0

내 대답이 업데이트되었습니다. 이미지가 순차적이거나 스크립트가 중단되지 않아야합니다. – HMR

+0

다시 업데이트되었습니다.이 이미지는 더 나은 정규 표현식을 사용하고 있으며, 이미지가 실제로 느리게로드되는 동안 정말 빠르게 클릭 할 때 중단되지 않습니다. – HMR