当我在Rails中使用link_to标记时,我正试图找出在后台播放wav文件的最佳方法(类似HTML5)。
以下是我的一个观点中的示例link_to:
<%= link_to 'At Station', at_station_mdt_index_path, :class => 'btn btn-success btn-medium', :method => :put, :remote => true %>
我想弄清楚当按下按钮时如何使用audio_tag来触发声音。我已经尝试将link_to ERB中的audio_tag组合在一起,但是会出现各种语法错误。
非常感谢任何例子。
更新01/04 / 14-10:18am CT:声音一次正确发射。但是,由于将link添加到link_to链接不再触发rails路径来更改对象,只播放声音
查看代码:
<%= link_to 'En Route', en_route_mdt_index_path(:call_id => call.id), :class => 'btn btn-warning btn-medium', :method => :put, :remote => true, :id => "er" %>
<%= link_to 'On Scene', on_scene_mdt_index_path(:call_id => call.id), :id => 'to', :class => 'btn btn-primary btn-medium', :method => :put, :remote => true, :id => "os" %>
<%= link_to 'To Hospital', to_hospital_mdt_index_path(:call_id => call.id), :class => 'btn btn-warning btn-medium', :method => :put, :remote => true, :id => "to" %>
<audio id="en-route" class="audio_player" preload="true">
<source src="audios/en-route.wav" type="audio/wav">
</audio>
<audio id="on-scene" class="audio_player" preload="true">
<source src="audios/on-scene.wav" type="audio/wav">
</audio>
<audio id="to-hospital" class="audio_player" preload="true">
<source src="audios/to-hospital.wav" type="audio/wav">
</audio>
<script>
$('#er').click(function (e) {
e.preventDefault();
$('#en-route')[0].currentTime = 0;
$('#en-route')[0].play();
return true;
});
$('#os').click(function (e) {
e.preventDefault();
$('#on-scene')[0].currentTime = 0;
$('#on-scene')[0].play();
return true;
});
$('#to').click(function (e) {
e.preventDefault();
$('#to-hospital')[0].currentTime = 0;
$('#to-hospital')[0].play();
return true;
});
</script>
答案 0 :(得分:5)
以下是播放wav文件的简单示例:
HTML:
<a href="javascript:void(0)" id="playsound">At Station</a>
<audio id="sound_effect" class="audio_player" preload="auto">
<source src="http://www.villagegeek.com/downloads/webwavs/alrighty.wav" type="audio/wav">
</audio>
JavaScript的:
$('#playsound').click(function (e) {
$('#sound_effect')[0].currentTime = 0;
$('#sound_effect')[0].play();
return false;
});
我在播放之前设置currentTime = 0
以使其始终从头开始播放。
它不适用于IE,因为IE不支持wav文件。
答案 1 :(得分:1)
我在这个答案中做了一些假设:
public/audios
不幸的是,audio_tag
的Rails 3.2实现被破坏了(https://github.com/rails/rails/issues/9373)。因此,除非您使用Rails 4,否则最好使用实际的HTML标记。
在此示例中,我们在默认的HTML5音频播放器中加载mp3文件。以下代码段应位于您的视图文件中。
<audio id="sound_effect" class="audio_player" controls="false" preload="true">
<source src="/audios/TrainWhistle.mp3" type="audio/mpeg">
</audio>
由于HTML5音频播放器附带&#34;内置&#34;显示chrome,你可能想用css将它放在页面外。在此示例中,您将以下内容添加到css文件中:
.audio_player {
position: absolute;
top: -999em;
{
您的link_to标记看起来像:
<%= link_to 'At Station', '#', class: 'btn btn-success btn-medium', id: 'playsound' %>
实际播放声音的javascript看起来与此jQuery示例类似:
$('#playsound').on('click', function (e) {
e.preventDefault();
$('#sound_effect').currentTime = 0;
$('#sound_effect').play();
return false;
});
通过对link_to
标记和javascript进行细微更改,可以轻松扩展此示例以支持多个文件。
答案 2 :(得分:-1)
这样的事情怎么样......
function playSound(soundfile) {
document.getElementById("playsound").innerHTML=
"<embed src=\""+soundfile+"\" hidden=\"true\" autostart=\"true\" loop=\"false\" />";
}
$('#playsound').observe('click', function (event) {
playSound('URL to soundfile');
event.stop(); // Prevent link from following through to its given href
});
然后将playsound
ID添加到您的链接。