卡住多点击事件
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
时,向我发送曲目ID:91298058
,true,并且字符串hellooo
在流函数中,并且歌曲正在播放。第二次它还会给我跟踪ID 91298058
,假和字符串hellooo
。所以错误就在这里。每当您单击字符串时hellooo
都会发送到console.log
。console.log
- byeee
永远不会发送,因此永远不会暂停。
简而言之,我希望有一个按钮,可以从播放切换到暂停和反转。在播放时,它应该播放歌曲:sound.play();
,在暂停时,它应该暂停歌曲:sound.pause();
;
现场演示
有谁知道如何解决这个问题?
在传递给 SC.stream
的回调函数中,$(this)
被重新定义。
您应该将其缓存在附加到 click 事件的函数中,并在之后使用它。
$('.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;
}
});
此外,您可以只检查是否存在pause
类,而不是play pause
。
我想出了以下解决方法:在 click 函数内创建一个布尔值并将其调用 bool
。默认值为 false;
。
它与上述@Colin德尔哈勒的代码非常相似。
$('.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;
}
});
});
我唯一觉得很奇怪的是,功能暂停不是暂停歌曲,而是停止它。有谁知道为什么?
你能试着评论这一行吗?
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;
}
});
相关文章:
- Jquery点击事件必须点击两次
- 使用mvc和jquery显示更多点击数据
- 多点触摸平移缩放在javascript中同时旋转
- 单击中每个循环的事件多次激发
- Phonegap/Cordova:如何添加Javascript多点触摸事件
- 如何启用离子多点触摸事件
- jQuery多点击实例
- Nodejs事件多次触发
- 如何检测多点触摸手指何时移动到子元素上
- jQuery多点击事件附加到Body元素(AJAX加载的内容)
- 在jQuery上检测事件-不点击即更改
- Twtitter Bootstrap模式显示事件多次触发
- 谷歌地图USGSO在同一级别标记上覆盖点击事件多响应
- 获取触发jquery blur()事件的点击对象
- 谷歌地图事件-获取点击元素的父级
- 防止在列表视图上出现更多的点击事件(一旦点击)
- 通过Websockets发送多点触摸事件
- Javascript点击事件多次触发
- 卡住多点击事件
- Jquery多点击事件