【问题标题】:Jquery 'click' function only works on the "if" statement, not the "else if" [duplicate]Jquery'click'功能仅适用于“if”语句,而不适用于“else if”[重复]
【发布时间】:2021-08-26 10:41:11
【问题描述】:

第一篇文章,我试图制作某种幻灯片菜单,虽然它可以点击一次并让菜单选项出现。再次单击会导致重做开始动画,而不是将它们减回到它们的第一个位置。

        let menuopen = false;

$(document).ready(function(e) {
      $("#menu_button").on('click',function(e) {
       if (menuopen == false) {
        $("#menu_button").css({"left":"500px"}).animate({left: '450px'})
        $("#menu_select").css({"left":"500px"}).animate({left: '750px'});
        $("#menu_select_two").css({"left":"500px"}).animate({left: '1050px'});
        menuopen == true;
        
        
      }
      else if (menuopen == true) {
        $("#menu_button").css({"left":"450px"}).animate({left: '500px'})
        $("#menu_select").css({"left":"750px"}).animate({left: '500px'});
        $("#menu_select_two").css({"left":"1050px"}).animate({left: '500px'});

        menuopen == false
      }
    });
});

【问题讨论】:

    标签: html jquery


    【解决方案1】:

    你没有分配

     menuopen == true;
    

    应该是

    menuopen = true;
    

    无论如何:为什么 else if,只使用 else?

    试试这个 - 它将状态保存在按钮中

    您可以使用三元组,但在这种情况下会很麻烦

    $(function(e) {
      $("#menu_button").on('click',function(e) {
        const menuopen = !!$(this).data("open"); // force boolean 
        if (menuopen) {
          $("#menu_button").css({"left":"450px"}).animate({left: '500px'})
          $("#menu_select").css({"left":"750px"}).animate({left: '500px'});
          $("#menu_select_two").css({"left":"1050px"}).animate({left: '500px'});
        }  
        else {
          $("#menu_button").css({"left":"500px"}).animate({left: '450px'})
          $("#menu_select").css({"left":"500px"}).animate({left: '750px'});
          $("#menu_select_two").css({"left":"500px"}).animate({left: '1050px'});
        }
        $(this).data("open",!menuopen) 
      });
    });
    

    也许

    const butOpen =   { "left": "450px" },
      butClosed =     { "left": "500px" },
      selectOpen =    { "left": "750px" },
      selectClosed =  { "left": "500px" },
      select2Open =   { "left": "1050px" },
      select2Closed = { "left": "500px" }
    
    $(function(e) {
      $("#menu_button").on('click', function(e) {
        const menuopen = !!$(this).data("open"); // force boolean 
        $("#menu_button").css(menuopen ? butOpen : butClosed).animate(menuopen ? butClosed : butOpen)
        $("#menu_select").css(menuopen ? selectOpen : butClosed).animate(menuopen ? selectClosed : selectOpen)
        $("#menu_select_two").css(menuopen ? select2Open : select2Closed).animate(menuopen ? select2Closed : select2Open)
        $(this).data("open", !menuopen)
      });
    });
    

    或者使用一个类并切换它:

    window.addEventListener("load", function(e) {
      const wrapper = document.querySelector(".wrapper");
      document.getElementById("menu").addEventListener("click", function(e) {
        wrapper.classList.toggle("open");
        this.textContent = wrapper.classList.contains("open") ? "Close" : "Open";
      })
    })
    .wrapper {
      position: relative;
      overflow: hidden;
      width: 100px;
      height: 100px;
      border: 1px solid black;
    }
    
    #slide {
      position: absolute;
      left: -100px;
      width: 100px;
      height: 100px;
      background: blue;
      transition: 1s;
    }
    
    .wrapper.open #slide {
      transition: 1s;
      left: 0;
    }
    <button id="menu" type="button">Open</button>
    <div class="wrapper">
      <img id="slide" src="https://lorempixel.com/output/cats-q-c-100-100-4.jpg" />
    </div>

    【讨论】:

    • 哇!非常感谢,这非常有效!不过,我不知道你到底是什么意思:o
    • 三元组是:$("#menu_button").css(menuopen ? {"left":"450px"}:{"left":"500px"}).animate(menuopen?{left: '500px'}:{left: '450px'})
    • 哦,有没有更好的动画方法?
    • 我现在意识到我不知道多少,像“元组”和“三元运算符”这样的词对我来说完全是未知数啊哈哈哈,我还有很多东西要学! c:
    • 哦!非常抱歉,我被困在小屋里 3 天了。谢谢你让我知道!完全忘记了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多