Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Botón de play/pause para poder aplicarles css

Estas en el tema de Botón de play/pause para poder aplicarles css en el foro de Javascript en Foros del Web. Hola amigos, tengo un botón en mi web que activa un audio en streaming. Antes de pulsar muestra una imagen de un play y al ...
  #1 (permalink)  
Antiguo 19/07/2015, 03:07
Avatar de Luisa29  
Fecha de Ingreso: enero-2013
Mensajes: 193
Antigüedad: 11 años, 2 meses
Puntos: 4
Pregunta Botón de play/pause para poder aplicarles css

Hola amigos, tengo un botón en mi web que activa un audio en streaming. Antes de pulsar muestra una imagen de un play y al activar la reproducción el botón cambia a pause. Como el código js lo que hace es cambiar una imagen por otra me gustaría que en vez de imagen fuesen botones hechos desde cero con css tanto el play como el pause. ¿Cómo podría modificar el código para ello?


Código js:
Código:
<script type="text/javascript">
   var audio, playbtn, mutebtn, seek_bar;
function initAudioPlayer(){
	audio = new Audio();
	audio.src = "http://streaming-audio";
	audio.loop = true;
	audio.play();
	// Set object references
	playbtn = document.getElementById("playpausebtn");
	// Add Event Handling
	playbtn.addEventListener("click",playPause);
	// Functions
	function playPause(){
		if(audio.paused){
		    audio.play();
		    playbtn.style.background = "url(pausa.png) no-repeat";
	    } else {
		    audio.pause();
		    playbtn.style.background = "url(play.png) no-repeat";
	    }
	}

}
window.addEventListener("load", initAudioPlayer);


    </script>
Código css:


Código:
	button{ border:none; cursor:pointer; outline:none; }
button#playpausebtn{
	background:url(pausa.png) no-repeat;
	width:68px;
	height:68px;
}
HTML:

Código:
 <button id="playpausebtn"></button>
A ver si me podéis echar una manita, tengo poca idea de js.
  #2 (permalink)  
Antiguo 19/07/2015, 06:15
 
Fecha de Ingreso: diciembre-2011
Mensajes: 98
Antigüedad: 12 años, 4 meses
Puntos: 29
Respuesta: Botón de play/pause para poder aplicarles css

Vale, yo lo que haría sería crear dos clases una para el button play y la otra para el button pause y luego las cambiaría en JS.

Primero de todo, crea dos classes en CSS una para play y otra para pause:
Código CSS:
Ver original
  1. .pause {
  2. /*Aqui el css que quieres aplicar al boton en modo pause*/
  3. }
  4.  
  5. .play {
  6. /*Aqui el css que quieres aplicar al boton en modo play*/
  7. }

Luego para conseguir cambiarlos con JS hazlo así:

Código Javascript:
Ver original
  1. ...
  2.     function playPause(){
  3.         if(audio.paused){
  4.             audio.play();
  5.             playbtn.setAttribute("class", "pause");
  6.         } else {
  7.             audio.pause();
  8.             playbtn.setAttribute("class", "play");
  9.         }
  10.     }
  11.  
  12. ...
  #3 (permalink)  
Antiguo 19/07/2015, 12:02
Avatar de Luisa29  
Fecha de Ingreso: enero-2013
Mensajes: 193
Antigüedad: 11 años, 2 meses
Puntos: 4
Respuesta: Botón de play/pause para poder aplicarles css

nilburcion muchísimas gracias. Ahora parece que hay un error, al abrir la página no se muestra el botón, pero al acercar el ratón y pinchar aparece y ya funciona correctamente.
Es muy raro, a ver si he puesto algo mal, aquí te paso como lo he puesto:

Código:
button{ border:none; cursor:pointer; outline:none; }

}

.pause {
	background:url(pausa-sobre.png) no-repeat;
	width:68px;
	height:68px;
	}
.play {
	background:url(play-sobre.png) no-repeat;
	width:68px;
	height:68px;
	
	}
Código:
<script type="text/javascript">
  var audio, playbtn, mutebtn, seek_bar;
function initAudioPlayer(){
    audio = new Audio();
    audio.src = "http://streaming-audio";
    audio.loop = true;
    audio.play();

    // Set object references
    playbtn = document.getElementById("playpausebtn");

    // if it's not playing after calling play(), show the other icon
    if(audio.paused) {
        playbtn.setAttribute("class", "pause");        
    }

    // Add Event Handling
    playbtn.addEventListener("click",playPause);
    // Functions
    function playPause(){
        if(audio.paused){
            audio.play();
            playbtn.setAttribute("class", "pause");
        } else {
            audio.pause();
            playbtn.setAttribute("class", "play");
        }
    }

}
window.addEventListener("load", initAudioPlayer);
    </script>

