Sie sind nicht angemeldet.

1

Samstag, 29. März 2008, 16:58

Einen Button zum abspielen und anhalten einer Musikdatei (javascript)

Hallo zusammen,

ich versuch schon seit Stunden ein kleines "Programm" zu schreiben, mit dem ich eine Musikdatei auf Knopfdruck abspielen und stoppen kann. Dabei soll das ganze nur mit einem Button funktionieren.

Da ich mich noch nicht lang mit javascript beschäftige, kann ich noch nicht alles so scripten, wie ich mir die Funktion vorstelle...
Hier 'mal mein Versuch, das ganze zu realisieren:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<html>
    <head>
         <script language="JavaScript">
	var variable = "";
	function playSound(){
		document.sound.play();
		variable = 1;
	}
	function stopSound(){
		document.sound.stop();
		variable = 0;
	}
	function check(){
		if (variable == 1){
			button.value = "Stoppen";
			button.onmousedown = "stopSound();";
		}
		if (variable == 0){
			button.value = "Abspielen";
			button.onmousedown = "playSound();";
		}
	}
	</script>
    </head>
    <body>
        <center>
            <embed src="Musikdatei.wma" autostart="false" loop="false" hidden="" name="sound">
            <br>
            <input type="button" name="button" value="Abspielen" onmousedown="playSound();" onmouseup="check();">
        </center>
    </body>
</html>

Dabei funktioniert der Austausch von onmousedown="stopSound();" nicht... warscheinlich dann auch onmousedown="playSound();" nicht...

Wäre super, wenn Ihr mir weiterhelfen könntet! :)
Grüße,
Daniel

>>>http://www.fsghannsklemm.de<<<
My software never has bugs. It just develops random features... xP

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Daniel« (30. März 2008, 11:31)


2

Dienstag, 1. April 2008, 20:43

Hallo,

was genau meinst Du mit der Austausch funktioniert nicht? Klappt der Aufruf an sich nicht, oder wird die Musik nicht abgespielt?

Warum arbeitest Du nicht mit "onclick"?

Viele Grüße,
Fabian Karg

>>> www.flf-book.de
Zufrieden mit Service und Support? Dann schau Dir doch mal die Premiumfeatures an ;)

3

Dienstag, 1. April 2008, 22:02

Die Datei wird abgespielt, soweit so gut... erst beim Loslassen des Buttons funktionier das Script nicht so wie ich will ^^: Wenn man den Button loslässt, soll --onmousedown = "playSound();"-- durch --onmousedown = "stopSound();"-- ersetzt werden, damit beim erneuten klicken auf den Button die Musikdatei gestoppt wird.
Wegen Befehl "onclick" - hab' ich gerade ausprobiert, funktioniert komplett nicht... die Datei wird nicht einmal gestartet... :(
Grüße,
Daniel

>>>http://www.fsghannsklemm.de<<<
My software never has bugs. It just develops random features... xP

4

Mittwoch, 2. April 2008, 13:57

Mir ist gerade aufgefallen, dass Du die Variable "variable" mit einem vorgestellten var definiert hast. Eventuell verhindert dies, dass diese Variable global verfügbar ist, vgl: http://de.selfhtml.org/javascript/sprache/variablen.htm

Eventuell kommst Du auch ganz ohne diese Variable aus; folgender Ansatz:

Quellcode

1
2
3
4
5
6
7
8
9
10
function check(){
		if (button.value = "Abspielen"){
                                                playSound();
			button.value = "Stoppen";
                                }
		if (button.value = "Stoppen"){
                                                stopSound();
			button.value = "Abspielen";
                                }
}


Aufrufen musst Du dann jeweils nur noch die Funktion check();

Ich habe das jetzt nicht getestet. Aber vom logischen Ansatzpunkt her müsste es gehen wie ich meine ;-)

Viele Grüße,
Fabian Karg

>>> www.flf-book.de
Zufrieden mit Service und Support? Dann schau Dir doch mal die Premiumfeatures an ;)

5

Mittwoch, 2. April 2008, 20:07

