opera9.6 的一个顽固的bug

在叙述之前 先说下 万幸 这个bug opera10已经修复了

 

divElement是一个 div元素 默认样式 width:100px;border-width:0:

window.setTimeout(function() { divElement.style.borderWidth = '20px'; }, 100);
当setTimeout回调 来改变某div的borderWidth的时候 opera9不重新渲染就是说看起来会没有变化

除非 切换焦点到其他窗口再切回来才重新渲染

我想强制他重新渲染.但问题来了.貌似opera9有缓存机制 用来减少reflow

比如我:

 window.setTimeout(function() { divElement.style.borderWidth = '20px'; divElement.style.width='1000px'; }, 100);
这样就重新渲染了
border也变了

但是一旦再改回去原来的宽

border又没了
所以 想在改变border以后 强制重新渲染貌似也不行

如:

        window.setTimeout(function() {
            show.style.borderWidth = '20px';
            show.style.width = '1000px';//强制重新渲染 此时border变化 显示出来了
            show.style.width = '100px'; //恢复原来的宽度 此时border又变成原始的0了
        }, 100);

 或者

        window.setTimeout(function() {
            show.style.width = '101px';
            show.style.borderWidth = '20px';
            show.style.width = '100px';

        }, 100);

都不行

 

解决办法 :

  window.setTimeout(function() {
            show.style.width = '101px';
            show.style.borderWidth = '20px';
            window.setTimeout(function() { show.style.width = '100px'; }, 0);
        }, 100);

 

posted @ 2009-11-26 13:56  Franky  阅读(349)  评论(1编辑  收藏  举报