0

意图:

  1. 单击 (#clickme) 时,DIV 会向下滑动并进入视图,并且 (var isclicked = true)
  2. 当 (var isclicked = true) 并单击 (#clickme) 时,DIV 向上滑动并且 (var isclicked = false)
  3. 当 (var isclicked = true) 并且 DIV 在视图中时,单击 $('html') 会向上滑动 DIV 并且 (var isclicked = false)

问题:当 DIV 处于 slideDown 位置时,(var isclicked = true),单击 $('html') 时会继续触发。我错过了什么,所以点击 $('html') 只会触发 WHILE DIV is (var isclicked = true)

var isclicked = false; 
$('#clickme').click(function(event){
  doslider();       
  console.log(isclicked);    
  if(isclicked == true){
     $('html').click(function(event){
         console.log('is box opened? '+isclicked);
     });        
  } 
});


function doslider(){     
 if(isclicked == false){    
     $('#myslider').slideDown('slow');         
       isclicked = true;                
 }else{
     $('#myslider').slideUp('slow');
       isclicked = false;          
 }   
 return isclicked; }

JSFiddle:http: //jsfiddle.net/7Zfwx/92/

4

3 回答 3

1

请记住首先停止(并完成)上一个动画:

if(isclicked == false){    
    $('#myslider').stop(true, true).slideDown('slow');
      isclicked = true;       
}else{
    $('#myslider').stop(true, true).slideUp('slow');
      isclicked = false;   
}

演示:http: //jsfiddle.net/maniator/7Zfwx/94/

于 2013-07-30T17:07:41.440 回答
1

抛弃全局isClicked变量,只使用一个slideToggle

$("#clickme").click(function(e) {
    e.stopPropagation();
    $("#myslider").slideToggle("slow");
});

$("body").click(function() {
    $("#myslider").is(":visible") ? $("#myslider").slideUp("slow") : 0
});

演示:http: //jsfiddle.net/7Zfwx/103/

于 2013-07-30T17:12:51.050 回答
0

使用$('body')而不是$('html')

看到这个 JSFiddle

于 2013-07-30T17:23:32.330 回答