【问题标题】:JQuery toggle opacity with clickJQuery 通过单击切换不透明度
【发布时间】:2015-05-22 16:35:24
【问题描述】:

我有两个 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();

JsFiddle here

【问题讨论】:

标签: jquery css click toggle opacity


【解决方案1】:

这里的问题是.css() 方法没有返回一个数字——它实际上给了你一个字符串。因此,当您尝试执行以下操作时:

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 来演示。

希望这会有所帮助!如果您有任何问题,请告诉我。

【讨论】:

    【解决方案2】:

    看起来你的逻辑是正确的,但是 0.1 的增量太小了,看不出有什么区别。

    $( "#pippo").css( "opacity", pippo + 1 );
    

    类似上面的代码将帮助您更清楚地看到差异。

    这里有一个小提琴可以帮助更好地看到差异:

    https://jsfiddle.net/k3xgLdrr/

    这是你想看到的那种行为吗?

    【讨论】:

      【解决方案3】:

      当您获得当前的 css 不透明度值时,您需要使用 parseFloat()。这是因为jQuery.css() 函数返回的是字符串而不是数字。

      在这里检查小提琴: https://jsfiddle.net/voveson/gap9bh6b/1/

      【讨论】:

      • 第一次回答。合法的好奇,不想挑衅 - 为什么投反对票?
      • 那么没有理由吗?好的。
      【解决方案4】:

      供未来观众使用的原版 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>

      【讨论】:

        猜你喜欢
        • 2012-12-08
        • 2015-02-20
        • 1970-01-01
        • 2014-09-17
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-06
        相关资源
        最近更新 更多