Última edición por Luisa29; 19/07/2015 a las 12:10
  #4 (permalink)  
Antiguo 19/07/2015, 15:16
 
Fecha de Ingreso: diciembre-2011
Mensajes: 98
Antigüedad: 12 años, 4 meses
Puntos: 29
Respuesta: Botón de play/pause para poder aplicarles css

No se a mí me funciona bien en una Mac OSX 10.11 con Chrome v.43 lo puse en un JSFiddle cambié sólo una línea (la 12) fijate. Prueba a ver si te va con este código a mi desde luego si:

https://jsfiddle.net/r9pgj1sg/

Si te sigue sin funcionar que sistema operativo y que navegador usas?

Suerte
  #5 (permalink)  
Antiguo 19/07/2015, 15:31
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Botón de play/pause para poder aplicarles css

También puedes usar solo CSS para la elaboración y control visual del botón. Por ejemplo, los elementos <input> pueden ser marcados y desmarcados (checkbox, los radio button solo pueden ser marcados) o tomar el enfoque (text) cuando se da un clic en un elemento <label> cuyo atributo for posee como valor el id del <input> en cuestión.

Sabiendo esto, puedes usar un <label> como botón y un <input> de tipo checkbox para dos cosas: Determinar cuál será el texto que se mostrará en el botón y qué acción se ejecutará; si reproducir el sonido o pausarlo. Para el control del texto del botón, puedes usar el pseudo-elemento :before y la propiedad content, mientras que para la ejecución de la instrucción en JavaScript, puedes delegar una función al checkbox cuando este sea marcado o desmarcado, produciéndose el evento change.

Un pequeño ejemplo:

Código HTML:
Ver original
  1. <input type = "checkbox" id = "audio" />
  2. <label id = "boton" for = "audio"></label>

Código CSS:
Ver original
  1. #audio{
  2.     display: none;
  3. }
  4.  
  5. #boton{
  6.     padding: 2.5% 5%;
  7.     background: limegreen;
  8.     color: snow;
  9.     font-size: 1.25rem;
  10.     border: .1rem #FAFAD2 solid;
  11.     border-radius: .75rem;
  12.     cursor: pointer;
  13.     user-select: none;
  14.     -webkit-user-select: none;
  15.     -moz-user-select: none;
  16.     -o-user-select: none;
  17.     transition: .5s;
  18. }
  19.  
  20. #boton:active, #audio:checked ~ #boton{
  21.     background: lightcoral;
  22. }
  23.  
  24. #boton:before{
  25.     content: "Play"
  26. }
  27.  
  28. #audio:checked ~ #boton:before{
  29.     content: "Pause";
  30. }

Código Javascript:
Ver original
  1. var play = function(){
  2.         console.log("El sonido se está reproduciendo");
  3.         /* Aquí irá el script para reproducir el sonido */
  4.     },
  5.     pause = function(){
  6.         console.log("El sonido ha sido pausado");
  7.         /* Aquí irá el script para pausar el sonido */
  8.     };
  9.  
  10. document.querySelector("#audio").addEventListener("change", function(){
  11.     if (this.checked){
  12.         play();
  13.     }
  14.     else{
  15.         pause();
  16.     }
  17. }, false);

Como verás, oculto al checkbox y le aplico estilos al <label> para que tome una forma similar a la de un botón de forma rectangular. Mediante la pseudo-clase :checked, puedo trabajar con el checkbox cuando esté marcado y cuando esto suceda, afecto al botón, modificando su texto que previamente establecí mediante el pseudo-elemento :before y la propiedad content.

En cuando al script de JavaScript, defino las funciones que ejecutarán la reproducción y pausado del sonido, luego, tomo al checkbox y cuando se produzca un "cambio" en él, ejecuto una función en la cual verifico si está marcado o no y de acuerdo a eso ejecuto una función u otra.

DEMO

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 30/07/2015, 11:14
Avatar de Luisa29  
Fecha de Ingreso: enero-2013
Mensajes: 193
Antigüedad: 11 años, 2 meses
Puntos: 4
Respuesta: Botón de play/pause para poder aplicarles css

Muchísimas gracias a ambos, perdón por haber tardado en contestar, ambas soluciones perfectas.

Etiquetas: css, html, js, poder
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:26.