基本上,我正在尝试在调整窗口大小时进行一些计算。现在,我的代码看起来像这样:
var appWindow = angular.element($window);
appWindow.bind('resize', function () {
// Do Something
});
然而,现在该功能有时会运行30次,所以它很慢。当窗口调整大小时,是否只有一次触发它?谢谢!
答案 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服务。