Foros del Web » Programando para Internet » Javascript »

Cómo hacer botones que al pasar el ratón se iluminen y si pulsas se marquen??

Estas en el tema de Cómo hacer botones que al pasar el ratón se iluminen y si pulsas se marquen?? en el foro de Javascript en Foros del Web. Hola a todos de nuevo. Como parece que este foro me ha ayudado mucho, ahí va otra preguntita. En esa misma página uno de los ...
  #1 (permalink)  
Antiguo 01/02/2003, 16:59
 
Fecha de Ingreso: enero-2003
Ubicación: San Fernando (Cádiz)
Mensajes: 13
Antigüedad: 21 años, 3 meses
Puntos: 0
Cómo hacer botones que al pasar el ratón se iluminen y si pulsas se marquen??

Hola a todos de nuevo. Como parece que este foro me ha ayudado mucho, ahí va otra preguntita.

En esa misma página uno de los marcos es una barra de navegación.

Quiero que al pasar el ratón por encima de un dibujo se cambie a otro y se ilumine el texto de al lado. Eso pasando el ratón por encima y además si pulsas en la opción se marca y así sabes en qué parte de la página estás.

Yo tengo un menú donde cada opción en texto tiene a su izquierda un gráfico de un bullet rojo que hace de enlace y al pulsarlo cambiaría a verde (con el gráfico adecuado) y se quedaría dicho botón encedido. Escogí un bullet rojo y otro verde al estilo de los semáforos.

No sé si esto es de Javascript o de HTML. ¿Cómo sería el código?
Saludos y gracias de nuevo. (Creo que de momento será la última pregunta).
  #2 (permalink)  
Antiguo 01/02/2003, 18:23
Avatar de Ludwingg  
Fecha de Ingreso: diciembre-2002
Ubicación: San Salvador
Mensajes: 951
Antigüedad: 21 años, 4 meses
Puntos: 5
creo que deberias intentar hacerlos con flash...es mas facil
ctrl+f8>boton
y le das la animacion que quieres en reposo, sobre, etc
  #3 (permalink)  
Antiguo 01/02/2003, 18:47
 
Fecha de Ingreso: noviembre-2001
Ubicación: Rafaela
Mensajes: 200
Antigüedad: 22 años, 5 meses
Puntos: 0
Si quieres simplificar tu vida, hazlo en flash, no es que un buen java no lo solucione, pero te veo lidiando con la programacion.
__________________
surco§
http://www.escombros.8k.com
  #4 (permalink)  
Antiguo 01/02/2003, 23:31
 
Fecha de Ingreso: enero-2003
Ubicación: Madrid
Mensajes: 54
Antigüedad: 21 años, 3 meses
Puntos: 0
Si estás trabajando con Dream Weaver, mira las opciones que tienes en "Imagenes de sustitución"
  #5 (permalink)  
Antiguo 02/02/2003, 05:40
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola salvi992:

Si trabajas con el block de notas pon algo así:

<html>
<body>
<input type=button
style="background-color:#eeeeee;border-style:outset"
onmouseover="this.style.backgroundColor='white'"
onmouseout="this.style.backgroundColor='#eeeeee'"
onclick="this.style.borderStyle='inset';alert('¡Ho la!')"
value="Prueba de botón">
</body>
</html>

Saludos
  #6 (permalink)  
Antiguo 02/02/2003, 10:41
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Hola de nuevo, Salvi.

Si te entendí bien quieres que al pasar el mouse sobre una imagen de tipo bullet cambie a otra y a la vez cambie el texto que tiene al lado, al retirar se restaure y al pinchar la imagen quede esta última.

Desde luego como comentaron por ahí arriba hacerlo en flash se podría hacer muy bien, aunque también daría problema porque los buttons de flash al retirar el mouse se restauran a la imagen inicial.

A ver si algo así te sirve. Ni te fijes en los colores, no tendrías más que cambiar las imágenes y los colores a los textos.

Probar

Ya me comentás algo

saludos
  #7 (permalink)  
Antiguo 02/02/2003, 10:43
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
por cierto....

... efectivamente esta pregunta estará mejor en el foro de javascript


Movido para allá
  #8 (permalink)  
Antiguo 02/02/2003, 16:35
 
Fecha de Ingreso: enero-2003
Ubicación: San Fernando (Cádiz)
Mensajes: 13
Antigüedad: 21 años, 3 meses
Puntos: 0
De acuerdo De bien nacido es ser agradecido...

De nuevo gracias a todos por vuestros buenos consejos. Efectivamente quería algo así Tunait.

