如何使用 javascript 动态更改元素的不透明度
How to change the opacity on an element dynamically using javascript
我做了一个改变元素不透明度的函数,但你知道它不起作用,以下是我的代码:
function _opacity(ele, opacity,addOpac , delay ){
ele = document.getElementById(ele);
var CurrentOpacity = ele.style.opacity,
ChangeInOpacity = setInterval(function(){
if (CurrentOpacity > opacity ) { decrease();};
if (CurrentOpacity < opacity) { increase();};
if (CurrentOpacity == opacity) { stopInc();};
}, delay),
increase = function(){
ele.style.opacity = CurrentOpacity;
CurrentOpacity = CurrentOpacity+addOpac;
},
decrease =function(){
ele.style.opacity = CurrentOpacity;
CurrentOpacity = CurrentOpacity-addOpac;
},
stopInc = function(){
clearInterval(ChangeInOpacity);
};
}
此函数最重要的功能之一是不使用任何循环。
这种使用setInterval
的思想在改变元素的宽度和高度方面非常有效。但是在这里,此功能不起作用。
我所知道的是,它没有向传递给上述函数的元素添加任何样式属性
这里的错误是什么,因为它不起作用?
提前谢谢。
那里有几个问题:
-
要获取元素的当前不透明度,您需要使用
getComputedStyle
函数(或 oldIE 上的currentStyle
属性),而不是.style.opacity
。后者只有在显式分配时才具有值,而不是通过样式表隐式分配。 -
该值将是一个字符串,因此您需要将其转换为数字。
-
您不太可能完全匹配目标不透明度,因此您需要在越过目标时停止。
-
您不会
;
放在语句if
末尾,因此请将其删除。
您 分配不透明度,但随后递增它,然后递增的值是您检查的值以查看您是否已完成,因此即使不是 #3,您也会提前停止。
在 JavaScript 中,压倒性的约定是以小写字母开头的局部变量名称。我将计时器句柄的名称更改为
timer
。
你最好的选择是弄清楚你要去的方向,然后在你通过目标时停下来:
// Polyfill getComputedStyle for old IE
if (!window.getComputedStyle) {
window.getComputedStyle = function(element) {
return element.currentStyle;
}
}
// Your _opacity function
function _opacity(ele, opacity, addOpac, delay) {
var direction;
ele = document.getElementById(ele);
// Determine direction
direction = +getComputedStyle(ele).opacity < opacity ? 1 : -1;
var timer = setInterval(function() {
// Get the *computed* opacity
var current = +getComputedStyle(ele).opacity;
if (direction > 0) {
if (current < opacity) {
increase(current);
} else {
stopInc();
}
}
else {
if (current > opacity) {
decrease(current);
} else {
stopInc();
}
}
}, delay),
increase = function(current) {
// Increase, but don't go past target
ele.style.opacity = Math.min(current + addOpac, opacity);
},
decrease = function(current) {
// Decrease, but don't go past target
ele.style.opacity = Math.max(current - addOpac, opacity);
},
stopInc = function() {
clearInterval(timer);
};
};
// Run
_opacity("target", 0.3, 0.05, 50);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
<div id="target">this is the element</div>
你可以这样做:
ele.style.opacity = "0.2";// some desired value but string if for all browsers.
有关更多信息,请参阅这篇文章:在不同浏览器中设置 HTML 元素的不透明度
相关文章:
- 在js中访问元素时不透明度和样式未定义,但在css中定义
- 更改整个类的不透明度元素
- 悬停父元素时如何更改子元素的不透明度
- 如何使用Javascript获得元素的不透明度
- 降低非悬停元素的不透明度
- IE 9 在子元素上具有不透明度,我无法使用捕获来阻止它
- 已检查使用 JS 更改另一个元素的不透明度
- 如何使用 javascript 动态更改元素的不透明度
- 逐渐降低不透明度,因为元素是通过jQuery UI .draggable()拖动的
- jQuery 绑定以切换元素的不透明度
- 如何正确评估“if”语句的元素可见性不透明度隐藏性
- 如果元素的不透明度=1 不起作用
- 当用户向下滚动页面时增加元素不透明度
- 当选择元素上方的元素(不透明度:0.001)时,元素后面的 rails/css/突出显示文本
- 使用Jquery更改拖动过程中元素的不透明度
- Raphael js - 在组上动画不透明度,同时保留单个元素的不透明度
- 基于窗口宽度滚动时淡入元素不透明度
- 不透明度为0的fadeIn()元素
- 我已经将背景颜色设置为白色,但是父元素的不透明度如何影响它
- 如何使用javascript切换元素的不透明度