Mus*_*ian 15 javascript css jquery css-position css3
我正在使用jQuery .position()
方法绝对定位旋转元素位置,然后使用jQuery 设置与位置相关的属性(顶部,左侧),返回的数据.css(pos)
在哪里.我认为它会将元素留在它的位置,但元素的位置正在发生变化.pos
.position()
如何使用设置旋转元素位置,以便它按预期放置?也许有一个系数取决于改变位置的角度?
我正在使用Google Chrome v.9,Windows XP进行测试.
HTML
<div id="container">
<div id="element">
<img src="http://t0.gstatic.com/images?q=tbn:ANd9GcS0Fawya9MVMez80ZusMVtk_4-ScKCIy6J_fg84oZ37GzKaJXU74Ma0vENc"/>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS
#container {
position: relative;
border: 1px solid #999;
padding: 5px;
height: 300px;
width:300px;
}
#element {
position: absolute;
top:50px;
left: 60px;
width: auto;
border: 1px solid #999;
padding: 5px;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
}
Run Code Online (Sandbox Code Playgroud)
JS
$(document).ready(function(){
var $el = $('#element'),
// getting position
pos = $el.position();
alert(pos.left + '/' + pos.top);
// alerts 37/11
// setting css position attributes equal to pos
$el.css(pos);
// re-getting position
pos = $el.position();
alert(pos.left + '/' + pos.top);
// alerts 14/-28
});
Run Code Online (Sandbox Code Playgroud)
// Needed to read the "real" position
$.fn.adjustedPosition = function() {
var p = $(this).position();
return {
left: p.left - this.data('dx'),
top: p.top - this.data('dy')
}
};
Run Code Online (Sandbox Code Playgroud)
$(function() {
var img = $('img'),
pos;
// Calculate the delta
img.each(function() {
var po = $(this).position(), // original position
pr = $(this).addClass('rot').position(); // rotated position
$(this).data({
dx: pr.left - po.left, // delta X
dy: pr.top - po.top // delta Y
});
});
// Read the position
pos = img.adjustedPosition();
alert(pos.left + '/' + pos.top);
// Write the position
img.css(pos);
// Read the position again
pos = img.adjustedPosition();
alert(pos.left + '/' + pos.top);
});
Run Code Online (Sandbox Code Playgroud)
现场演示: http ://jsfiddle.net/2gVL4/4/
那么这里发生了什么:
旋转图像的CSS代码存储在一个特殊的CSS类中.我这样做是因为我想读取图像的原始位置(旋转前).一旦我读到原始位置,我就应用.rot
该类,然后再次读取位置以计算差值(delta),该差值存储在元素的data()中.
现在,我可以通过自定义方法adjustedPosition
(上面定义)读取位置.此方法将读取元素的位置,然后减去存储在元素的data()内的delta值.
要写出位置,只需使用css(pos)
正常的方法即可.