我正在尝试为soundmanager2 mp3播放器添加可点击且可拖动的搜索栏。有没有人注意到我做错了什么?谢谢!
whileplaying:function(){
duration = this.duration;
pos = this.position;
songPosition = (pos/duration)*100;
$( "#progressbar" ).progressbar( "option", "value", songPosition);
$( "#progressbar" ).click(function(e) {
var playingSound = soundManager.getSoundById(_.keys(soundManager.sounds)[0]),
x = e.pageX - $(this).offset().left,
width = $(this).width(),
duration = playingSound.durationEstimate;
playingSound.setPosition((x / width) * duration);
});
$( "#progressbar" ).mouseover(function(){
$(this).css("cursor","pointer");
});
答案 0 :(得分:0)
将整个代码移出whileplaying:function(){},因为每次调用setPosition时,歌曲位置都会改变,但你没有更新$(“#progressbar”)中进度条的“值”.click (function(e){});函数和whileplaying函数被一次又一次地调用,它设置当歌曲播放时将“值”设置为songPosition(与之前相同)
尝试更新$(“#prograbar”)中的值.click(function(e){//此处也更新值}};
答案 1 :(得分:0)
如前所述,从whileplaying函数中删除click事件。实际上,你应该在那里放置任何东西(除了可能的视觉更新/时间戳更新)。
你可以简单地调用var s = soundManager.getSoundById($ name)来获取声音对象,然后你可以使用s.setPosition();
我建议采取以下措施:
selectTime.click(function(e){
s = soundManager.getSoundById($name);
var posX = selectTime.offset().left;
var pos = Math.min(Math.max((e.pageX - posX) / selectTime.width() * 100, 0), s.duration);
if(!isNaN(pos))
s.setPosition(Math.round(pos*s.duration/100));
});
确保使用flash播放器,它目前仍然是使用setPosition函数的最佳方式。