Aunque desde luego, las aportaciones del resto no caerán en saco roto. Estudiaré en cuanto pueda el Javascript. Yo digo que soy aspirante a informático (IT Informática de Gestión en Cádiz) y a medio plazo me vendrá bien y desde luego también el Flash.

Lo único malo de la informática es que no te da tiempo de asimilar algo cuando ya viene otra cosa.

Os dejo, que mañana tengo un examen. De IA.
  #9 (permalink)  
Antiguo 08/02/2003, 12:11
 
Fecha de Ingreso: enero-2003
Ubicación: San Fernando (Cádiz)
Mensajes: 13
Antigüedad: 21 años, 3 meses
Puntos: 0
Casi me sale (pero no se queda el botón marcado)

Hola tunait. A propósito de mi pregunta, resulta que no entendía el código que me diste. Y realmente, no termino de entenderlo (aunque algo sí ya, porque se parece mucho a C++). Me he buscado un curso de Javascript y he encontrado el siguiente código (adaptado a mi página):

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Pagina nueva 1</title>
<SCRIPT LANGUAGE="JavaScript">
var enlacillos=8;
if (document.images) {
var activado=new Image();
activado.src="./greenball.gif";
var desactivado= new Image();
desactivado.src="./redball.gif";
}
function iluminar(nombreImagen) {
if (document.images) {
document[nombreImagen].src=activado.src; }
}
function apagar(nombreImagen) {
if (document.images) {
document[nombreImagen].src=desactivado.src; }
}

function cambioseccion(nombreImagen)
{
for(m=1; m <= enlacillos; m++)
{

document[nombreImagen].src=desactivado.src;
}
document[nombreImagen].src=activado.src;

}


</SCRIPT>
<base target="principal">
</head>
<body background="color20.jpg">

<A HREF="intro.htm" onMouseOver="iluminar('prueba');"
onMouseOut="apagar('prueba');" onClick="cambioseccion('prueba');">
<IMG NAME="prueba" id='ima1' SRC="./redball.gif" BORDER="0" width="20" height="15">
</A>


Pues me sale lo de cambiar el color al bullet (de rojo a verde), pero no se me queda el cambio. Mi menú de navegaci´´on consta de 9 botones (y no cuatro) aunque uno es para ir del tirón al gestor de correo que sea.

En tu código había un for(m=1; m<=enlacillos;m++) en el que primero se ponía los bullets a rojo y después del for se ponia en verde el que fuese.

por medio de ('ima' + enlace). No lo he puesto porque no lo entiendo. Aunque si es como C++ es la concatenación de cadenas. ¿Qué es el getElementbyId?. Y luego hay otra cosa que no entiendo y es lo del text/css y por eso no lo he puesto. ¿3 enlaces? ¿e1, e2, e3, e4? Supongo que son el texto que viene al lado del botón. Me gustaría poner el texto (del tipo y color de letra que quisiera) pero sin que se note que es un enlace (que no estuviera subrayado).

¿Me lo podrías modificar para que funcionara? (Se quede el cambio). Si es posible, a ver si lo comentas un poco más. Sobre todo las funciones.

De hecho me he mirado algún documento online sobre javascript, pero no termino de entender algunas cosas. No sólo hay que poner un conjunto de opciones, sino también algunos usos habituales que permita ver su utilidad y en eso fallan casi todos.

Un saludo y de nuevo gracias.
  #10 (permalink)  
Antiguo 08/02/2003, 18:29
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Holas

El script que propones es un simple rollover, por eso se te queda a medias. Te pone una imagen inicial y en el evento onmouseover te lo cambia por otra imagen y en el evento onmouseout te vuelve a poner la que había.
Cita:
¿Me lo podrías modificar para que funcionara?
Como poder podría y el resultado sería que quedaría como el script que hice, así que mejor te explico cómo funciona.

Lo hice pensando en 3 imágenes o bullets. Si se quieren usar sólo dos es cuestión de llamar a la misma imagen en dos eventos.

Como queremos que la acción afecte además de a la imagen al texto de al lado, damos un identificador a cada uno de los textos a los que querremos cambiar el aspecto. Para ellos usamos los css que nos permite agrupar bajo un solo nombre tantos cambios en el aspecto como necesitemos. Así creamos 3 grupos (clases)de "aspectos" para cada momento del texto-enlace:

