jquery - "Hover"在 iPad 上播放音乐

标签 jquery ios html safari jplayer

我正在设计一个包含多个图 block 的网页。在桌面上,悬停每个图 block 将触发 jPlayer 开始播放音乐预览,执行此操作的代码(使用 jQuery)是:

function init_tile(id, url) {
    $(id).hover(
        function() {
            $('#player').jPlayer("setMedia", {mp3: url}).jPlayer("play");
        },
        function() {
            $('#player').jPlayer("stop");
        }
    );
}

除 iOS 上的 Mobile Safari 外,它运行良好:jPlayer doesn't play audio file automatically in iPad ,从中我了解到只有用户操作(点击/点击但不是“悬停”,这在触摸屏上没有意义)可以触发 HTML5 播放。

我喜欢 .hover 调用,因为它在 iPad 上运行得非常好。第一次快速点击将触发悬停状态,然后第二次点击将跟随链接。点击其他方 block 将恢复之前悬停的方 block 。如果我选择使用来自 jquery-mobile 的“tap”事件来模拟它,那将会很麻烦。

我想知道解决这个问题的捷径是什么。我正在为所有依赖项使用最新的稳定版本。

最佳答案

好的,我会自己回答。

事实证明,这并不太麻烦。即使我不使用 mouseover/mouseenter,Mobile Safari 仍会将 mouseover/mouseout 发送到“热门项目”。我不必专门跟踪磁贴。

我最终得到了这样的东西:

if (Modernizr.touch) {
    $(id).click(
        function (e) {
            if ($(id).hasClass('playing')) {
                $(id).trigger('mouseout');
            } else {
                e.preventDefault();
                $(id).addClass('playing');
                $('#player').jPlayer("setMedia", {mp3: url}).jPlayer("play");
            }
        });
    $(id).mouseout(
        function () {
            $(id).removeClass('playing');
            $('#player').jPlayer("stop");
        });
} else {
    $(id).hover(
        function () {
            $('#player').jPlayer("setMedia", {mp3: url}).jPlayer("play");
        },
        function () {
            $('#player').jPlayer("stop");
        }
    );
}

它使用了modernizr检测触摸设备。这基本上是“第一次点击悬停,第二次点击跟随”行为的手动实现。而且您不必跟踪热磁贴。

关于jquery - "Hover"在 iPad 上播放音乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14088954/

相关文章:

Javascript Slider 问题,基于下拉菜单输出结果

ios - 如何增加分发证书的到期时间

ios - 使用 XMPP 聊天在 iPhone 中传输文件

javascript - 如何让我的 ionic 侧面菜单按钮工作?

javascript - 如何知道复选框是否被选中

jquery - Joomla 1.5 如何隐藏我的网站源代码?

javascript - 选择框 : On IE item is added to OptGroup instead of root. FF ok

html - 移动设备的粘性页脚

jQuery 隐藏和显示面板

ios - 将流式 (utf8) 数据转换为字符串的安全方法是什么?