JQuery 通过点击切换不透明度
JQuery toggle opacity with click
我有两个 div(A 和 B)和两个按钮,我正在尝试实现此效果:
当我点击一个按钮时 div A 的不透明度增加,而 div B 的不透明度减少,反之亦然。但它似乎只有在减少时才有效......
不明白怎么回事。
<!-- html -->
<div id="pippo"></div>
<div id="pluto"></div>
<div id="opacity">opacity</div>
<div id="opacity2">opacity2</div>
function changeOpacity() {
$( "#opacity" ).click(function() {
var pippo = $('#pippo').css('opacity');
var pluto = $('#pluto').css('opacity');
$( "#pippo").css( "opacity", pippo + 0.1 );
$( "#pluto").css( "opacity", pluto - 0.1 );
});
$( "#opacity2" ).click(function() {
var pi = $('#pippo').css('opacity');
var pl = $('#pluto').css('opacity');
$( "#pippo").css( "opacity", (pi - 0.1) );
$( "#pluto").css( "opacity", (pl + 0.1) );
return false;
});
}
changeOpacity();
看起来你的逻辑是对的,但是0.1的增量太小了,看不出有什么区别。
$( "#pippo").css( "opacity", pippo + 1 );
类似于上面的代码将帮助您更清楚地看到差异。
这里有一个 fiddle 可以帮助您更好地看出区别:
https://jsfiddle.net/k3xgLdrr/
这是您希望看到的行为吗?
这里的问题是 .css()
方法不 return 一个数字——它实际上给你一个字符串。因此,当您尝试执行类似以下操作时:
var pippo = $('#pippo').css('opacity');
$( "#pippo").css( "opacity", pippo + 0.1 );
如果说 pippo
是 0.9,那么 pippo + 0.1
会给你“0.90.1”。数字 0.1 将被转换为字符串,您将得到两个字符串的连接(因为这是 +
运算符所做的)。
不过减法之所以有效,如:
var pluto = $('#pluto').css('opacity');
$( "#pluto").css( "opacity", pluto - 0.1 );
是因为字符串没有减法运算符,所以pluto
自动转为数字
要解决此问题,请考虑对来自 .css()
:
的 returned 值使用 parseFloat()
function changeOpacity() {
$("#opacity").click(function () {
var pippo = $('#pippo').css('opacity');
var pluto = $('#pluto').css('opacity');
$("#pippo").css("opacity", parseFloat(pippo) + 0.1);
$("#pluto").css("opacity", parseFloat(pluto) - 0.1);
console.log(pippo + 0.1);
});
$("#opacity2").click(function () {
var pi = $('#pippo').css('opacity');
var pl = $('#pluto').css('opacity');
$("#pippo").css("opacity", parseFloat(pi) - 0.1);
$("#pluto").css("opacity", parseFloat(pl) + 0.1);
return false;
});
}
这里有一个JSFiddle来演示。
希望对您有所帮助!如果您有任何问题,请告诉我。
供未来观众使用的原版 javascript 选项。
(function () {
"use strict";
var pippo = document.getElementById('pippo'),
pluto = document.getElementById('pluto');
document.addEventListener('click', function (e) {
if (e.target.id == 'opacity') {
pippo.style.opacity = Number(pippo.style.opacity) + 0.1;
pluto.style.opacity = Number(pluto.style.opacity) - 0.1;
}
if (e.target.id == 'opacity2') {
pippo.style.opacity = Number(pippo.style.opacity) - 0.1;
pluto.style.opacity = Number(pluto.style.opacity) + 0.1;
}
}, false);
})();
(function () {
"use strict";
var pippo = document.getElementById('pippo'),
pluto = document.getElementById('pluto');
document.addEventListener('click', function (e) {
if (e.target.id == 'opacity') {
pippo.style.opacity = Number(pippo.style.opacity) + 0.1;
pluto.style.opacity = Number(pluto.style.opacity) - 0.1;
}
if (e.target.id == 'opacity2') {
pippo.style.opacity = Number(pippo.style.opacity) - 0.1;
pluto.style.opacity = Number(pluto.style.opacity) + 0.1;
}
}, false);
})();
#pippo {
width:100px;
height:100px;
border: 1px solid #cccccc;
background-color: #e3ee31
}
#pluto {
width:100px;
height:100px;
border: 1px solid #cccccc;
background-color: #316fee
}
#opacity {
width:40px;
height:20px;
background-color:#f0f0f0;
border: 1px solid #999999;
}
#opacity2 {
width:40px;
height:20px;
background-color:#f0f0f0;
border: 1px solid #999999;
}
<div id="pippo" style="opacity: 1;"></div>
<div id="pluto" style="opacity: 0;"></div>
<div id="opacity">opacity</div>
<div id="opacity2">opacity2</div>
当您获得当前 css 不透明度值时,您需要使用 parseFloat()
。这是因为 jQuery.css()
函数 returns 一个字符串而不是一个数字。
在此处检查 fiddle:
https://jsfiddle.net/voveson/gap9bh6b/1/
我有两个 div(A 和 B)和两个按钮,我正在尝试实现此效果: 当我点击一个按钮时 div A 的不透明度增加,而 div B 的不透明度减少,反之亦然。但它似乎只有在减少时才有效...... 不明白怎么回事。
<!-- html -->
<div id="pippo"></div>
<div id="pluto"></div>
<div id="opacity">opacity</div>
<div id="opacity2">opacity2</div>
function changeOpacity() {
$( "#opacity" ).click(function() {
var pippo = $('#pippo').css('opacity');
var pluto = $('#pluto').css('opacity');
$( "#pippo").css( "opacity", pippo + 0.1 );
$( "#pluto").css( "opacity", pluto - 0.1 );
});
$( "#opacity2" ).click(function() {
var pi = $('#pippo').css('opacity');
var pl = $('#pluto').css('opacity');
$( "#pippo").css( "opacity", (pi - 0.1) );
$( "#pluto").css( "opacity", (pl + 0.1) );
return false;
});
}
changeOpacity();
看起来你的逻辑是对的,但是0.1的增量太小了,看不出有什么区别。
$( "#pippo").css( "opacity", pippo + 1 );
类似于上面的代码将帮助您更清楚地看到差异。
这里有一个 fiddle 可以帮助您更好地看出区别:
https://jsfiddle.net/k3xgLdrr/
这是您希望看到的行为吗?
这里的问题是 .css()
方法不 return 一个数字——它实际上给你一个字符串。因此,当您尝试执行类似以下操作时:
var pippo = $('#pippo').css('opacity');
$( "#pippo").css( "opacity", pippo + 0.1 );
如果说 pippo
是 0.9,那么 pippo + 0.1
会给你“0.90.1”。数字 0.1 将被转换为字符串,您将得到两个字符串的连接(因为这是 +
运算符所做的)。
不过减法之所以有效,如:
var pluto = $('#pluto').css('opacity');
$( "#pluto").css( "opacity", pluto - 0.1 );
是因为字符串没有减法运算符,所以pluto
自动转为数字
要解决此问题,请考虑对来自 .css()
:
parseFloat()
function changeOpacity() {
$("#opacity").click(function () {
var pippo = $('#pippo').css('opacity');
var pluto = $('#pluto').css('opacity');
$("#pippo").css("opacity", parseFloat(pippo) + 0.1);
$("#pluto").css("opacity", parseFloat(pluto) - 0.1);
console.log(pippo + 0.1);
});
$("#opacity2").click(function () {
var pi = $('#pippo').css('opacity');
var pl = $('#pluto').css('opacity');
$("#pippo").css("opacity", parseFloat(pi) - 0.1);
$("#pluto").css("opacity", parseFloat(pl) + 0.1);
return false;
});
}
这里有一个JSFiddle来演示。
希望对您有所帮助!如果您有任何问题,请告诉我。
供未来观众使用的原版 javascript 选项。
(function () {
"use strict";
var pippo = document.getElementById('pippo'),
pluto = document.getElementById('pluto');
document.addEventListener('click', function (e) {
if (e.target.id == 'opacity') {
pippo.style.opacity = Number(pippo.style.opacity) + 0.1;
pluto.style.opacity = Number(pluto.style.opacity) - 0.1;
}
if (e.target.id == 'opacity2') {
pippo.style.opacity = Number(pippo.style.opacity) - 0.1;
pluto.style.opacity = Number(pluto.style.opacity) + 0.1;
}
}, false);
})();
(function () {
"use strict";
var pippo = document.getElementById('pippo'),
pluto = document.getElementById('pluto');
document.addEventListener('click', function (e) {
if (e.target.id == 'opacity') {
pippo.style.opacity = Number(pippo.style.opacity) + 0.1;
pluto.style.opacity = Number(pluto.style.opacity) - 0.1;
}
if (e.target.id == 'opacity2') {
pippo.style.opacity = Number(pippo.style.opacity) - 0.1;
pluto.style.opacity = Number(pluto.style.opacity) + 0.1;
}
}, false);
})();
#pippo {
width:100px;
height:100px;
border: 1px solid #cccccc;
background-color: #e3ee31
}
#pluto {
width:100px;
height:100px;
border: 1px solid #cccccc;
background-color: #316fee
}
#opacity {
width:40px;
height:20px;
background-color:#f0f0f0;
border: 1px solid #999999;
}
#opacity2 {
width:40px;
height:20px;
background-color:#f0f0f0;
border: 1px solid #999999;
}
<div id="pippo" style="opacity: 1;"></div>
<div id="pluto" style="opacity: 0;"></div>
<div id="opacity">opacity</div>
<div id="opacity2">opacity2</div>
当您获得当前 css 不透明度值时,您需要使用 parseFloat()
。这是因为 jQuery.css()
函数 returns 一个字符串而不是一个数字。
在此处检查 fiddle: https://jsfiddle.net/voveson/gap9bh6b/1/