¿Cómo rellenar cada circulo al pasar el mouse encima? – javascript jquery html

Pregunta:


¡Hola! Estoy practicando jQuery, y me gustaría poder hacer como un ranking. A lo que quiero llegar es que cada vez que el mouse pase sobre cada círculo se rellene hasta donde lo pongo.

Es decir, tengo 5 circulos, si pongo el mouse en el tercer círculo, me gustaría que se rellenará de un color hasta el tercero. Si lo pongo en el primer círculo, que se rellene solo el primero y así…

Aún no logro como hacerlo, les dejo un ejemplo más claro de lo que me gustaría que hiciera en el siguiente enlace, clic aquí.

$(function () {
	$('.rating-circle').mouseover(function(){
		$('.rating-circle').addClass('rating-hover');
	}).mouseleave(function(){
		$('.rating-circle').removeClass('rating-hover');
	});
});
body {
	   font-family: Verdana;
	  }
	  h1, h2, h3 {
	   color: darkblue;
	  }
	  .rating-circle {
	   height: 2em;
	   width: 2em;
	   border: .1em solid black;
	   border-radius: 1.1em;
	   display: inline-block;
	   margin: 0;
	   padding: .1em;
	  }

	  .rating-hover {
	   background-color: yellow;
	  }

	  .rating-chosen {
	   background-color: green;
	  }
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Piedra, Papel o Tijera :)</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
</head>
<body>
	<div class="container">
        <h1 class="page-header">Rating</h1>
		<div id="rating-container">
			<div class="rating-circle"></div>
			<div class="rating-circle"></div>
			<div class="rating-circle"></div>
			<div class="rating-circle"></div>
			<div class="rating-circle"></div>
	 	</div>
	</div>
</body>
</html>
Preguntado por: Hoose

Shaz

La forma más sencilla con jquery y el código que tienes, es usando prevAll() y addBack(), por medio de los cuales:

  • .prevAll() encuentra los elementos anteriores en el DOM, en el mismo nivel del elemento o selector.
  • .addBack() “llama” al elemento anterior seleccionado por un recorrido del DOM, y lo agrega a la colección actual. En este caso permite agregar el elemento actual, por el cual inicia la búsqueda $(this)
$(function () {
	$('.rating-circle').mouseover(function(){
		$(this).prevAll().addBack().addClass('rating-hover');
	}).mouseleave(function(){
		$(this).prevAll().addBack().removeClass('rating-hover');
	});
});
body {
	   font-family: Verdana;
	  }
	  h1, h2, h3 {
	   color: darkblue;
	  }
	  .rating-circle {
	   height: 2em;
	   width: 2em;
	   border: .1em solid black;
	   border-radius: 1.1em;
	   display: inline-block;
	   margin: 0;
	   padding: .1em;
	  }

	  .rating-hover {
	   background-color: yellow;
	  }

	  .rating-chosen {
	   background-color: green;
	  }
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Piedra, Papel o Tijera :)</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
</head>
<body>
	<div class="container">
        <h1 class="page-header">Rating</h1>
		<div id="rating-container">
			<div class="rating-circle"></div>
			<div class="rating-circle"></div>
			<div class="rating-circle"></div>
			<div class="rating-circle"></div>
			<div class="rating-circle"></div>
	 	</div>
	</div>
</body>
</html>

Haciendo uso de la función prev de jQuery se puede crear una función recursiva en la cual le envíes el objeto que recibe la acción del mouseover y posterior busque el elemento anterior que cumpla con el mismo selector.

$(function() {
  $('.rating-circle')
    .mouseover(function() {
      rellenar(this);
    })
    .mouseleave(function() {
      vaciar(this);
    });
});

function rellenar(objDiv) {
  $(objDiv).addClass("rating-hover");
  rellenar($(objDiv).prev(".rating-circle"));
}

