2014-11-25 71 views
0

我写了一个类似于函数的切换效果。当用户单击按钮时,我的div会从右下角出现到页面中心,当用户再次单击按钮时,div将从页面中心返回到右下角。有关使用jquery动画功能调整div大小的问题

问题是div出现了我想要的方式,但没有调整我想要的方式。请看我的脚本,并指导我缺少什么。这里是我JS提琴链接http://jsfiddle.net/tridip/6o1wv3yt/

$(document).ready(function() { 
     var flag = false; 

     $("#Button1").click(function() { 
      if ($("#UPSContainer").exists() == false) { 
       $('form').append('<div id="UPSContainer" class="hidden" style="background:red;display:none;position:absolute;height=0px;width=0px;"></div>'); 
      } 

      if ($("#UPSContainer").hasClass("hidden")) { 

       $("#UPSContainer").css({ display: 'block' }); 

       var xleft = ($(window).width() - $("#UPSContainer").width()); 
       var xtop = ($(window).height() - $("#UPSContainer").height()); 

       $("#UPSContainer").css({ left: xleft, top: xtop, opacity: 0 }); 

       $("#UPSContainer").stop(true).animate({ 
        'left': (($(window).width() - $("#UPSContainer").width())/2) + 'px', 
        'top': (($(window).height() - $("#UPSContainer").height())/2) + 'px', 
        'height': 350 + 'px', 
        'width': 500 + 'px', 
        'marginLeft': '-250px', 
        'marginTop': '-175px', 
        'opacity': '1' 
       }, { duration: 1000, queue: false, easing: 'easeOutQuart', 

        step: function (now, tween) { 
         if (tween.prop === 'width') { 
          if (now >= 50) { 
           //console.log('Width reached 50%'); 
           if (!flag) { 
            flag = true; 
            $("body").append('Width reached 50%' + now); 
           } 
          } 
         } 
        }, 
        complete: function() { 
         $("#UPSContainer").removeClass("hidden").addClass("Shown"); 
        } 
       }); 
      } 
      else if ($("#UPSContainer").hasClass("Shown")) { 

       var xleft = $(window).width(); 
       var xtop = $(window).height(); 

       $("#UPSContainer").stop(true).animate({ 
        'left': $(window).width() + 'px', 
        'top': $(window).height() + 'px', 
        'height': 0 + 'px', 
        'width': 0 + 'px', 
        'opacity': '0' 
       }, { duration: 1000, queue: false, easing: 'easeOutQuart', 

        step: function (now, tween) { 
         if (tween.prop === 'width') { 
          if (now >= 50) { 
           //console.log('Width reached 50%'); 
           if (!flag) { 
            flag = true; 
            $("body").append('Width reached 50%' + now); 
           } 
          } 
         } 
        }, 
        complete: function() { 
         $("#UPSContainer").removeClass("Shown").addClass("hidden"); 
        } 
       }); 

      } 

      return false; 
     }); 


     jQuery.fn.exists = function() { return this.length > 0; } 
    }); 
+0

工作在这里很好。你如何期望它完全调整大小? – Behrang 2014-11-25 14:46:36

+0

我希望它出现的方式与它应该消失的方式一样。当你点击第二次按钮时,你会注意到div没有进入右下角。我想div应该去右下角。 – Thomas 2014-11-25 14:56:35

+0

当div离开眼睛时,我想要这种效果。只是检查此链接jsfiddle.net/p4e4psg4/5/ – Thomas 2014-11-25 15:19:52

回答

1

编辑,更新(V4)

尝试

HTML

<button>click</button> 
<br> 
<div class="square"></div> 

CSS

.square { 
    width:0px; 
    height:0px; 
    background:red; 
    position:absolute; 
    opacity:0; 
    left:calc(100% + 20px); 
    top:calc(100% + 20px); 
} 

JS

$.fn._fadeToggle = _fadeToggle; 

function _fadeToggle(d, callback) { 
    var elem = $(this); 
    var body = $("body"); 
    var settings = elem.is(":hidden") ? "+" : "-"; 
    return elem.stop(true, true).animate({ 
     left: (parseInt(elem.css("left")) > window.innerWidth ? "-" : "+") 
       + "=" + (window.innerWidth + 325)/2 + "px", 
     top: (parseInt(elem.css("top")) > window.innerHeight ? "-" : "+") 
      + "=" + (window.innerHeight + 325)/2 + "px", 
     width: settings + "=300" + "px", 
     height: settings + "=300" + "px", 
     opacity: elem.is(":hidden") ? "1" : "0" 
    }, { 
     duration: d, 
     easing: "easeOutQuart", 
     step: function (fx, tween) { 
      body.css("overflow", "hidden") 
     }, 
     done: function (promise) { 
      body.css("overflow", "inherit") 
     }, 
     complete: !!callback ? callback : $.noop() 
    }) 
}; 

$("button").on("click", function() { 
    var el = $(".square"); 
    el.is(":animated") ? el.queue("fx", function() { 
     el._fadeToggle(1000, function() { 
      console.log("complete") 
     })}) : 
    el._fadeToggle(1000, function() { 
      console.log("complete") 
     }) 
}) 

的jsfiddle http://jsfiddle.net/guest271314/L7jLmsgn/1/

+0

如果可能只是看到我的js小提琴链接和编辑我的脚本,像这样的链接jsfiddle.net/p4e4psg4/5/ – Thomas 2014-11-25 15:19:13

+0

我想当用户点击按钮第二次然后div应该调整大小并像这个链接移动到右下角jsfiddle.net/p4e4psg4/5/,但这个链接使用巨大的代码来做到这一点。我只是想要它非常简单的方法来隐藏像调整大小的div并移动到右下角。 – Thomas 2014-11-25 15:21:41

+0

在你的情况下,当div隐藏,那么目前滚动条即将到来,这是不正确的,我不想。 – Thomas 2014-11-25 15:23:53