卡在多次点击事件中
Stuck with multi click event
我坚持以下。我有一个播放按钮。当用户第一次点击它时,它应该播放歌曲并为其添加一个暂停按钮。第二次单击该按钮时,它应该暂停歌曲。
想到这个:
$('.play').click(function(event) {
event.preventDefault();
var trackID = $(this).closest('li').attr('data-id');
console.log(trackID);
$('#playlist li').removeClass('active');
$(this).parent().addClass('active');
if ( $(this).hasClass('play pause') ) {
console.log('false');
$(this).removeClass('pause');
} else {
console.log('true');
$(this).addClass('pause');
//return false;
}
if (nowPlaying) {
nowPlaying.stop();
}
SC.stream('/tracks/' + trackID, function(sound) {
if ( !$(this).hasClass('play pause') ) {
console.log('hellooo');
sound.play();
nowPlaying = sound;
} else {
console.log('byeee');
sound.pause();
nowPlaying = sound;
}
});
});
以上部分将正确运行。播放是按钮的默认值。当单击 console.log
时,向我发送 trackID:91298058
、true 和流函数中的字符串 hellooo
,歌曲正在播放。第二次它还会给我 trackID 91298058
、false 和字符串 hellooo
。所以错误就在这里。每当您单击字符串 hellooo
时,都会将其发送到 console.log
。 console.log
- byeee
永远不会发送,因此永远不会暂停。
简而言之,我想要一个按钮,可以从播放切换到暂停和倒退。在播放时它应该播放歌曲:sound.play();
并且在暂停时它应该暂停歌曲:sound.pause();
;
有谁知道如何解决这个问题?
在传递给SC.stream
的回调函数中,$(this)
被重新定义。
应该缓存在点击事件附带的函数中,之后再使用。
$('.play').click(function(event) {
event.preventDefault();
var button = $(this);
// the code
SC.stream('/tracks/' + trackID, function(sound) {
if ( button.hasClass('play pause') ) {
console.log('hellooo');
sound.play();
nowPlaying = sound;
} else {
console.log('byeee');
sound.pause();
nowPlaying = sound;
}
});
此外,您可以只检查是否存在 class pause
,而不是 play pause
。
你能试着评论这一行吗?
SC.stream('/tracks/' + trackID, function(sound) {
if ( !$(this).hasClass('play pause') ) {
console.log('hellooo');
sound.play();
nowPlaying = sound;
} else {
console.log('byeee');
sound.pause();
// nowPlaying = sound;
}
});
我想出了以下解决方法:
在 click 函数中创建一个布尔值并将其命名为 bool
。默认值为 false;
。
它与@Colin Delhalle 的上述代码非常相似。
$('.play').click(function(event) {
event.preventDefault();
var trackID = $(this).closest('li').attr('data-id');
console.log(trackID);
$('#playlist li').removeClass('active');
$(this).closest('li').addClass('active');
var bool = false;
if ( $(this).hasClass('play pause') ) {
console.log('false');
bool = false;
$(this).removeClass('pause');
} else {
console.log('true');
$('#playlist li a').removeClass('pause');
$(this).addClass('pause');
bool = true;
}
if (nowPlaying) {
nowPlaying.stop();
}
SC.stream('/tracks/' + trackID, function(sound) {
if (bool) {
console.log('play');
sound.play();
nowPlaying = sound;
} else {
console.log('pause');
sound.pause();
nowPlaying = sound;
}
});
});
唯一我觉得很奇怪的地方就是pause函数不是暂停,而是停止..有谁知道为什么吗?
我坚持以下。我有一个播放按钮。当用户第一次点击它时,它应该播放歌曲并为其添加一个暂停按钮。第二次单击该按钮时,它应该暂停歌曲。
想到这个:
$('.play').click(function(event) {
event.preventDefault();
var trackID = $(this).closest('li').attr('data-id');
console.log(trackID);
$('#playlist li').removeClass('active');
$(this).parent().addClass('active');
if ( $(this).hasClass('play pause') ) {
console.log('false');
$(this).removeClass('pause');
} else {
console.log('true');
$(this).addClass('pause');
//return false;
}
if (nowPlaying) {
nowPlaying.stop();
}
SC.stream('/tracks/' + trackID, function(sound) {
if ( !$(this).hasClass('play pause') ) {
console.log('hellooo');
sound.play();
nowPlaying = sound;
} else {
console.log('byeee');
sound.pause();
nowPlaying = sound;
}
});
});
以上部分将正确运行。播放是按钮的默认值。当单击 console.log
时,向我发送 trackID:91298058
、true 和流函数中的字符串 hellooo
,歌曲正在播放。第二次它还会给我 trackID 91298058
、false 和字符串 hellooo
。所以错误就在这里。每当您单击字符串 hellooo
时,都会将其发送到 console.log
。 console.log
- byeee
永远不会发送,因此永远不会暂停。
简而言之,我想要一个按钮,可以从播放切换到暂停和倒退。在播放时它应该播放歌曲:sound.play();
并且在暂停时它应该暂停歌曲:sound.pause();
;
有谁知道如何解决这个问题?
在传递给SC.stream
的回调函数中,$(this)
被重新定义。
应该缓存在点击事件附带的函数中,之后再使用。
$('.play').click(function(event) {
event.preventDefault();
var button = $(this);
// the code
SC.stream('/tracks/' + trackID, function(sound) {
if ( button.hasClass('play pause') ) {
console.log('hellooo');
sound.play();
nowPlaying = sound;
} else {
console.log('byeee');
sound.pause();
nowPlaying = sound;
}
});
此外,您可以只检查是否存在 class pause
,而不是 play pause
。
你能试着评论这一行吗?
SC.stream('/tracks/' + trackID, function(sound) {
if ( !$(this).hasClass('play pause') ) {
console.log('hellooo');
sound.play();
nowPlaying = sound;
} else {
console.log('byeee');
sound.pause();
// nowPlaying = sound;
}
});
我想出了以下解决方法:
在 click 函数中创建一个布尔值并将其命名为 bool
。默认值为 false;
。
它与@Colin Delhalle 的上述代码非常相似。
$('.play').click(function(event) {
event.preventDefault();
var trackID = $(this).closest('li').attr('data-id');
console.log(trackID);
$('#playlist li').removeClass('active');
$(this).closest('li').addClass('active');
var bool = false;
if ( $(this).hasClass('play pause') ) {
console.log('false');
bool = false;
$(this).removeClass('pause');
} else {
console.log('true');
$('#playlist li a').removeClass('pause');
$(this).addClass('pause');
bool = true;
}
if (nowPlaying) {
nowPlaying.stop();
}
SC.stream('/tracks/' + trackID, function(sound) {
if (bool) {
console.log('play');
sound.play();
nowPlaying = sound;
} else {
console.log('pause');
sound.pause();
nowPlaying = sound;
}
});
});
唯一我觉得很奇怪的地方就是pause函数不是暂停,而是停止..有谁知道为什么吗?