CSS在线编辑器Banner设计手册深圳火车票取票点地址小游戏
诚聘版主万年历(老皇历)教您下附件426款社区积分小游戏
车牌归属地查询[全国]社区基本法在线计算器域名管理后台网址
发新话题
打印

IE6默认不缓存背景图片,引起鼠标抖动的解决方法

IE6默认不缓存背景图片,引起鼠标抖动的解决方法

IE6默认不缓存背景图片,引起鼠标抖动的解决方法

在IE6下,如果拖动的DOM元素使用了背景图,在Drag的过程中会出现严重的鼠标抖动现象.

在网上查了下,说是因为:IE6下默认不缓存背景图片,CSS里每次更改图片的位置时都会重新发起请求.

可用下方法来解决(让IE6缓存背景图片):

在head区(即<head>到</head>之间添加以下代码:
复制内容到剪贴板
代码:
<!--[if IE 6]>
<script type="text/javascript">
document.execCommand("BackgroundImageCache", false, true);
</script>
<![endif]-->
经测试,解决方法确实有效


作者: CNLei
From:http://www.cnlei.org/blog/article.asp?id=500
小游戏,让你玩得过瘾!

TOP

document.execCommand("BackgroundImageCache",false,true)

document.execCommand("BackgroundImageCache",false,true)

Pixy方法受到IE的cache bug影响会闪烁

其实并没有说清楚这个问题,但其实该bug是有条件的,即IE的cache设置为Every visit to the page,而不是默认的Automatically。

基本上,只有开发者才会把cache设置为每次访问检查更新,所以这个bug其实不会影响真正的用户 (根据在winxpsp2的ie6下测试,虽然可能仍然调用了一次网络存取的api,但是并没有发生实际的请求,症状就是鼠标有极短时间的抖动,但是图像 不会闪烁)。

此外有人发现了一个未公开的方法来让IE对背景图进行缓存:
复制内容到剪贴板
代码:
document.execCommand("BackgroundImageCache",false,true);
用这种方法甚至避免了api调用,貌似是直接缓存在IE内存中。

IE6下设置背景图片是不会被真正cache住的,就算服务器做了cache,如果想cache住只能~~~

做过UI设计和开发的人一定知道,IE(不包括IE7)会经常从服务器端重新载入背景图片,好端端的UI界面在IE(不包括IE7)中就这样被折腾着......

Erik发现了一个简单的解决办法(针对IE7以下的IE有效,其实在IE7中已经修复了这个Bug)

程序代码
复制内容到剪贴板
代码:
document.execCommand("BackgroundImageCache", false, true);

/**
* update@2007-04-02
*/
今天阅读Ext的源码时发现Jack Slocum已经考虑到了这一点,在Ext.js中给出了他的实现,在其它Ajax框架中应该还没有这种类似的代码,从这一个细节上就能看出Ext的全面~

程序代码
复制内容到剪贴板
代码:
var ua = navigator.appName;
var isIE = ua.indexOf("msie") > -1, isIE7 = ua.indexOf("msie 7") > -1;
// remove css image flicker
if(isIE && !isIE7){
     try{
         document.execCommand("BackgroundImageCache", false, true);
     }catch(e){}
}

/**
* update@2008-09-01
*/
今 天阅读幻宇的dreamplayer播放器源码时发现幻宇也针对IE的背景缓存进行了修复,只是他并没考虑到IE7中已经不存在这个现象了,这是 evml.js中的一段相关代码~(顺便嘀咕两句:这家伙,写JS从来不加分号的,以前是这样,现在还是这样,这样的话怎么进行压缩呀,汗~下面的代码按 照我的习惯都已加上分号,哪怕只有两三句而已~)

程序代码
复制内容到剪贴板
代码:
window.isIE=navigator.appName.indexOf("Microsoft")==0;
if(isIE){
     document.documentElement.addBehavior("#default#userdata");
     document.execCommand("BackgroundImageCache",false,true);
}
/**
* 相关原文
* by eriK @2007-02-26
*/
A while back a lot of people where covering how to work around the bug that IE always
reloads background images from the server, leading to your UI flickering.
Dean wrote one and lots of others wrote the same thing. Today, I saw this simple workaround
(from a fellow Googler who worked at Microsoft before):

document.execCommand("BackgroundImageCache", false, true)

Much simpler but makes me wonder why this is not the default setting?

/**
* 相关回复
* by Nicholas C. Zakas @2007-02-26
*/
I’ve actually wondered about this “bug” for a while.
I’m sure somewhere along the line this decision was made for a logical reason…
maybe they didn’t anticipate how much background images would be used, or maybe they thought
there was some use case under which it would be desirable not to cache the background image.
I’m generally not big on overriding things that seem to be design decisions (which this seems to be).
I’ve never really thought this was a “bug”…bugs don’t usually have switches that say “turn off bug”.


文章来源:http://hi.baidu.com/pplboy/blog/ ... a193128b82a12a.html
小游戏,让你玩得过瘾!

TOP

小游戏,尽管放马过来!
发新话题