Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem jQuery + html5 ... přehrávání zvuku při klikání na oprázky.

Ahoj. Mám problém a už ho žešim dva dny a nemůžu se dobrat konce. Potřeboval bych script kterej přehraje zvuk, když kliknu na obrázek myší, ale v okamžiku kdy pustím tlačítko myši, tak se tento zvuk přehrávat přestane a začne se přehrávat zvuk jiný. (píšu si na web piáno a nechci používat něčí stažené) Mám zatim tohle :

<section id="two">
      <div class="inside">
            <div id="nav-two" class="nav">
                  <audio id="beep-two">
                        <source src="piano/E5.mp3" controls></source>
                        <source src="piano/E5.ogg" controls></source>
                        Váš prohlížeč toto bohužel nepodpořil. :o/ Pořiďte si nový.
                  </audio>
<a
      onMouseOver="self.document['obrazek3'].src='piano/a_001.png'"
      onMouseOut="self.document['obrazek3'].src='piano/001.png';"
      onMouseDown="self.document['obrazek3'].src='piano/b_001.png';">  
      <img id="obrazek_id_3" name="obrazek3" style="margin-left: 100px; position: absolute;" hspace=5 src="piano/001.png" border="0">
</a>
</div>
            <script>$("#nav-two a")
              .each(function(i) {
                if (i != 0) { 
                  $("#beep-two")
                    .clone()
                    .attr("id", "beep-two" + i)
                    .appendTo($(this).parent()); 
                }
                $(this).data("beeper", i);
              })
              .mousedown(function() {
                $("#beep-two" + $(this).data("beeper"))[0].play();
              });
            $("#beep-two").attr("id", "beep-two0");</script>
      </div>
</section>

Script pro jednu klávesu, ale problém je v tom že už jsem vyzkoušel asi 70 variant, ale neumím udělat to aby zvuk přestal přehrávat pokud tlačítko pustím. Implementoval jsem tam už všechno co šlo, ale asi to skládám syntakticky špatně. (.mouseup, .mousedown) Nedaří se mi na to našroubovat .currentTime=0; aby to fungovalo správně.

Nevyřešil by to někdo?? Psal jsem už na 8 světovejch foor tady na foora nic. Nikdo neví nic já už nemůžu.

