Foros del Web » Programando para Internet » Jquery »

como modificar el siguiente script para ahorrar muchas lineas de codigo

Estas en el tema de como modificar el siguiente script para ahorrar muchas lineas de codigo en el foro de Jquery en Foros del Web. tengo el siguiente script en jquery @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original < script >     $ ( function ( ) {   ...
  #1 (permalink)  
Antiguo 07/09/2015, 04:16
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
como modificar el siguiente script para ahorrar muchas lineas de codigo

tengo el siguiente script en jquery
Código Javascript:
Ver original
  1. <script>
  2.     $(function(){
  3.        
  4.         var ventana = $(window);
  5.         var doc = $(document);
  6.         var enlacesebusca_1 = $("#sebusca1");
  7.  
  8.  
  9.         $("#enlacesebusca1").on("click", mostrarLogin);
  10.  
  11.         ventana.on("resize", ajustarPosicionesLogin);
  12.         ventana.on("scroll", ajustarPosicionesLogin);
  13.    
  14.  
  15.         function ajustarPosicionesLogin(e){
  16.             enlacesebusca_1.css({
  17.               top: (((ventana.height() - enlacesebusca_1.height()) / 2) + ventana.scrollTop()) + "px",
  18.               left: ((ventana.width() - enlacesebusca_1.width()) / 2) + "px"
  19.             });
  20.             $("#capamodal").css({
  21.               width: "100%",
  22.               height: "100%"
  23.             });
  24.         }
  25.  
  26.         function mostrarLogin(e)
  27.         {
  28.             e.preventDefault();
  29.             enlacesebusca_1.css({
  30.               top: (((ventana.height() - enlacesebusca_1.height()) / 2) + ventana.scrollTop()) + "px",
  31.               left: ((ventana.width() - enlacesebusca_1.width()) / 2) + "px",
  32.               "z-index": 1000
  33.             });
  34.  
  35.            
  36.             enlacesebusca_1.fadeIn(2000);
  37.            
  38.  
  39.            var capamodal = $("<div>").attr("id", "capamodal");
  40.             capamodal.css({
  41.                 opacity: 0.80,
  42.                 "z-index": 900,
  43.                 width: doc.width(),
  44.                 height: doc.height(),
  45.                 backgroundColor: "#3fc",
  46.                 position: "fixed",
  47.                 top: "0px",
  48.                 left: "0px",
  49.                 display: "none",
  50.                 overflow: "hidden",
  51.             })
  52.             .appendTo("body")
  53.             .fadeIn(2000)
  54.             .on("click", function()
  55.             {
  56.               enlacesebusca_1.fadeOut(2000);
  57.            
  58.               capamodal.fadeOut(2000, function()
  59.               {
  60.                capamodal.remove();
  61.               });
  62.            
  63.         });
  64.  
  65.    }
  66.  
  67.  });
  68.    
  69.     </script>

Código HTML:
Ver original
  1. <a href="#" id="enlacesebusca1"  class="letraenlace">Letra</a>

como lo puedo modificar para hacer lo mismo con otras 11 canciones más ahorrando y reutilizando codigo??
gracias
  #2 (permalink)  
Antiguo 07/09/2015, 15:59
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Respuesta: como modificar el siguiente script para ahorrar muchas lineas de codigo

Buenas compañero,

Sin conocer muy bien lo que quieres hacer... Te diría que usaras las clases como selector, en vez del ID del elemento...
Además, la capa modal, en vez de crearla N veces, puedes dejarla en el HTML y con el fadein o fadeout es suficiente... Se mostrará o ocultará cuando pulses en alguno de los enlaces que "configures"...

Si en vez de usar:
var enlacesebusca_1 = $("#sebusca1");

Usas... Un each (https://api.jquery.com/each/):
$( ".letraenlace" ).each(function( index ) {
// Aquí todas las operaciones para ese enlace...
});


Un saludo!
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #3 (permalink)  
Antiguo 08/09/2015, 05:23
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: como modificar el siguiente script para ahorrar muchas lineas de codigo

buscando en google he encontrado esto y funciona, con el siguiente codigo meto en una variable el id del enlace que he pulsado

Código Javascript:
Ver original
  1. $(".letraenlace").click(function()
  2.  {
  3.             var oid=$(this).attr("id");
  4. }

pero esta variable oid como la meto en el siguiente codigo para que me coga el "id" pulsado y me ejecute la funcion mostrarlogin???

$(oid).on("click", mostrarLogin); //asi no me funciona mi duda es el $(oid) se pone asi??
  #4 (permalink)  
Antiguo 08/09/2015, 15:29
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Respuesta: como modificar el siguiente script para ahorrar muchas lineas de codigo

Buenas compañero,

Pues para lo que quieres, puedes usarlo así:
$(".letraenlace").on("click", mostrarLogin);

Cuando hagan click en cualquier elemento que tenga la clase "letraenlace", llamará la función mostrarLogin.


Un saludo!
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #5 (permalink)  
Antiguo 09/09/2015, 08:37
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: como modificar el siguiente script para ahorrar muchas lineas de codigo

drako me funciona lo de $(".letraenlace") pero no es lo que necesito... ya que tengo muchas canciones cada una con una letra.... necesito coger el id del link para llamar a un div diferente cada vez..

$(".letraenlace").click(function()
{
var oid=$(this).attr("id");
//console.log(oid);
$(oid).on("click", mostrarLogin);

//no me da error esta linea pero no funciona :: $(oid).on("click", mostrarLogin);
en $(oid) que tengo que poner? ya que en la funcion meto el valor del id en la variable oid!!!!
  #6 (permalink)  
Antiguo 09/09/2015, 09:02
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Respuesta: como modificar el siguiente script para ahorrar muchas lineas de codigo

Buenas,

Si quieres haz de poner:
$("#" + oid).on....
Ten en cuenta, que el selector de ID es así: $("#MiId")

Pero eso, o poner lo que te dije antes, es exactamente lo mismo, pues estás usando el objeto que tiene la clase "letraenlace"...

Cuando haces el:
$(".letraenlace").click(function()
{
var oid=$(this).attr("id");
//console.log(oid);
$(oid).on("click", mostrarLogin);
}

Es lo mismo que hacer:
$(".letraenlace").on("click", mostrarLogin);

Pues cada "letraenlace" va a llamar su propio mostrarLogin...
Haciendo lo que dices, lo que haces es:

Click en EsteEnlace={
var oID= EsteEnlace.dimeSuID;
NuevoClick en EsteEnlace = mostrarLogin;
}

Básicamente, dentro de un CLICK le estás diciendo que al hacer click sobre el enlace, cambie su CLICK a la llamada de una variable... No tiene sentido compañero...


Ejemplo....

DOM:
<a class="letraenlace" id="uno">click</a>
<a class="letraenlace" id="dos">click</a>

Cargas el JS:
<a class="letraenlace" id="uno" OnClick='$(".letraenlace").click(function(){var oid=$(this).attr("id");$(oid).on("click", mostrarLogin);}'>click</a>

<a class="letraenlace" id="dos" OnClick='$(".letraenlace").click(function(){var oid=$(this).attr("id");$(oid).on("click", mostrarLogin);}'>click</a>


Haces CLICK en ID=uno:
<a class="letraenlace" id="uno" OnClick='mostrarLogin'>click</a>

<a class="letraenlace" id="dos" OnClick='$(".letraenlace").click(function(){var oid=$(this).attr("id");$(oid).on("click", mostrarLogin);}'>click</a>

Hasta que no haces otra vez click en el elemento ID=uno, no se ejecuta el mostrarLogin...
Esto, es lo que estás haciendo al ejecutar ese código.


Un saludo!
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #7 (permalink)  
Antiguo 09/09/2015, 09:11
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: como modificar el siguiente script para ahorrar muchas lineas de codigo

gracias drako con el ("#". + oid ya me funciona lo que quiero hacer pero hay errores raros .
1º ago doble click y no se ejecuta el efecto
2º ago otra vez doble click y se ejecuta pero como si se ejecutara 3 veces a la vez, con lo que el fondo de la web desaparece por la opacidad y cuando ago click en algun lado de la pantalla no desaparece la opacidad, sino que tengo que hacer varios click para dejar la web tal cual estaba antes de pulsar...
  #8 (permalink)  
Antiguo 09/09/2015, 09:20
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: como modificar el siguiente script para ahorrar muchas lineas de codigo

luego esta el tema de como ago para no tener que repetir las funciones
function ajustarPosicionesLogin(e) y function mostrarLogin(e)
  #9 (permalink)  
Antiguo 09/09/2015, 12:26
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Respuesta: como modificar el siguiente script para ahorrar muchas lineas de codigo

Como decía nuestro amigo Jack... Vamos por partes...

¿Quieres hacer que haga doble click para hacer mostrarLogin?
Si es así, para eso está el evento https://api.jquery.com/dblclick/
Y no hacer un click anidado dentro de otro.

Segundo, si tienes la caja de login dentro del buscar, lo puedes hacer con CSS, pero eso, postealo en el foro adecuado...

Y la pregunta del millón... Quieres que al hacer click en cada enlace se ejecute el mostrarLogin no¿?

Postea el código entero igual que en la primera vez y le echo un vistazo..
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)

Etiquetas: lineas, modificar, muchas, siguiente
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 10:20.