Hey,
danke erst mal für den Lößungsvorschlag! :) - Ich hab das mal so ausprobiert; nur tut sich da leider nix... (ich hab auch schon "onclick" durch "onmousedown" ersetzt; genauso wenig...)
Das Ganze sieht so aus, vieleicht hab ich ja 'nen Fehler reingebaut:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<html>
	<head>
		<script language="JavaScript">
			function playSound(){
				document.sound.play();
			}
			function stopSound(){
				document.sound.stop();
			}
			function check(){
				if (button.value = "Abspielen"){
					playSound();
					button.value = "Stoppen";
				}
				if (button.value = "Stoppen"){
					stopSound();
					button.value = "Abspielen";
				}
			}
		</script>
	</head>
	<body>
		<center>
			<embed src="Musikdatei.wma" autostart="false" loop="false" hidden="" name="sound">
			<br>
			<input type="button" name="button" value="Abspielen" onclick="click();">
		</center>
	</body>
</html>


Nachdem dieses Script wie gesagt nicht funktioniert hat, hab ich die "Werte-Änderungs-Befehle" button.value = "Stoppen"; in function playSound(); und button.value = "Abspielen"; in stopSound(); verschoben, onclick im input auf startSound(); gesetzt und onmouseup="check();" :

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<html>
	<head>
		<script language="JavaScript">
			function playSound(){
				document.sound.play();
				button.value = "Stoppen";
			}
			function stopSound(){
				document.sound.stop();
				button.value = "Abspielen";
			}
			function check(){
				if (button.value = "Abspielen"){
					playSound();
				}
				if (button.value = "Stoppen"){
					stopSound();
				}
			}
		</script>
	</head>
	<body>
		<center>
			<embed src="Musikdatei.wma" autostart="false" loop="false" hidden="" name="sound">
			<br>
			<input type="button" name="button" value="Abspielen" onclick="playSound();" onmouseup="check();">
		</center>
	</body>
</html>

Jetzt wird die Musikdatei gestartet (beim loslassen des Buttons, was doch komisch ist: der Befehl "playSound();" wird doch durch "onclick" gefordert, also beim draufklicken... ?()
Wenn jetzt erneut auf den Button geklickt wird und man lässt los, wird der Sound gestoppt, beginnt aber wieder beim Loslassen von Vorne. Wenn man dagegen einen Doppelklick auf den "Stoppen-Button" ausführt, wird der Sound erfolgreich gestoppt und kann wieder mit "Abspielen" normal gestartet werden.

@Fabian: Ich hoffe, ich hab mich nicht zu kompliziert ausgedrückt... :P
_________
EDIT:
Ich habe vergessen zu sagen, dass mir klar ist, warum der Sound gestoppt wir und danach wieder von Vorne beginnt, dafür ist "onmouseup="check();" verantwortlich... aber ich bekomme es nicht hin, dass der Sound trotzdem nicht wieder Startet...
Grüße,
Daniel

>>>http://www.fsghannsklemm.de<<<
My software never has bugs. It just develops random features... xP

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Daniel« (2. April 2008, 20:14)


6

Mittwoch, 2. April 2008, 22:11

Hallo,

warum startest Du den Funktionsaufruf nicht einfach so: <input type="button" name="button" value="Abspielen" onclick="check();">

Führt das zum gewünschten Ergebnis?

Ansonsten befürchte ich habe ich Dich nicht richtig verstanden^^

Sollte es immer noch nicht klappen: Du hast nicht zufällig online eine Demo davon?

Viele Grüße,
Fabian Karg

>>> www.flf-book.de
Zufrieden mit Service und Support? Dann schau Dir doch mal die Premiumfeatures an ;)

7

Mittwoch, 2. April 2008, 22:34

Oh, onclick="click();" ist ein Tippfehler von mir, hätte natürlich onclick="check();" heißen sollen... funktioniert aber leider trotzdem nicht, obwohl die Logik des Scriptes einleuchtet und trotzdem tut sich nix, die Datei wird nicht einmal gestartet.

Onlineversion: --- Vom Server genommen... ---

Danke für die Bemühungen!!! ;)
Grüße,
Daniel

>>>http://www.fsghannsklemm.de<<<
My software never has bugs. It just develops random features... xP

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Daniel« (4. April 2008, 12:21)


8

Donnerstag, 3. April 2008, 10:49