Předmět Autor Datum
Nastavenie currentTime funguje len vtedy, ak server podporuje streamovanie (byte range requesty). Po…
los 03.12.2012 00:02
los
tak to právě, že nefunguje pokud jste to myslel takhle : <script>$("#nav-two a") .each(function(i)…
essence 03.12.2012 02:00
essence
... mi funguje v pohodě.
essence 03.12.2012 02:01
essence
OPRAVA : šaptně jsem to sem okopírovat... nicméně to nefunguje ani takhto : <script>$("#nav-two a")…
essence 03.12.2012 02:08
essence
Případně asi by bylo lepší kdyby to fungovalo tak že při každym kliknutí se ten zvuk přehraje od zno…
essence 03.12.2012 02:13
essence
aha <script>$("#nav-two a") .each(function(i) { if (i != 0) { $("#beep-two") .clone() .attr("id", "…
essence 03.12.2012 02:21
essence
Tú bodkočiarku pred ".mouseup" tam dúfam nemáš, lebo s ňou to fungovať nemôže (syntaktická chyba). J… poslední
los 03.12.2012 21:03
los

Nastavenie currentTime funguje len vtedy, ak server podporuje streamovanie (byte range requesty). Potom by ti malo fungovať toto:

  .mouseup(function() {
    var audio = $("#beep-two" + $(this).data("beeper"))[0];
    audio.pause();
    audio.currentTime = 0;
  });

Prípadne môžeš skúsiť nahradiť ten audio element klonom, vtedy sa to audio stiahne znova a začne od začiatku (ak by si nastavil správne hlavičky pre kešovanie, tak by to nemuselo sťahovať to audio znova):

  .mouseup(function() {
    var $audio = $("#beep-two" + $(this).data("beeper"));
    $audio[0].pause();
    $audio.replaceWith($audio.clone());
  });

tak to právě, že nefunguje pokud jste to myslel takhle :

<script>$("#nav-two a")
              .each(function(i) {
                if (i != 0) { 
                  $("#beep-two")
                    .clone()
                    .attr("id", "beep-two" + i)
                    .appendTo($(this).parent()); 
                }
                $(this).data("beeper", i);
              })
              .mouseup(function() {
                $("#beep-two" + $(this).data("beeper"))[0].play();
              });
               .mouseup(function() {
                var audio = $("#beep-two" + $(this).data("beeper"))[0];
                audio.pause();
                audio.currentTime = 0;
              });
            $("#beep-two").attr("id", "beep-two0");</script>

Nastavenie currentTime funguje len vtedy, ak server podporuje streamovanie (byte range requesty).

já měl za to že ty zvuky se přenesou na stranu klienta a tam už jsou... takže to pak nemá se serverem nic společného ne?? Ale taky je možný že v tom mám zmatek. jinak je to můj server takže to tak klidně můžu nastavit jak chci. ovšem myslím že to podporuje protože třeba tohle :

 <script src="(URL address blocked: See forum rules)"></script>

    <div class="birds">
    <audio src="piano/C5.ogg" preload="auto"></audio>
    </div> 

    <script language="javascript" src="(URL address blocked: See forum rules)"></script>

    <script type="text/javascript">
    $(function(){
    var birdhover     = $('.birds');
        var birdaudio = birdhover.find('audio')[0];

    birdhover.hover(function(){
       birdaudio.play();
    }, function(){
       
       var audioElm = document.getElementById('soundTour');
       birdaudio.currentTime=0;
       birdaudio.pause();

    });
});
    </script>

OPRAVA : šaptně jsem to sem okopírovat... nicméně to nefunguje ani takhto :

<script>$("#nav-two a")
              .each(function(i) {
                if (i != 0) { 
                  $("#beep-two")
                    .clone()
                    .attr("id", "beep-two" + i)
                    .appendTo($(this).parent()); 
                }
                $(this).data("beeper", i);
              })
              .mousedown(function() {
                $("#beep-two" + $(this).data("beeper"))[0].play();
              });
               .mouseup(function() {
                var audio = $("#beep-two" + $(this).data("beeper"))[0];
                audio.pause();
                audio.currentTime = 0;
              });
            $("#beep-two").attr("id", "beep-two0");</script>

aha

<script>$("#nav-two a")
              .each(function(i) {
                if (i != 0) { 
                  $("#beep-two")
                    .clone()
                    .attr("id", "beep-two" + i)
                    .appendTo($(this).parent()); 
                }
                $(this).data("beeper", i);
              })
              .mousedown(function() {
                var audio = $("#beep-two" + $(this).data("beeper"))[0];
                
                audio.pause();
                audio.currentTime = 0;
                
                audio.play();
              });

            $("#beep-two").attr("id", "beep-two0");</script>

teď musim přemýšlet o tom jestli je to ale ideální

Tú bodkočiarku pred ".mouseup" tam dúfam nemáš, lebo s ňou to fungovať nemôže (syntaktická chyba). Ja som to skúšal v Chrome iba s lokálnym node.js serverom a nastavenie audio.currentTime mi tam nefungovalo.

<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<section id="two">
	<div class="inside">
		<div id="nav-two" class="nav">
			<audio id="beep-two">
				<source src="piano/E5.mp3"></source>
				<source src="piano/E5.ogg"></source>
				Váš prohlížeč toto bohužel nepodpořil. :o/ Pořiďte si nový.
			</audio>
			<a>E</a>
		</div>
	</div>
</section>
<script>
$("#nav-two a")
	.each(function(i) {
		if (i != 0)
			$("#beep-two")
				.clone()
				.attr("id", "beep-two" + i)
				.appendTo($(this).parent()); 
		$(this).data("beeper", i);
	})
	.mousedown(function() {
		$("#beep-two" + $(this).data("beeper"))[0].play();
	})
	.mouseup(function() {
		var $audio = $("#beep-two" + $(this).data("beeper"));
		$audio[0].pause();
		$audio[0].currentTime = 0;
		//$audio.replaceWith($audio.clone());
	});
$("#beep-two").attr("id", "beep-two0");
</script>

Zpět do poradny Odpovědět na původní otázku Nahoru