javascript:改变CSS的相对位置
javascript: change CSS position by relative amount
基本上我想做的是每次执行JavaScript(通过点击),CSS left
值为我的<div>
减少了20%。例如,left
从40%开始。第一次点击的时候应该是20%,然后是0%,然后是-20%,以此类推。我已经更新了下面的代码:
FilmstripLeft = parseInt(document.defaultView.getComputedStyle(ul).left, 10) / 4;
ul.style.left = (FilmstripLeft - 20) + "%";
ul
是我使用document.getElementById()
得到的<div>
。这段代码现在可以工作了,但是我不确定第一行末尾是否除以4。在最后添加/ 4
之前,我测试了该行返回的值为160,尽管起始值为40%。我不确定这是否因为它以像素而不是百分比返回值,在这种情况下除以4只适用于left
在160px
?
div的"left"值减少20%
。根据你们的解释,你们是要降低20%,而不是20%。
getComputedStyle(ul).left
注意百分比是相对的单位。在计算时,它们被转换为绝对长度。
你只能访问原始百分比作为内联样式
var target = document.getElementById("target");
document.querySelector('input').addEventListener('click', function() {
target.style.left = parseFloat(target.style.left) - 20 + '%';
});
#target {
position: relative;
width: 30px;
height: 30px;
background: blue;
}
<div id="target" style="left: 80%"></div>
<input type="button" value="Click" />
但是你不需要原始百分比来减去20个百分点。你可以使用calc
:
var target = document.getElementById("target");
document.querySelector('input').addEventListener('click', function() {
var current = getComputedStyle(target).left;
target.style.left = 'calc(' + current + ' - 20%)';
});
#target {
position: relative;
left: 80%;
width: 30px;
height: 30px;
background: blue;
}
<div id="target"></div>
<input type="button" value="Click" />
getComputedStyle()
不能很好地满足您的目的,因为根据定义,它以像素为单位返回计算的样式值,而不是原始值的相对百分比。为了计算"20%"是使用计算样式,你必须手动找到父元素的宽度,然后取其中的20%:
function onClick(){
var myElement = document.getElementById("inner");
var leftValue = parseFloat(window.getComputedStyle(myElement).left);
var parentElement = myElement.parentElement;
var parentWidth = parseFloat(window.getComputedStyle(parentElement).width);
var twentyPercent = parentWidth * 0.20;
var newLeftValue = (leftValue - twentyPercent) + "px";
myElement.style.left = newLeftValue;
updateStatus();
}
function updateStatus(){
document.getElementById("status").innerHTML = window.getComputedStyle(document.getElementById("inner")).left;
}
updateStatus();
document.getElementById("btn").addEventListener("click", onClick);
#outer {
width: 400px;
height: 20px;
background: #888;
}
#inner {
width: 20px;
height: 20px;
position: relative;
left: 80%;
background: red;
}
<div id="outer">
<div id="inner"></div>
</div>
<button id="btn">click me</button>
<div id="status"></div>
这个方法的缺点是它将left
固定为像素值,而不是父元素的真实百分比,所以如果窗口/父元素的宽度改变,left
的值将无法正确匹配。
如果left
值是内联HTML样式而不是CSS样式,则更容易,因为您可以直接使用element.style
获得它,它读取内联HTML样式值。然后你可以分配一个新的left
值作为一个真实的百分比,将更新,如果窗口/父宽度的变化。
function onClick(){
var myElement = document.getElementById("inner");
// Note how #inner's left value is now inline instead of CSS
var leftValue = parseFloat(myElement.style.left);
var newLeftValue = (leftValue - 20) + "%";
myElement.style.left = newLeftValue;
updateStatus();
}
function updateStatus(){
document.getElementById("status").innerHTML = document.getElementById("inner").style.left;
}
updateStatus();
document.getElementById("btn").addEventListener("click", onClick);
#outer {
width: 400px;
height: 20px;
background: #888;
}
#inner {
width: 20px;
height: 20px;
position: relative;
background: red;
}
<div id="outer">
<div id="inner" style="left: 80%"></div>
</div>
<button id="btn">click me</button>
<div id="status"></div>
所以,如果可能的话,把你的样式放在内联而不是CSS中,因为它们更容易访问。从技术上讲,使用JavaScript访问CSS样式表规则是可能的,但它非常令人费解,如果你是web开发新手,我不建议这样做。
- 在不移动元件的情况下从相对位置更改为固定位置
- jQuery拖动到相对位置的可排序列表中时出现可拖动辅助对象位置问题
- 在Appcelerator Titanium中获取视图的相对位置
- kinetic.js绝对线位置,而不是相对位置
- 相对位置和高度100%
- 相对位置上的 UI.位置值错误
- 当下一个元素处于相对位置时,将鼠标悬停在浮点元素上不会触发
- JS:工具提示在图标右侧的相对位置
- 获取元素相对于其父元素的相对位置
- 如何使相对位置像iPhone上的固定位置一样工作
- 在没有鼠标移动事件的情况下跟踪鼠标的相对位置
- 如何找到文本的绝对或相对位置或<br/>在HTML中
- requestFullScreen()只对宽度和相对位置有效吗
- JavaScript从给定宽度和高度的平面数组中确定行、列和元素的相对位置
- 绝对位置和相对位置都不好用
- 定位Div "Fixed"垂直和绝对;水平位置:相对位置;容器Div
- IE7 css块相对位置与Javascript错误
- javascript:改变CSS的相对位置
- 当元素处于相对位置元素时,查找元素偏离窗口的jQuery或JavaScript方法
- 在相对位置中获取滚动条位置