用于SoundManager2 mp3播放器的jQuery可点击搜索栏

时间:2014-06-04 23:45:32

标签: jquery soundmanager2

我正在尝试为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");
});

2 个答案:

答案 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函数的最佳方式。