2012-04-21 15 views
7

Tôi có một thanh trượt được sử dụng làm dòng thời gian trong trình phát nhạc của mình. Giá trị nhỏ nhất là 0 và vlaue tối đa là độ dài bài hát (tính bằng giây). Mỗi giây (tôi làm điều này với bộ hẹn giờ), thanh trượt di chuyển và giá trị được đặt thành thời gian hiện tại. dòng mã này trông như thế:Sự kiện “thay đổi” thanh trượt jQuery: Làm thế nào để tôi xác định ai đã gọi nó?

$("#sliderTime").slider("option", "value", document.sound.controls.currentPosition); 

Người dùng có thể trượt/nhấp vào thanh trượt và nhảy sang một điểm khác trong bài hát, đây là bằng cách bắn các chức năng 'chơi (startPlayFromHere)'. Có vẻ như:

$("#sliderTime").slider({ 
    ... 
    change: function (event, ui) { play(ui.value) }, 
}); 

Vấn đề là cả hai dòng mã trong bộ hẹn giờ và người dùng đều gọi sự kiện 'thay đổi' của thanh trượt và người dùng không thể di chuyển thanh trượt.

Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể xác định liệu người dùng có gọi là sự kiện thay đổi hay không (điều đó có nghĩa đó là bộ hẹn giờ)?

Tôi hy vọng nó đủ rõ ràng, Cảm ơn!

Trả lời

21

Bạn có thể xác định xem sự kiện thay đổi có phát sinh thủ công hay theo chương trình hay không bằng cách thử nghiệm event.originalEvent trong trình xử lý thay đổi.

$('#slider').slider({ 
    change: function(event, ui) { 
     if (event.originalEvent) { 
      //manual change 
      play(ui.value); 
     } 
     else { 
      //programmatic change 
     } 
    } 
}); 

Xem fiddle.

+0

Cảm ơn! Bây giờ tôi có một vấn đề khác: Khi người dùng cố gắng trượt, bộ hẹn giờ vẫn hoạt động và trượt thanh trượt. Vì vậy, đôi khi thanh trượt quay trở lại vị trí ban đầu và bỏ qua cuộc gọi của người dùng. – eviabs

+1

Không có thời gian để viết nó nhưng bạn có thể đính kèm một trình xử lý 'bắt đầu' (xem [tài liệu] (http://jqueryui.com/demos/slider/)) để tăng cờ sẽ chặn (với điều chỉnh tương ứng của mã bộ đếm thời gian) kiểm soát bộ định thời của thanh trượt. Hạ cờ lại trong trình xử lý 'change'. (Hoặc, ngừng bộ hẹn giờ, sau đó khởi động lại). –