javascript - 为什么 Mootools Multibox 中的图像在第一次显示时会有滚动条?

标签 javascript image mootools cross-browser

我们正在使用Mootools Multibox显示图像。

我们第一次使用 Chrome 和 Safari 查看它时,图像被放大并有滚动条。 当我们重新加载页面时,图像会正确显示,没有滚动条。

这可能是什么原因造成的?

我们如何解决此问题,以便图像在 Chrome 和 Safari 中首次查看时以正确的尺寸显示?

最佳答案

在此代码块中:

showContent: function(){
    this.box.removeClass('MultiBoxLoading');
    this.removeContent();
    this.contentContainer = new Element('div', {
        'id': 'MultiBoxContentContainer',
        'styles': {
            opacity: 0,
            width: this.contentObj.width,
            height: (Number(this.contentObj.height)+this.contentObj.xH)
        }
    }).inject(this.box,'inside');

它直接将内容框的宽度设置为contentObj.width。如果浏览器在缓存中有图像,那就很好 - 此时它会工作,但如果没有,则不太好。

它使用 Asset.js 在这里加载图像:

load: function(element){
    this.box.addClass('MultiBoxLoading');
    this.getContent(element);
    if(this.type == 'image'){
        var xH = this.contentObj.xH;
        this.contentObj = new Asset.image(element.href,{onload:this.resize.bind(this)});
        this.contentObj.xH = xH;
    }else{
        this.resize();
    };
},

问题是,只有在 onload 触发后,浏览器才知道图像的实际宽度和高度(如果不绑定(bind)到类范围,则可以通过 this.width/this.height 获得)。虽然这会提前返回一个图像对象(进入 contentObj),但它可能不应该现在就返回,而应该在 onload 触发后执行。这里的 onload 应该是将图像注入(inject)到容器中并设置宽度和高度来托管它。 相反,它应用this.resize(image)

我希望这能给您一些关于如何重构该类以使其更好地工作的想法。

另外:var xH = this.contentObj.xH;this.contentObj.xH = xH; -> 直接将其他元素存储到对象中?这早于 mootools 1.2,它引入了基于闭包的每个元素的 uid 特定存储。不好的做法,可能会导致 IE 缓慢、内存泄漏等。

使用 this.contentObj.retrieve("xH") 重构 this.contentObj.store("xH", Something) 以将其恢复

关于javascript - 为什么 Mootools Multibox 中的图像在第一次显示时会有滚动条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4864385/

相关文章:

c# - 如何防止 JavaScript 中的循环导致浏览器或应用程序崩溃?

image - 如何在 OpenCV 中计算一个点的 3D 坐标

javascript - 在 mootools 中使用超时

javascript - Internet Explorer 是否支持 arguments.callee.name?

javascript - 当 iframe url 更改时如何更改包装器

javascript - [].slice 或 Array.prototype.slice

javascript - 返回特定键的未定义 bool 值的 JSON 字符串的 JSON.parse

jquery - 图像的 anchor href 是否使其下载?

image - 静止图像的 OpenCV 失真问题

javascript - 使用javascript加载部分内容