Chrome / Safari 悬停时自动播放声音 2018 2019?
Autoplay Sound in Chrome / Safari on hover 2018 2019?
我想知道 google 是否有任何方法可以克服新的自动播放政策。
我想在悬停 link 时播放一个简短的声音片段,不幸的是,这只适用于 firefox 而不是 chrome 和 safari。
有没有办法找到解决该问题的方法?
我想可能不是,只是想向该领域受过更多教育的人解决这个问题。也许有人有想法。 :)
这就是在 firefox 中工作的代码,也曾经在 chrome 和 safari 中工作 - 但现在不行了。
html
<span class="hit hitme">Just hit me up!</span>
<audio id="HitMe">
<source src="sound/hitmeup.mp3">
</audio>
jquery
var audio = $("#HitMe")[0];
$(".hitme").mouseenter(function() {
audio.play()
$(".hitme").mouseleave(function() {
audio.pause();
});
});
你的问题很短,其实要说的东西很多。
首先,在政策变更时使用 VanillaJS™ 而不是 jQuery 总是好的,因为标准会立即传播到普通 JavaScript,而它需要同时为了将更改传播到 jQuery 等第三方库。使用普通 JavaScript 的好处是您可以使用 new Audio(<source>)
创建一个音频对象 - 不需要任何 HTML 元素!请参阅下面的示例:
const audio = new Audio("https://interactive-examples.mdn.mozilla.net/media/examples/t-rex-roar.mp3");
// wait for the DOM to load
window.onload = () => {
// play audio on click
const clickToPlay = document.querySelector('#click-to-play');
clickToPlay.onclick = () => audio.play();
// play/pause audio on hover
const hoverToPlay = document.querySelector('#hover-to-play');
hoverToPlay.onmouseover = () => audio.play();
hoverToPlay.onmouseout = () => audio.pause();
}
/* just some styling, not useful for the solution */
#click-to-play {
padding: 1em;
background-color: steelblue;
}
#click-to-play:hover {
cursor: pointer;
}
#hover-to-play {
padding: 1em;
background-color: lightblue;
}
#hover-to-play:hover {
cursor: crosshair;
}
<div id="click-to-play">
Click to play
</div>
<div id="hover-to-play">
Hover in to play, hover out to pause
</div>
太棒了!除了,正如您所指出的,悬停时的自动播放可能会被 the 2017 update on autoplay in Chrome.
阻止
但这不一定是坏事。进行此更新是为了改善网络用户体验。如果您试图找到绕过它的技巧,那您就错了;) 更新说明 如果用户进行了交互(例如单击),则允许使用声音自动播放.因此,在设计您的网站时,确保用户在自动播放出现之前点击了您网页上的某处。这是一个包含两步的示例点击授权,悬停播放用户体验:
const audio = new Audio('https://interactive-examples.mdn.mozilla.net/media/examples/t-rex-roar.mp3');
window.onload = () => {
const clickToAuthorize = document.querySelector('#click-to-authorize');
const hoverToPlay = document.querySelector('#hover-to-play');
clickToAuthorize.onclick = () => {
hoverToPlay.style.display = 'block';
}
hoverToPlay.onmouseover = () => audio.play();
hoverToPlay.onmouseout = () => audio.pause();
}
#click-to-authorize {
padding: 1em;
background-color: steelblue;
}
#click-to-authorize:hover {
cursor: pointer;
}
#hover-to-play {
padding: 1em;
background-color: lightblue;
display: none;
}
#hover-to-play:hover {
cursor: crosshair;
}
<div id="click-to-authorize">
Click if you want to hear a T-Rex roar!
</div>
<div id="hover-to-play">
Hover to play/pause
</div>
我想知道 google 是否有任何方法可以克服新的自动播放政策。
我想在悬停 link 时播放一个简短的声音片段,不幸的是,这只适用于 firefox 而不是 chrome 和 safari。 有没有办法找到解决该问题的方法?
我想可能不是,只是想向该领域受过更多教育的人解决这个问题。也许有人有想法。 :)
这就是在 firefox 中工作的代码,也曾经在 chrome 和 safari 中工作 - 但现在不行了。
html
<span class="hit hitme">Just hit me up!</span>
<audio id="HitMe">
<source src="sound/hitmeup.mp3">
</audio>
jquery
var audio = $("#HitMe")[0];
$(".hitme").mouseenter(function() {
audio.play()
$(".hitme").mouseleave(function() {
audio.pause();
});
});
你的问题很短,其实要说的东西很多。
首先,在政策变更时使用 VanillaJS™ 而不是 jQuery 总是好的,因为标准会立即传播到普通 JavaScript,而它需要同时为了将更改传播到 jQuery 等第三方库。使用普通 JavaScript 的好处是您可以使用 new Audio(<source>)
创建一个音频对象 - 不需要任何 HTML 元素!请参阅下面的示例:
const audio = new Audio("https://interactive-examples.mdn.mozilla.net/media/examples/t-rex-roar.mp3");
// wait for the DOM to load
window.onload = () => {
// play audio on click
const clickToPlay = document.querySelector('#click-to-play');
clickToPlay.onclick = () => audio.play();
// play/pause audio on hover
const hoverToPlay = document.querySelector('#hover-to-play');
hoverToPlay.onmouseover = () => audio.play();
hoverToPlay.onmouseout = () => audio.pause();
}
/* just some styling, not useful for the solution */
#click-to-play {
padding: 1em;
background-color: steelblue;
}
#click-to-play:hover {
cursor: pointer;
}
#hover-to-play {
padding: 1em;
background-color: lightblue;
}
#hover-to-play:hover {
cursor: crosshair;
}
<div id="click-to-play">
Click to play
</div>
<div id="hover-to-play">
Hover in to play, hover out to pause
</div>
太棒了!除了,正如您所指出的,悬停时的自动播放可能会被 the 2017 update on autoplay in Chrome.
阻止但这不一定是坏事。进行此更新是为了改善网络用户体验。如果您试图找到绕过它的技巧,那您就错了;) 更新说明 如果用户进行了交互(例如单击),则允许使用声音自动播放.因此,在设计您的网站时,确保用户在自动播放出现之前点击了您网页上的某处。这是一个包含两步的示例点击授权,悬停播放用户体验:
const audio = new Audio('https://interactive-examples.mdn.mozilla.net/media/examples/t-rex-roar.mp3');
window.onload = () => {
const clickToAuthorize = document.querySelector('#click-to-authorize');
const hoverToPlay = document.querySelector('#hover-to-play');
clickToAuthorize.onclick = () => {
hoverToPlay.style.display = 'block';
}
hoverToPlay.onmouseover = () => audio.play();
hoverToPlay.onmouseout = () => audio.pause();
}
#click-to-authorize {
padding: 1em;
background-color: steelblue;
}
#click-to-authorize:hover {
cursor: pointer;
}
#hover-to-play {
padding: 1em;
background-color: lightblue;
display: none;
}
#hover-to-play:hover {
cursor: crosshair;
}
<div id="click-to-authorize">
Click if you want to hear a T-Rex roar!
</div>
<div id="hover-to-play">
Hover to play/pause
</div>