Hallo Increase,

wenn Du den Button mit 2 Eventhandlern belegst, weiß das Script ja gar nicht, was es machen soll. X( 8o ?( ;( :(

So rein gefühlsmäßig sollte es funktionieren, wenn mit onclick() immer die gleiche Funktion aufgerufen wird und diese dann testet, ob play oder stop folgen soll. Allerdings funktioniert die Abfrage von button.value dafür nicht (zumindest bei mir - ich weiß nicht, wie ich's hinbringen soll).

Da ich der unheimliche JavaScript-Freak bin :) :) :) :) :) habe ich das Web nach einer solchen Funktion ausgequetscht, etwas modifiziert, reorganisiert, interpretiert und variiert. 8)

Herausgekommen ist dies:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<html>
<head>
<script type="text/javascript">
var merker = 1
function Check($Zahl)
  {
  if($Zahl%2!=0)
    {
    button.value = "Stoppen";
    document.sound.play();
    merker = merker - 1;
    }
    else
      {
      button.value = "Abspielen";
      document.sound.stop();
      merker = merker + 1;
      }
  }
</script>
</head>
<body>
  <center>
    <embed src="Say No.wma" autostart="false" loop="false" hidden="" name="sound" MASTERSOUND>
    <br/>
    <input type="button" name="button" value="Abspielen" onclick="Check(merker)">
    <br/>
    <br/>
  </center>
</body>
</html>

Der Merker wird mit 1 initialisiert und dann von der Funktion je nach play oder stop auf 1 oder 0 gesetzt. Durch den Merker weiß das Script immer, ob die Musik gerade spielt oder nicht.

Die besten Grüße von Uwe

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Mister« (3. April 2008, 10:55)


9

Donnerstag, 3. April 2008, 16:45

Das war vom Prinzip her auch mein Gedankengang. Mir war nur nicht beuwsst, dass die Abfrage button.value nicht klappt ;)

Viele Grüße,
Fabian Karg

>>> www.flf-book.de
Zufrieden mit Service und Support? Dann schau Dir doch mal die Premiumfeatures an ;)

10

Donnerstag, 3. April 2008, 16:51

Hallo Uwe,

DANKE für das Script!!! =)
Ich hätte da wohl noch etwas länger daran herumgebastelt bis es vieleicht funktioniert hätte...

Zitat

