2016-05-31 53 views
2

我已經看到一些與我想要的東西接近的東西,但不知道如何實現我正在做的事情。在4個按鈕之間移動,並在滾動過程中保持點擊

下面的代碼一切正常,但現在被要求讓每個按鈕被點擊時懸停在原地。我將如何去做這件事?或者更好地重新開始使用按鈕而不是div?

這裏是一個的jsfiddle(不知道爲什麼所有的div都出現在這裏,只住了第一個廣告是正確的)按鈕的

例子:

<div id="tab1" class="tab" style="height:50px; width:160px; background-color:#CCC; float:left;"> 
    <img src=".../images/landing/terms-coach.jpg" onmouseover="this.src='.../images/landing/terms-coach-col-2.jpg'" onmouseout="this.src='.../images/landing/terms-coach.jpg'" /> 
</div> 

https://jsfiddle.net/uqxdum1o/

回答

3

我已經修改了標記和JS來達到那裏,但我認爲這個代碼應該滿足選項卡的要求,並刪除一些內聯JS。

基本上,存儲活動圖像的src在爲每個標籤按鈕的屬性:

<div id="tab1" class="tab" style="..." 
    data-image-active="./images/button1-active.jpg" 
    data-image="./images/button1.jpg"> 
    <img src="./images/button1.jpg" /> 
</div> 

然後使用它來設置在JavaScript爲每個標籤按鈕活動狀態。我已將您當前的點擊處理代碼移動到每個循環中。

$(document).ready(function(){ 
    var $contents = $('.tab-content'); 
    $contents.slice(1).hide(); 
    $('.tab').each(function() { 
     $(this).hover(function() { 
       setButtonActive($(this)); 
      }, function() { 
      if (!$(this).hasClass('active')) { 
       setButtonInactive($(this)); 
      } 
     }); 
     $(this).click(function() { 
      resetAllButtons(); 
      setButtonActive($(this)); 
      $(this).addClass('active'); 

      var $target = $('#' + this.id + 'show').show(); 
      $contents.not($target).hide(); 
     }) 
    }); 
}); 

function setButtonActive(button) { 
    var img = button.find('img'), 
     imgSrc = button.attr('data-image-active'); 
    img.attr('src', imgSrc); 
} 
function setButtonInactive(button) { 
    var img = button.find('img'), 
     imgSrc = button.attr('data-image'); 
    img.attr('src', imgSrc); 
} 
function resetAllButtons() { 
    $('.tab').removeClass('active').each(function() { 
     setButtonInactive($(this)); 
    }); 
} 
+0

感謝,這幾乎完美地工作,唯一的事情是當我點擊下一個按鈕,前一個保持點擊,直到我滾過它,是否有辦法讓它返回到沒有點擊儘快其他人點擊? – HTMellis

+0

我現在編輯它,它做的工作 - 需要將原始src添加到標記,以便它可以重置。還將其重構爲一些功能。 – Bat

+0

偉大的工作,完美謝謝你的幫助! – HTMellis