Tengo un elemento HTML que necesito para rastrear otro elemento. Específicamente, necesito que las esquinas superior izquierda y superior derecha de ambos elementos estén posicionadas de la misma manera. Cuando se cambia el tamaño de una ventana, se activa el evento de cambio de tamaño y puedo ajustar la posición del elemento dependiente. Sin embargo, si el elemento que se rastrea se reposiciona (pero no se redimensiona), no veo ningún evento DOM.¿Cómo se escucha que un elemento HTML se mueva en JavaScript?
¿Cómo podemos saber si un elemento DOM se ha movido? Estamos usando el último jQuery.
Aquí hay un ejemplo de código.
Tenga en cuenta que elementOne
y mouseTracking
divs están ahí para mostrar elementos que se mueven por "algún" motivo que está fuera del control de mi código.
- Este código funciona para el caso
elementOne
. MouseTrackingTracker
no rastrea un elemento en movimiento.ResizerTracker
no coloca el borde alrededor del texto completo en la caja de desbordamiento.
Me gustaría que el trackingDivs se mueva y cambie de tamaño sin importar el motivo de los motivos del elemento rastreado.
Este código se basa en que el tamaño de la ventana es el evento enganchado. Enganchar un evento que se dispara cuando el elemento cambia sus dimensiones está más cerca de lo que necesito.
<!DOCTYPE html>
<html>
<head>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.js"></script>
<style type="text/css">
#elementOne { float : right;width : 200px; display:inline-block}
#resizer { float : left; display:inline-block}
.trackedDiv { width:50px; height:50px; background-color: blue }
.trackingDiv { position:absolute; z-index: 1; border:3px green; border-style: solid;}
</style>
<script>
$(function() {
$(window).bind("resize",function(){
$("#elementOne").trigger("reposition");
$("#mouseTracking").trigger("reposition");
$("#resizer").trigger("reposition");
});
var repositionFunction = function(selfish, element){
var self = $(selfish);
var offset = self.offset();
var selfTop = offset.top;
var selfLeft = offset.left;
var selfWidth = self.width();
var selfHeight = self.height();
$(element).css({
top: selfTop,
left: selfLeft,
width : selfWidth,
height : selfHeight
});
}
$(document).mousemove(function(ev){
$("#mouseTracking").position({
my: "left bottom",
of: ev,
offset: "3 -3",
collision: "fit"
});
});
var timedShort = function() {
$('#resizer').html("Really short").resize();
setTimeout(timedLong, 10000);
}
var timedLong = function() {
$('#resizer').html("Really longggggggggggggggggggggggggggggggggggggggggggggggggggg text").resize();
setTimeout(timedShort, 10000);
}
setTimeout(timedLong, 10000);
$("#elementOne").bind("reposition",
function() { repositionFunction(this, "#elementOneTracker"); });
$("#mouseTracking").bind("reposition",
function() { repositionFunction(this, "#mouseTrackingTracker"); });
$("#resizer").bind("reposition",
function() { repositionFunction(this, "#resizerTracker"); });
});
</script>
</head>
<body>
<div class="trackedDiv" id="mouseTracking">tracks mouse</div>
<div class="trackingDiv" id="mouseTrackingTracker"></div>
<div style="clear:both;"></div>
<div class="trackedDiv" id="resizer">resizer: resizes</div>
<div class="trackingDiv" id="resizerTracker"></div>
<div class="trackedDiv" id="elementOne">elementOne: floats to the right</div>
<div class="trackingDiv" id="elementOneTracker"></div>
</body>
</html>
¿Puedes mostrar algún código? ¿Cómo se reubica el elemento, etc.? –
ejemplo agregado. Espero que esto ayude. – Pat
posible duplicado de [Cómo saber cuándo un elemento DOM se mueve o se redimensiona] (http: // stackoverflow.com/questions/3444719/how-to-know-when-an-dom-element-moves-or-is-resized) – thSoft