2013-03-03 165 views
1

我想創建一個有一些停止點的滑塊。每當我點擊任何項目時,我都希望滑塊在該點跳躍並執行一些操作。我用jQuery UI的滑塊創建了滑塊。這很容易,但我不完全知道如何添加這些停止點。有沒有一個現成的圖書館,或者我應該自己實施?如果是這樣,你能幫我走上正軌嗎?帶停止點的滑塊

Slider with stop points

+0

'點擊任何item' ......什麼項目?可以將'data'屬性放在這些項目上,並從該值中設置滑塊。需要更多關於你需要什麼的細節。在jsfiddle.net中的演示將有所幫助,有足夠的數據與 – charlietfl 2013-03-03 21:42:32

回答

5

我做類似這樣的事情之前。它的基本工作是這樣的:

  • 我存儲所有可能的值在數組(在我的情況「關鍵幀」喜歡你「停止點」)
  • 滑塊的stop() -callback觸發函數調用_getClosest,並將新值
  • 在滑塊下方的鏈接點擊直接讓它跳轉到那個位置

演示

http://jsfiddle.net/eTTM2/

HTML

<div id="slider"></div> 
<div id="keyframes"> 
    <a>|</a><a>|</a><a>|</a><a>|</a><a>|</a><a>|</a><a>|</a> 
</div> 

滑塊,鏈接和關鍵

var slider = $('slider'); 
var links = $('#keyframes > a'); 
var values = [0, 10, 34, 67, 80, 85, 100]; 

// initiate slider 
slider.slider({ 
    value: 0, 
    min: 0, 
    max: 100, 
    animate: 500, 
    stop: function(event, ui) { 
     slider.slider('value', _getClosest(ui.value)); 
    } 
}); 

// add click to the links 
links.click(function() { 
    slider.slider('value', values[$(this).index()]); 
}); 

如何獲得最接近的元素滑動到

最簡單的方法是對當前滑塊位置比較可能的關鍵幀:

  • 如果我已是半路上或進一步我移動到下一個元素
  • ,如果我不達到中等,我回去的元素之前

所以_getClosest()可以是這樣的:

function _getClosest(value) { 
    var closest = null; 
    $.each(values, function(_key, _value) { 
     if (closest == null || Math.abs(this-value) < Math.abs(closest-value)) { 
      closest = this; 
     } 
    }); 
    return closest; 
} 
對應於它們的值

滑塊下方個

地點鏈接要放置鏈接在它們各自的位置,只需環通它們,設置左根據來自values -array的值偏移。這一次,我乘以的2因子值,因爲在演示滑塊200px寬,但具有0-100範圍:

$.each(links, function(key, value) { 
    $(value).css('left', values[key] * 2); 
}); 
+0

一起工作首先,這是美麗的。謝謝。但是,我希望用戶能夠訪問所有點(本例中爲0-100)並突出顯示一些停止點。用戶可以自由滑動滑塊,但如果他/她想要移動到該特定點,他/她可以點擊下面的橙色點。 – 2013-03-04 06:58:54

+0

@AlirezaNoori我已經用新的演示和更多的解釋更新了我的答案,這些解釋應該適合您的情況。簡單地拿走一切不需要的東西來回答你的問題。 :) – insertusernamehere 2013-03-04 09:22:28