在悬停时随机更改音频src?

时间:2014-08-05 04:36:44

标签: javascript jquery html5-audio

(我是JS和jQuery的相对新手,所以请原谅任何轻率行为!)

当我将鼠标悬停在其他元素上时,我正在尝试随机更改音频元素中的src。我把一些东西拼凑在一起并通过带有内联JS的按钮让它工作(感谢我目前找不到的答案),但是无法让它在.hover上工作。

I have this jsFiddle

JS:     function sounds(){

var rand = [
    'http://thejazz.ninja/sounds/v.mp3',
    'http://thejazz.ninja/sounds/w.mp3',
    'http://thejazz.ninja/sounds/x.mp3',
    'http://thejazz.ninja/sounds/y.mp3',
    'http://thejazz.ninja/sounds/z.mp3'];

var randSound = rand[Math.floor(Math.random() * rand.length)];

var player=document.getElementById('player');
var sourceMp3=document.getElementById('sourceMp3');

sourceMp3.src='' + randSound + '';

   player.load();
   player.play();
}

$('.box').click(sounds); // this doesn't work...

HTML:               

<audio id="player" autoplay>
  <source id="sourceMp3" src="" type="audio/mp3" />
      Your browser does not support the audio element.
</audio>

<p>
    <button onclick='sounds()'> Load Sound</button> <!-- THIS works -->
</p>

CSS:

.box {
    display:inline-block;
    width:50px;
    height:50px;
    background:#aee;
}

4 个答案:

答案 0 :(得分:2)

$('.box').click(sounds);

执行此操作时没有.box。用$包裹它:

$(function(){                       //this function will be executed when DOM is
    $('.box').click(sounds);        //ready to be manipulated (!= onload)
});

或者在jsFiddle中你可以选择左边的“onLoad”/“onDomready”而不是“No wrap-in&lt; head&gt;”:http://jsfiddle.net/DerekL/D8Ln7/6/


关于“悬停”部分,请点击更改为mouseenter

$(function(){
    $(".box").mouseenter(sounds);
});

请勿使用.hover。 jQuery中有一个方法hover,但在这种情况下这不起作用,因为它与您尝试的不匹配。引用文档:

  

[。hover]将为mouseenter和mouseleave事件执行该处理程序。

更新的小提琴:http://jsfiddle.net/DerekL/D8Ln7/8/

答案 1 :(得分:1)

尝试使用:

$(document).ready(function() {
    $('.box').hover(sounds);    
});

您必须确保在为其添加事件时呈现html元素。

答案 2 :(得分:1)

在调用悬停方法之前等待加载DOM。

$(document).ready(function(){

$( ".box" ).hover(
  function() {
    sounds();      
  }, function() {
      //hover out 
  });
});

DEMO FIDDLE

答案 3 :(得分:0)

    $('.box').click(sounds);

而不是abouve call use必须尝试

    $(document).ready(
              function() {
                  $('.box').click(function(){
                  sounds();
                 });

               });

要在悬停时拨打电话,您需要调用onBlur事件

           <button onblur='sounds()'> Load Sound</button>