<style type="text/css">
<!--
.enlace1 { font-family: Tahoma, Verdana, Arial; font-weight: bold; color: #336699}
.enlace2 { font-family: Tahoma, Verdana, Arial; font-weight: bold; color: #6699CC }
.enlace3 { font-family: Tahoma, Verdana, Arial; font-weight: bold; color: #CC9900}
-->
</style>

.enlace1 será el aspecto que tendrá el texto en estado de "reposo"
.enlace2 guarda el aspecto que tendrá el texto en el momento en el que pasemos el ratón por encima de la imagen correspondiente.
.enlace3 el aspecto que tendrá el texto en el momento en que hayamos seleccionado esa opción y que quedará permanente mientras no pinchemos en otra opción.
El que estén sub-rayados o no o tenga un aspecto u otro yá es cuestión de aplicarlo a nuestro gusto, no tiene mayor problema.

Así inicialmente los textos llevan aplicados unos formatos agrupados dentro de la clase .enlace1

<a href="#" class="enlace1" id="e1" onMouseDown="cambia2(1,1)">
Enlace1</a>

Luego ante eventos cambiamos la clase aplicada a ese texto y logramos esos cambios de aspecto que, según los colores que hayamos aplicado pretenden dar ese efecto como de iluminación (relativo)
Si no quieres que se vean sub-rayados basta con que agregues a cada clase el dato:

.enlace1 { font-family: Tahoma, Verdana, Arial; font-weight: bold; color: #336699 ; text-decoration:none}

Las imágenes:

Queremos que al pasar el ratoncillo por encima de la imagen ésta cambie por otra. Claro que además queremos que ocurra un cambio de aspecto en el texto contíguo, así que agrupamos en una función las instrucciones:

function cambia(cual,enl)
{
document.getElementById(cual.id).src='bolitaroja.g if'
document.getElementById(enl).className='enlace2'
}

Al llamar a la función desde la imagen pasamos el dato de a qué dos elementos queremos aplicar cambios. cual guarda a qué imagen se aplica, enl a qué enlace.

getElementById ¿qué significa? pues yá lo dice el nombre. Obtener o encontrar a un elemento mediante su id (identificador).

<img id="ima1" src="bolitaamarilla.gif" width="10" height="10" border="0" onMouseOver="cambia(this,'e1')" onMouseOut="restaura(this,'e1')" onMouseDown="cambia2(1,1)">

cambia(this,'e1') ahí le hemos pasado el dato de que la función se aplique a si misma y al elemento de id 'e1' (el enlace de al lado)

Pero sucede que la función será llamada tanto cuando esté en estado "reposo" como cuando esté en estado "seleccionado" y quiero que trate a los enlaces en forma diferente dependiendo del estado en el que se encuentren.
Si está en reposo, quiero que cambie el aspecto del texto. Pero si está "seleccionado" quiero que deje el texto como está (pa que se vea que está seleccionado) así que añado unos condicionales.

¿cómo puedo saber si está en un estado u otro? verificando qué clase tiene aplicada el texto en ese momento.

if(document.getElementById(enl).className=='enlace 3')

Si el enlace que pasamos como argumento está en la clase enlace3 está en momento "seleccionado" así que no quiero que cambie el texto, pero sí la imagen:

{document.getElementById(cual.id).src='bolitaroja. gif'}

Si no está en en ese estado, le pido que además de la imagen me cambie el aspecto al texto

else{
document.getElementById(cual.id).src='bolitaroja.g if'
document.getElementById(enl).className='enlace2'
}

Así la función queda como

function cambia(cual,enl)
{
if(document.getElementById(enl).className=='enlace 3')
{document.getElementById(cual.id).src='bolitaroja. gif'}
else{
document.getElementById(cual.id).src='bolitaroja.g if'
document.getElementById(enl).className='enlace2'
}
}

OK, vamos a por la siguiente función. La que restaura la imagen y la clase del texto al sacar el ratoncillo de encima.

function restaura(cual,enl)
{
cual.src='bolitaamarilla.gif'
document.getElementById(enl).className='enlace1'
}

Pasamos los mismos argumentos: id de imagen e id del texto al que queremos cambiar la clase.

PERO.

Cuando hagamos click se aplicará una instrucción similiar pero tras hacer el click y cambiar la imagen ¿qué hacemos? sacar el ratón de encima, con lo que se llama de nuevo a la función restaurar y se nos queda de nuevo la imagen inicial y el texto con la clase 1.

Así que tendremos que verificar de nuevo en qué momento o estado se encuentra la imagen y texto. Otra vez verificamos mediante la clase que tenga el texto aplicada.

¿Que la clase que tiene es la 1 (estado reposo)? onmouseout cambia a una imagen y a una clase (al estado reposo). ¿que la clase es la 3 (estado seleccionado)? onmouseout cambia sólo la imagen pero a otra (estado seleccionado) y el texto queda en la clase 3


function restaura(cual,enl)
{
if(document.getElementById(enl).className=='enlace 3')
{cual.src='bolitaazul.gif'}
else{
cual.src='bolitaamarilla.gif'
document.getElementById(enl).className='enlace1'
}

Al hacer click.

Hacer que la imagen que llama a la función cambie junto con el texto correspondiente es más de lo mismo. El tema está en qué pasará cuando haga click en el siguiente enlace o imagen? que quedarán dos en el estado "seleccionado". Como la idea es que sólo se vea uno seleccionado, necesitamos "resetear" cualquier imagen y texto que pudiera estar en ese momento en estado seleccionado. Así que creamos un bucle que uno a uno repase las imágenes y los textos que repasará tantos elementos como enlaces/imagenes tenemos. Como no sé si en la misma página habrán otros enlaces que no deban verse afectados por el script en lugar de pedirle que repase todos los enlaces (igual quieres actuar en 8 pero resulta que tienes 10) lo que hacemos es guardar el número de enlaces en una variable y lo ponemos a mano: var enlacillos=8

Por supuesto, cada imagen y texto llevará su identificador que será la misma palabra mas un número.


function cambia2(cual,enl)
{
for(m=1;m<=enlacillos;m++)
{
document.getElementById('e' + m).className="enlace1"
document.getElementById('ima' + m).src="bolitaamarilla.gif"
}
Así en la primera vuelta buscará el elemento cuyo id sea 'e' + m (que resulta en 'e1') y le aplica la clase 1 (estado reposo) y además buscará todos los elementos cuyo id sea 'ima' + m ('ima1') y le pondrá la imagen del estado reposo.

Cuando los ha reseteado todos, le aplica el estado seleccionado al elemento que llamó a la función y al texto correspondiente.

document.getElementById('ima' + cual).src='bolitaazul.gif'
document.getElementById('e' + enl).className='enlace3'

}

De forma que la función queda como:


function cambia2(cual,enl)
{
for(m=1;m<=enlacillos;m++)
{
document.getElementById('e' + m).className="enlace1"
document.getElementById('ima' + m).src="bolitaamarilla.gif"
}
document.getElementById('ima' + cual).src='bolitaazul.gif'
document.getElementById('e' + enl).className='enlace3'

}

Finalmente nos queda hacer las llamadas a estas 3 funciones desde cada elemento:

<a href="#"><img id="ima1" src="bolitaamarilla.gif" width="10" height="10" border="0" onMouseOver="cambia(this,'e1')" onMouseOut="restaura(this,'e1')" onMouseDown="cambia2(1,1)"></a><a href="#" class="enlace1" id="e1" onMouseDown="cambia2(1,1)">

Si te fijas el texto no llama a las funciones al pasar el ratón por encima (se encarga la imagen de alterar el aspecto del texto) pero si se hace click en el enlace en lugar de en la imagen, es también necesario que el aspecto de ambos cambien para indicar que están en estado seleccionado.

onMouseDown="cambia(1,1)" los argumentos que pasamos a la función son la única parte de los identificadores que cambia.

Si lo que quieres es usar sólo dos imágenes, no tienes más que cambiar los nombres de la tercera imagen al de la segunda.

Uf, he tratado de explicarlo lo mejor que he podido. Si algo no te queda claro tú pregunta

Ala, yá me dirás algo.

Un saludo
  #11 (permalink)  
Antiguo 09/02/2003, 16:01
 
Fecha de Ingreso: enero-2003
Ubicación: San Fernando (Cádiz)
Mensajes: 13
Antigüedad: 21 años, 3 meses
Puntos: 0
Para tunait.

Hola tunait.

Ya sé que me repito mucho, pero tengo que darte por n-ésima vez las gracias. Espero darle un buen uso, pero después del enorme despliegue de explicaciones (que espero que ya sean suficientes), es lo mínimo que puedo hacer.

Bueno, otra cosa sí puedo hacer y es que cuando haga ya la dichosa página web, te daré la dirección. (Ya me dirás cómo mandarte un mensaje privado a tu cuenta personal sin tener que ponerla en el foro). La mía aparece en un mensaje anterior.

Tengo una personal en www.iespana.es pero temporalmente no está disponible por problemas técnicos que parece que han tenido. Así que de momento, no podrás verla.

Ya te la diré. El enésimo saludo. Espero no ser más "pesaíto", que tal vez ya estás (estáis) hartos de mí.

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 04:40.