wenn Du den Button mit 2 Eventhandlern belegst, weiß das Script ja gar nicht, was es machen soll. X( 8o ?( ;( :(

-> ich beschäftige mich noch nicht sehr lange mit Javascript und habe die Grundlagen nur kurz überflogen ^^ ... aber jetzt habe ich ja wieder etwas dazugelernt.
Grüße,
Daniel

>>>http://www.fsghannsklemm.de<<<
My software never has bugs. It just develops random features... xP

11

Donnerstag, 3. April 2008, 17:56

Hallo ihr zwei,

@Increase: Denke nicht, dass ich nicht lange daran herumgebastelt habe!

Direkt beschäftigt mit JavaScript habe ich mich auch noch nicht, deshalb auch die vielen Smilies hinter JavaScript-Freak. Ich habe schon mit einer Reihe von Programmiersprachen gebastelt und meinte, das wäre doch recht leicht hinzubekommen. Dass aber die Abfrage if (button.value = "XXX") beim Aufruf der Check-Funktion nur jeweils ein Mal funktioniert hat, hat mich schon etwas verwundert. Danach kam ich auf die Idee mit dem Merker. Meine erste Variante mit merker = 1; und merker = 0; schien irgendwie eine lokale Variable merker in der Funktion Check() zu verwenden, was deshalb leider nicht funktionierte. Durch merker = merker + 1; wurde anscheinend die (richtige) globale Variable merker benutzt, damit funktionierte es zufriedenstellend. Übrigens geht auch merker++; (anstelle der Zeilen 11 und 17 - ein paar Zeichen eingespart). Mit der +/- Variante muss die Abfrage auch nicht auf gerade/ungerade auswerten, es würde wohl reichen, auf 0/1 zu prüfen. Mir fällt da gerade noch was ein, was ich gleich noch mal ausprobieren muss.

Bin gleich wieder da.

Die besten Grüße von Uwe

12

Donnerstag, 3. April 2008, 18:25

Aus irgendeinem blöden Grund funktioniert der ELSE-Zweig nicht, wenn man auf Gleichheit prüft (s. u.). Habe mich trotz Warnung meines Informatiklehrers verleiten lassen, auf Gleichheit zu prüfen, stand ja schon so da, nicht wahr?

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Check()
  {
  if (button.value = "Abspielen")
    {
    button.value = "Stoppen";
    document.sound.play();
    }
    else
      {
      button.value = "Abspielen";
      document.sound.stop();
      }
  }
</script>

Wenn es nicht notwendig ist, sollte man dies wohl nicht tun und anstelle dessen lieber auf Ungleichheit prüfen, was auch sofort funktioniert. Damit kann dann der Merker wieder entfallen und man hat nicht nur einen funktionierenden Code, sondern auch einen schönen. Wenn Du willst, kannst Du sogar noch eine andere Startbeschriftung definieren (s. u.) Eine feste Breite für die Taste kommt auch ganz gut.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<html>
<head>
<script type="text/javascript">
function Check()
  {
  if (button.value != "Stoppen")
    {
    button.value = "Stoppen";
    document.sound.play();
    }
    else
      {
      button.value = "Abspielen";
      document.sound.stop();
      }
  }
</script>
</head>
<body>
  <center>
    <embed src="Say No.wma" autostart="false" loop="false" hidden="" name="sound" MASTERSOUND>
    <br/>
    <input type="button" name="button" style="width:200px" value="Lied hier abspielen" onclick="Check()">
    <br/>
    <br/>
  </center>
</body>
</html>

Die besten Grüße von Uwe

13

Donnerstag, 3. April 2008, 19:07

Ja, so hat mir das Fabian gegeben, glaube ich ^^:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
function Check()
  {
  if (button.value = "Abspielen")
    {
    button.value = "Stoppen";
    document.sound.play();
    }
    else
      {
      button.value = "Abspielen";
      document.sound.stop();
      }
  }

@Fabian: Wenn's nicht so is: sry :D :P ;)

Das mit "nur auf Ungleichheit prüfen" ist ein guter Tipp! :)
Jetzt weis ich, an wen ich mich wenden muss, wenn ich wieder Probleme hab mit Javascript texten :D

DANKE nochmal ;)
Grüße,
Daniel

>>>http://www.fsghannsklemm.de<<<
My software never has bugs. It just develops random features... xP

14

Donnerstag, 3. April 2008, 20:43

Zefix, jetzt kann ich mir auch denken, warum obiger Code nicht funktioniert hat ;) Der Operator war schlicht und ergreifend falsch!

FALSCH: if (button.value = "Abspielen")
RICHTIG: if (button.value == "Abspielen")

Liebe Grüße,
Fabian Karg

>>> www.flf-book.de
Zufrieden mit Service und Support? Dann schau Dir doch mal die Premiumfeatures an ;)

15

Donnerstag, 3. April 2008, 21:12

Zwei Gleichheitszeichen?! That's it! Javascript-Kenner werden jetzt wahrscheinlich etwas schmunzeln. Vielleicht sollte man doch erst ein paar Grundlagen erlernen, bevor man so einfach "herumprogrammiert" (völlige Selbstüberschätzung bei totaler Ahnungslosigkeit :])

Der Erfolg gab mir aber doch recht, oder?

Die besten Grüße von Uwe

16

Donnerstag, 3. April 2008, 21:43

Ohh ja :D

Zitat

erst ein paar Grundlagen erlernen, bevor man so einfach "herumprogrammiert" (völlige Selbstüberschätzung bei totaler Ahnungslosigkeit :])

Ich glaube, das trifft voll auf mich zu :D
Grüße,
Daniel

>>>http://www.fsghannsklemm.de<<<
My software never has bugs. It just develops random features... xP

17

Donnerstag, 3. April 2008, 23:28

Bei JavaScript trifft das bei mir aber auch zu ;) Ich probiere mehr herum als ich wirklich kann :D

Lg,
Fabian
Zufrieden mit Service und Support? Dann schau Dir doch mal die Premiumfeatures an ;)

Thema bewerten