等待窗口完成自身调整大小,然后在Angular中执行某些操作

时间:2018-01-03 21:34:45

标签: javascript angularjs

基本上,我正在尝试在调整窗口大小时进行一些计算。现在,我的代码看起来像这样:

var appWindow = angular.element($window);
appWindow.bind('resize', function () {
    // Do Something
});

然而,现在该功能有时会运行30次,所以它很慢。当窗口调整大小时,是否只有一次触发它?谢谢!

2 个答案:

答案 0 :(得分:2)

以下是实现此目的的方法:

var resizeTimeout;

appWindow.bind('resize', function() {
    clearTimeout(resizeTimeout);
    resizeTimeout = setTimeout(function() {
        // when the window stops resizing, this function will execute
    }, 200);
});

基本上,当事件触发时,它会清除现有的超时,然后设置超时。当窗口停止调整大小时,从setTimeout调用创建的最后一个超时不会被清除,因此在指定的持续时间后执行(以毫秒为单位)。

答案 1 :(得分:0)

我会尝试使用超时跟踪窗口'resize'事件,然后在完全调整大小后运行该函数:

 const phantomJsCloud = require("phantomjscloud");
 const browser = new phantomJsCloud.BrowserApi([YOURPHANTOMJSCLOUDAPIKEY]);

 var pageRequest = { content: html, renderType: "pdf" }; 

 // Send our HTML to PhantomJS to convert to PDF

 return browser.requestSingle(pageRequest)
      .then(function (userResponse) {
          if (userResponse.statusCode != 200) {
               console.log("invalid status code" + userResponse.statusCode);
            } else {
               console.log('Successfully generated PDF');

               // Save the PDF locally
               fs.writeFile(localPDFFile, userResponse.content.data, {
                           encoding: userResponse.content.encoding,
                       }, function (err) {                             
                           // Upload the file to our cloud bucket
                           return pdfBucket.upload(localPDFFile, { destination: 'desired-filename.pdf', metadata: { contentType: 'application/pdf'}}).then(() => {
                             console.log('bucket upload complete: '+ localPDFFile);
                           }).catch(error => {
                             console.error('bucket upload error:', error);
                           });
                       });

                   }

                   });

这不是非常优雅,你也可以使用Angular给你的$ timeout服务。