suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Problem mit der Scope-Reihenfolge bei der Ausführung von JavaScript-Code?

var mark2=true;
$(".right").click(function(){

        if(mark2){
           move(1);
           mark2=false;
        }
    })

Funktion move(obj){

             obj.animate({
                    width: arrW[index],
                     height: arrH[index],
                    opacity: arrO[index],
                    left: arrL[index],
                    top: arrT[index]

                },500,function(){
                    mark2=true;
                })
                }
                

Klicken Sie auf $(".right"), um die Verschiebefunktion auszuführen, hauptsächlich um eine Animation zum obj-Element hinzuzufügen. Um zu verhindern, dass $(".right") zu schnell klickt und die Animation überlappt, wird mark2 zur Steuerung verwendet . Wenn die Animation abgeschlossen ist, ist die Markierung nach 500 Millisekunden wahr. Klicken Sie auf $(".right"), andernfalls wird sie nicht ausgeführt Geschwindigkeit ist größer als 500 Millisekunden, die Markierung in der if-Anweisung hatte keine Möglichkeit, sie auszuführen, also habe ich erneut geklickt. Würde die Animation nicht ständig überlagert sein? Da Mark immer wahr ist, scheint mein Verständnis falsch zu sein, da das Programm normal ausgeführt werden kann. Ich hoffe daher, dass mir jemand eine Anleitung zum Ausführungsprozess des Programms geben kann

phpcn_u1582phpcn_u15822732 Tage vor739

Antworte allen(2)Ich werde antworten

  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-26 10:53:58

    我理解你的问题的核心是 点击速度大于500ms,是这样的,只有在同一个元素上相继触发了mousedown mouseup事件后才会触发 click事件。 触发click事件后才会执行move()

    所以你考虑的超时的情况是不会发生的。

    Antwort
    0
  • 仅有的幸福

    仅有的幸福2017-06-26 10:53:58

    你如果想用变量控制,最好把mark2移到最上面,容易看懂点。流程是这样的:
    如果你:
    点击right -----》运行异步动画-----》mark2 = false ----(0.5s后)----》mark2 = true;

    所以不管你怎么点,大于0.5s还是小于0.5s,除非动画已经运行完使得mark2为true,不然if条件那里根本进不来

    Antwort
    0
  • StornierenAntwort