function vaciar(objDiv) {
  $(objDiv).removeClass("rating-hover");
  vaciar($(objDiv).prev(".rating-circle"));
}
h1,
h2,
h3 {
  color: darkblue;
}
.rating-circle {
  height: 2em;
  width: 2em;
  border: .1em solid black;
  border-radius: 1.1em;
  display: inline-block;
  margin: 0;
  padding: .1em;
}
.rating-hover {
  background-color: yellow;
}
.rating-chosen {
  background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <h1 class="page-header">Rating</h1>
  <div id="rating-container">
    <div class="rating-circle"></div>
    <div class="rating-circle"></div>
    <div class="rating-circle"></div>
    <div class="rating-circle"></div>
    <div class="rating-circle"></div>
  </div>
</div>

Fuente

Related Posts:

¿Cómo obtener la respuesta de una llamada asíncrona (AJAX) fuera de ella? – javascript jquery asincrónico
Pregunta: Actualmente tengo esta función: function devuelveButaca(posicion){ var array = posicion.split('_'); var row = array; var column ...
Evitar múltiples toggle con misma clase – javascript
Pregunta: Para un evento toggle con puro javascript lo desarrollo de la siguiente forma: Javascript // Esta clase lo expande. const expandButton = document.querySelector('.expand-button'); expandButton.addEventListener('click', ()=> { ...
Validación de datos nulos en una función – javascript
Pregunta: Tengo la siguiente función pero al momento validar todos mis datos me los registra todos a excepción del los "containers" que son grids y ...
Como poner una imagen de fondo a pantalla completa – javascript jquery html5
Pregunta: Como puedo hacer que la imagen abarque todo el tamaño de la pantalla. Se que de las propiedad min-width y min-heigth pero ellas no ...
Error de: Uncaught TypeError: url.indexOf is not a function por Jquery – javascript jquery
Pregunta: En el navegador, reviso en inspeccionar elemento, y me sale el siguiente error: Uncaught TypeError: url.indexOf is not a function Me imagino que es ...
Actualizar información con ajax php mysql – php jquery mysql
Pregunta: Tengo esta simple consulta que lo que simplemente me muestra las visitas de la web, pero quisiera que fuera automático con ajax ya que ...
Como validar array checkbox – javascript php jquery
Pregunta: Que tal buen dia, alguien me podria decir como se puede hacer para que cuando presione el boton "BAJAR DATOS" si este esta vacio ...
Uso de js y c# en unity. ¿Igual rendimiento? – javascript c# unity3d
Pregunta: Estoy comenzando con unity . Y veo que se pueden usar c# y js para programar. Mi pregunta es si tanto c# como js ...
¿Como eliminar espacio en los bordes con bootstrap? – html css bootstrap
Pregunta: Estoy intentando hacer un login con bootstrap y me surgió un problema con los bordes, cuando intento insertar un borde en el formulario se ...
Como cambiar una propiedad html dependiendo del valor de un perfil recogido de clase java – javascript jquery html
Pregunta: Tengo una caja de texto en la que me gustaría poder escribir o no dependiendo del perfil que utilice la aplicación. Esta caja de ...
Agregar marcador especifico a una localización Google Maps – javascript google-maps
Pregunta: ¿Cómo podría añadir un marcador personalizado en Google maps? Actualmente el código que tengo es el siguiente: var locations = [ ['Bondi Beach', -33.890542, ...
Usar variable en otra función con javascript – javascript html app
Pregunta: Primero que todo voy a dejar un enlace donde pueden ver el ejemplo funcionando de manera completa. Enlace a la pagina AQUI El valor elegido en ...
Ocultar y Mostrar con Mapa de Google – javascript c# asp.net
Pregunta: Tengo un div en mi página ASP.NET que contiene un Mapa de Google, y necesito mostrarlo y ocultarlo pero no me funciona. Este es el ...
Copiar valor a un input que esta dentro de un footer de un datatable – javascript jquery datatables
Pregunta: Estoy usando los DataTables de jQuery y me estoy encontrando con el siguiente problema: cuando pulso en un botón necesito pasarle un valor con ...
convertir array a Map en javascript – javascript map nodejs
Pregunta: quiero convertir un arreglo a Map(), en este console "console.log(arrayParaMap);" sale undefined el ejemplo que uso es este //example {a:1,a:2,a:1,b:1,b:5,b:6} el map que prentendo obtener es ...

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *