$( document ).ready(function() {
$('body').append('<div id="tester2"></div>');
$('#tester2').css({
position:'absolute',
background:'blue',
width: 10,
height:10
});
setInterval(function(){
var x = $('#tester')[0].getBoundingClientRect();
$('#tester-pos').text('top: ' + x.top + ', left:' + x.left);
$('#tester2').css({
top:x.top,
left:x.left
});
}, 1000);
$('#jquery-version').text('jquery version: ' + $.fn.jquery);
});
&#13;
#tester{
position:absolute;
top:50px;
left:50px;
width:10px;
height:10px;
background:red;
}
#page{
min-height:200px;
}
body{
border:2px solid green;
transform: scale(1) translate(20px, 40px);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="tester">
</div>
<div id="page">
getBoundingClientRect on red tester returned:
<span id="tester-pos"></span>
<div id="jquery-version"></div>
</div>
&#13;
我需要在现有div
上放置div
。现有的div
包含在具有CSS转换属性集的HTML文档的主体内。我需要在文档渲染和转换后放置新的div
。
当我在getBoundingClientRect()
上调用我需要隐藏的div
时(附加小提琴中的红色方块),我得到错误的上/左。我将蓝色方块的顶部/左侧设置为getBoundingClientRect()
的输出,它们不重叠。
setInterval(function(){
var x = $('#tester')[0].getBoundingClientRect();
$('#tester-pos').text('top: ' + x.top + ', left:' + x.left);
$('#tester2').css({
top:x.top,
left:x.left
});
}, 1000);
如何解决这个问题?
答案 0 :(得分:0)
我有一个有效的答案,它可能不是最好的答案,但它对我来说100%有效。
$( document ).ready(function() {
$('body').append('<div id="tester2"></div>');
$('#tester2').css({
position:'absolute',
background:'blue',
width: 10,
height:10,
});
setInterval(function(){
var x = $('#tester')[0].getBoundingClientRect();
$('#tester-pos').text('top: ' + x.top + ', left:' + x.left);
$('#tester2').css({
'top':x.top/2,
'left':(x.left/2)+x.width
});
}, 1000);
$('#jquery-version').text('jquery version: ' + $.fn.jquery);
});
#tester{
position:absolute;
top:50px;
left:50px;
width:10px;
height:10px;
background:red;
}
#page{
min-height:200px;
}
body{
border:2px solid green;
transform: scale(1) translate(20px, 40px);
}
#tester2{
transform: scale(1) translate(0, 0);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="tester">
</div>
<div id="page">
getBoundingClientRect on red tester returned:
<span id="tester-pos"></span>
<div id="jquery-version"></div>
</div>
唯一一次我的潜在解决方案有点奇怪的是你必须滚动...所以请注意那里。
答案 1 :(得分:0)
您可以只使用offsetTop
和offsetLeft
而不必担心变换,因为同样的变换也应用于新添加的div。我从这个例子中猜到了。
$(document).ready(function() {
$('body').append('<div id="tester2"></div>');
$('#tester2').css({
position: 'absolute',
background: 'blue',
width: 10,
height: 10,
opacity: 0.6
});
var tester = document.getElementById('tester');
$('#tester2').css({
top: tester.offsetTop - 2, // 2px border for body
left: tester.offsetLeft - 2
});
$('#jquery-version').text('jquery version: ' + $.fn.jquery);
});
&#13;
#tester {
position: absolute;
top: 50px;
left: 50px;
width: 10px;
height: 10px;
background: red;
}
#page {
min-height: 200px;
}
body {
border: 2px solid green;
transform: scale(1) translate(20px, 40px);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<div id="tester">
</div>
<div id="page">
getBoundingClientRect on red tester returned:
<span id="tester-pos"></span>
<div id="jquery-version"></div>
</div>
&#13;