javascript - 如何获得平滑的 JavaScript 弹出窗口大小调整

标签 javascript

我希望弹出窗口在关闭之前调整为最小尺寸。我希望用户看到动画,以便他们了解他们正在使用的窗口正在消失。

我想出了以下代码,但它非常锯齿。有没有更顺畅的方法呢? 谢谢!

function resizeWindow() {

    setTimeout(function() {
        window.resizeTo(500, 500);
    }, 100);
    setTimeout(function() {
        window.resizeTo(475, 475);
    }, 125);
    setTimeout(function() {
        window.resizeTo(450, 450);
    }, 150);
    setTimeout(function() {
        window.resizeTo(425, 425);
    }, 175);
    setTimeout(function() {
        window.resizeTo(400, 400);
    }, 200);
    setTimeout(function() {
        window.resizeTo(350, 350);
    }, 250)
    setTimeout(function() {
        window.resizeTo(300, 300);
    }, 300);
    setTimeout(function() {
        window.moveTo(900, 600);
    }, 350);
    setTimeout(function() {
        window.resizeTo(100, 100);
    }, 400);
    setTimeout(function() {
        window.resizeBy(10, 10);
    }, 500);
    setTimeout(function() {
        window.close();
    }, 500);

}

最佳答案

使用jQuery 动画 http://api.jquery.com/animate/

下面的函数可以与任何 div 大小一起使用,并且您可以设置任何您想要的动画时间

$(".closeBtn").click(function() {
  var parentElem = $(this).parents(".popup").first() ; //Get the parent div that needs to be closed
  
  parentElem.animate({ //set width and height of the parent div to 0
    "width": "0",
    "height": "0"
  },
  1000, //Animation time: 1000ms = 1 sec
  function() {
    parentElem.hide() ; //After the animation if finished, hide the div (you can use .remove() if you wish to remove the div completely
  })
}) ;
.popup{
  border: 1px solid #000;
  width: 250px;
  height: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="popup">
  Pop up text goes here.
  <br />
  <a href="javascript:;" class="closeBtn">Click here to close</a>
</div>

Updated Answer

对上面的回答感到抱歉,但我没理解这个问题。

我已经想出了一个解决方案。我不知道这是否是完美的解决方案。但至少它有效。

下面是弹窗内容。

我创建了一个函数animateClose(),它将持续时间(以毫秒为单位)作为参数。

调用时,它将计算窗口的宽度和高度,然后将参数中给出的持续时间除以 10 来计算要执行的循环次数(弹出窗口将每 10 毫秒动画一次)

当弹出窗口达到给定的持续时间时,它将关闭

<div class="main">
    <a href="javascript:;" class="closeWindow">Close Window</a>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
    $(function() {
        $(".closeWindow").click(function() {
            animateClose(500) ;
        }) ;
    }) ;

    function animateClose(time) {
        if (time == undefined || time == null) {
            time = 1000 ;
        }

        var w = $(window).width() ; //Get window width
        var h = $(window).height() ; //Get window height

        var loops = time * 0.1 ; //Get nb of loops

        var widthDecreasePercentage = (w / loops) * -1 ;
        var heightDecreasePercentage = (h / loops) * -1 ;

        var loopInterval = setInterval(function(){
            window.resizeBy(widthDecreasePercentage, heightDecreasePercentage) ;
            loops-- ;

            if (loops <= 0) {
                clearInterval(loopInterval) ;
                window.close() ;
            }
        }, 10);
    }
</script>

关于javascript - 如何获得平滑的 JavaScript 弹出窗口大小调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47218086/

相关文章:

javascript - 使用 jQuery 动态更改对象参数

javascript - 如何在 SharePoint 2013 JSOM 中设置 URL 字段的值

javascript - 服务人员 : How to cache the first (dynamic) page

php - JavaScript 与 PHP,通过 URL(post)操作 XML 值(元素的文本)

javascript - 通过 Angular 2/Ionic 2 中的构造函数刷新数据

javascript - 无法弄清楚为什么 javascript 在 JavaScript 中评估为未识别

php - 如何使用js在网络浏览器中 trim 图像并将其保存在服务器上?

javascript - 使用正则表达式获取所有 URL 参数

javascript - Chrome 扩展选项卡图标

javascript - Karma - 我可以使用脚本标签代替 karma.config.files 吗?