Foros del Web » Programando para Internet » Javascript »

mouse up no funciona correctamente

Estas en el tema de mouse up no funciona correctamente en el foro de Javascript en Foros del Web. pongo todo el codigo por si acaso espero que no os austeis, bajo la explicación Código: var ordenable = { bindClass : 'ordename', install : ...
  #1 (permalink)  
Antiguo 23/11/2013, 12:47
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
mouse up no funciona correctamente

pongo todo el codigo por si acaso espero que no os austeis, bajo la explicación

Código:
var ordenable = {
	bindClass : 'ordename', 
	install : function() {
		ordenable.addEvent(window, 'load', ordenable.init);
	},
	
	addEvent : function(el, evnt, func) {
		if(el.addEventListener) {
			el.addEventListener(evnt, func, false);
		} else if(el.attachEvent) {
			el.attachEvent('on'+evnt, func);
		}
	},
	
	init : function() {
		var matchClass = new RegExp('(^|\\s)('+ordenable.bindClass+')\\s*(\\{[^}]*\\})?', 'i');
		var e = document.getElementsByTagName('ul');
		for(var i=0; i<e.length; i+=1) {
			if(!e[i].orden && e[i].className && (m = e[i].className.match(matchClass))) {
				if(m[3]) {
					try {
						prop = (new Function ('return (' + m[3] + ')'))();
					} catch(eInvalidProp) {}
				}
				e[i].orden = new ordenable.orden(e[i]);
			}
		}
		
	},
	orden : function(target){
		
		var objetivo=target;
		var elementos=objetivo.getElementsByTagName('li');
		var from=null;
		var to=null;
		var active=false;
		var comodin=null;
		document.onmouseup=function(){active=false;document.body.style.cursor = 'auto';};
		target.onselectstart = function(){return false;}; 
		for(var x=0;x<elementos.length;x++){
			elementos[x].setAttribute('factor', x);
			elementos[x].onmousedown=function (){
				from=event.target||event.srcElement;
				active=true;
				document.body.style.cursor = 'move';
				return false;
			};
			elementos[x].onmouseup=function(){active=false;document.body.style.cursor = 'auto';};
			elementos[x].onmouseover=function (){
				to=event.target||event.srcElement;
				if(active==true){
					if(from.attributes.factor.value>to.attributes.factor.value){
						target.insertBefore(from, to);
						
					}else{
						target.insertBefore(from, to.nextSibling);
						
					}
					elementos=objetivo.getElementsByTagName('li');
					for(var x=0;x<elementos.length;x++){
						elementos[x].setAttribute('factor', x);
					}
				}
				
			};
		}
		
		
	}
}
ordenable.install();
la pega la tengo en esta linea
Cita:
document.onmouseup=function(){active=false;documen t.body.style.cursor = 'auto';};
el cursor lo cambia correctamente y si meto un alert, salta allá donde suelte el ratón pero la variable active parece que no se queda en false cuando suelto el ratón fuera de la lista.

y tengo 3 listas distintas en la misma página que se ven afectadas por este componente, que no se si será que al hacer el mouseout, el navevador no determina bien de que objeto es el mouse out


para probarlo, simplemente llamais al archivo.js y en una lista ul le poneis de clasname "ordename" todas las listas con ese classname que se encuentren se harán ordenables

(los espacios varios y guarradas por el estilo son cosas del foro, que en verdad el codigo no contiene errores de sintaxis)
  #2 (permalink)  
Antiguo 24/11/2013, 16:41
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: mouse up no funciona correctamente

has de eliminar el evento onmouseover cuando se produzca el evento onmouseup. unas pocas correcciones
Cita:
var ordenable = {
bindClass : 'ordename',
install : function() {
ordenable.addEvent(window, 'load', ordenable.init);
},

addEvent : function(el, evnt, func) {
if(el.addEventListener) {
el.addEventListener(evnt, func, false);
} else if(el.attachEvent) {
el.attachEvent('on'+evnt, func);
}
},

init : function() {
var matchClass = new RegExp('(^|\\s)('+ordenable.bindClass+')\\s*(\\{[^}]*\\})?', 'i');
var e = document.getElementsByTagName('ul');
for(var i=0; i<e.length; i+=1) {
if(!e[i].orden && e[i].className && (m = e[i].className.match(matchClass))) {
if(m[3]) {
try {
prop = (new Function ('return (' + m[3] + ')'))();
} catch(eInvalidProp) {}
}
e[i].orden = new ordenable.orden(e[i]);
}
}

},
orden : function(target){

var foo;
var objetivo=target;
var elementos=objetivo.getElementsByTagName('li');
var from=null;
var to=null;
var active=false;
var comodin=null;
//document.onmouseup=function(){active=false;documen t.body.style.cursor = 'auto';
document.onmouseup=function(){active=false;documen t.body.style.cursor = 'auto';
console.log(active + ' - mouseup');
objetivo.removeEventListener('mouseover', foo);
};
target.onselectstart = function(){return false;};
for(var x=0;x<elementos.length;x++){
elementos[x].setAttribute('factor', x);
elementos[x].onmousedown=function(){
from=event.target||event.srcElement;
active=true;
document.body.style.cursor = 'move';
//return false;

//elementos[x].onmouseup=function(){active=false;document.body.s tyle.cursor = 'auto';};
ordenable.addEvent(objetivo, 'mouseover', foo =function(){
to=event.target||event.srcElement;
console.log(active + ' - mousedown y mouseover');
if(active==true){

if(from.attributes.factor.value>to.attributes.fact or.value){
target.insertBefore(from, to);

}else{
target.insertBefore(from, to.nextSibling);

}
elementos=objetivo.getElementsByTagName('li');
for(var x=0;x<elementos.length;x++){
elementos[x].setAttribute('factor', x);
}
}

});
};
}


}
}
ordenable.install();
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: correctamente, js, mouse, variable
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 21:42.