actionscript 3 contentHeight 没有正确更新
actionscript 3 contentHeight not updating properly
我正在使用带有 actionscript 的 Adobe Flash Builder 制作桌面应用程序。
我从网页中获取一些 html 代码并将其放入 mx:html 元素中,然后尝试获取内容高度以确定是否应隐藏垂直滚动条。但是,当使用 contentHeight 时,它似乎 return 元素先前状态的高度,而不是刚刚设置的高度。
这是获取 html 页面的代码
var htmlPageRequest:URLRequest = new URLRequest(url);
htmlPageRequest.method = URLRequestMethod.GET; //set request's html request method to GET
htmlPageLoader.addEventListener(Event.COMPLETE, onHtmlLoaded); //listen for page load
htmlPageLoader.load(htmlPageRequest);//when loaded continue logic in new function
这是页面请求完成后运行的函数
private function onHtmlLoaded(e:Event):void { //logic after html page has loaded
HtmlElement.data = htmlPageLoader.data; //set content
//determine if vscroll bar should be visible
if(HtmlElement.contentHeight > HtmlElement.height) {
scrollbar.visible = true;
}
else {
scrollbar.visible = false;
}
trace(HtmlElement.height);
trace(HTMLELEMENT.contentHeight);
}
我假设您在此处使用 URLLoader
(htmlPageLoader
) 实例将网页加载到 mx:HTML
元素中,这可能不是实际需要的。
mx:HTML
组件实际上提供了一种将网页加载到自身的内置方式。这可以使用 mx:HTML
class 的 location
属性 来完成。它需要一个简单的字符串,它可以是您要加载的网页的 URL。
加载网页后,将触发 Event.COMPLETE
方法,在该方法中您应该能够正确获取内容高度。所以请尝试以下代码:
htmlElement.addEventListener(Event.COMPLETE, onHtmlLoaded);
htmlElement.location = "your URL goes here";
private function onHtmlLoaded(e:Event):void
{
htmlElement.removeEventListener(Event.COMPLETE, onHtmlLoaded);
trace(htmlElement.contentHeight);
}
我已经用几个 URL 尝试了上面的方法,它似乎工作正常。另外,我冒昧地使用 htmlElement
的驼峰命名规则。这只是最佳实践。
希望这对您有所帮助。干杯。
我已经实现了问题的解决方法:
htmlElement.data = htmlPageLoader.data;
呈现 HTML 需要一定的时间 - 在页面实际呈现之前访问 contentHeight,导致返回先前的值。
为了解决这个问题,我为 (htmlRender) 添加了一个事件侦听器,以便在渲染完成之前不访问 contentHeight。
private function onHtmlLoaded(e:Event):void { //logic after html page has loaded
htmlElement.addEventListener(Event.HTML_RENDER, onHtmlRendered); //once the html has rendered, move on
htmlElement.data = htmlPageLoader.data; //render content
}
private function onHtmlRendered(e:Event):void { //logic for after the page has rendered
//if the content of the HTML element is bigger than the box, show the scrollbar
if(htmlElement.contentHeight > htmlElement.height) {
scrollbar.visible = true;
}
else {
scrollbar.visible = false;
}
}
我正在使用带有 actionscript 的 Adobe Flash Builder 制作桌面应用程序。 我从网页中获取一些 html 代码并将其放入 mx:html 元素中,然后尝试获取内容高度以确定是否应隐藏垂直滚动条。但是,当使用 contentHeight 时,它似乎 return 元素先前状态的高度,而不是刚刚设置的高度。
这是获取 html 页面的代码
var htmlPageRequest:URLRequest = new URLRequest(url);
htmlPageRequest.method = URLRequestMethod.GET; //set request's html request method to GET
htmlPageLoader.addEventListener(Event.COMPLETE, onHtmlLoaded); //listen for page load
htmlPageLoader.load(htmlPageRequest);//when loaded continue logic in new function
这是页面请求完成后运行的函数
private function onHtmlLoaded(e:Event):void { //logic after html page has loaded
HtmlElement.data = htmlPageLoader.data; //set content
//determine if vscroll bar should be visible
if(HtmlElement.contentHeight > HtmlElement.height) {
scrollbar.visible = true;
}
else {
scrollbar.visible = false;
}
trace(HtmlElement.height);
trace(HTMLELEMENT.contentHeight);
}
我假设您在此处使用 URLLoader
(htmlPageLoader
) 实例将网页加载到 mx:HTML
元素中,这可能不是实际需要的。
mx:HTML
组件实际上提供了一种将网页加载到自身的内置方式。这可以使用 mx:HTML
class 的 location
属性 来完成。它需要一个简单的字符串,它可以是您要加载的网页的 URL。
加载网页后,将触发 Event.COMPLETE
方法,在该方法中您应该能够正确获取内容高度。所以请尝试以下代码:
htmlElement.addEventListener(Event.COMPLETE, onHtmlLoaded);
htmlElement.location = "your URL goes here";
private function onHtmlLoaded(e:Event):void
{
htmlElement.removeEventListener(Event.COMPLETE, onHtmlLoaded);
trace(htmlElement.contentHeight);
}
我已经用几个 URL 尝试了上面的方法,它似乎工作正常。另外,我冒昧地使用 htmlElement
的驼峰命名规则。这只是最佳实践。
希望这对您有所帮助。干杯。
我已经实现了问题的解决方法:
htmlElement.data = htmlPageLoader.data;
呈现 HTML 需要一定的时间 - 在页面实际呈现之前访问 contentHeight,导致返回先前的值。 为了解决这个问题,我为 (htmlRender) 添加了一个事件侦听器,以便在渲染完成之前不访问 contentHeight。
private function onHtmlLoaded(e:Event):void { //logic after html page has loaded
htmlElement.addEventListener(Event.HTML_RENDER, onHtmlRendered); //once the html has rendered, move on
htmlElement.data = htmlPageLoader.data; //render content
}
private function onHtmlRendered(e:Event):void { //logic for after the page has rendered
//if the content of the HTML element is bigger than the box, show the scrollbar
if(htmlElement.contentHeight > htmlElement.height) {
scrollbar.visible = true;
}
else {
scrollbar.visible = false;
}
}