书签 分享 收藏 举报 版权申诉 / 16

类型ie图片上传滤镜.docx

  • 文档编号:28482526
  • 上传时间:2023-07-14
  • 格式:DOCX
  • 页数:16
  • 大小:23.17KB


MakeNormal

【nsIDOMFile接口】

这个File对象有三个获取文件数据的方法:

getAsText:

获取文件的文本数据,可以通过参数设置编码;

getAsDataURL:

获取文件的DataURI(URL)数据;

getAsBinary:

获取文件的二进制数据。

其中getAsDataURL获得的DataURI数据可以用于显示图片,_domfileData中就是用它来获取数据的。

File对象还支持两个属性:

fileName(文件名,不包括路径)和fileSize(文件大小)。

相关具体说明参考mozilla的File和nsIDOMFile。

【DataURI和MHTML】

上面已经多次提到DataURI,详细介绍请看秦歌的“DataURI和MHTML”。

DataURI的主要作用是以字符代替数据,从而把文件“嵌”在代码里。

除了ie,其他浏览器基本都很好的支持了DataURI。

ie8也有限度地支持,详细参考msdn的dataProtocol。

由于opera,safari和chrome需要remote模式的浏览器都支持DataURI,所以程序返回的是DataURI形式的数据。

相比返回路径的方法,返回DataURI不需要创建文件,还少一次HTTP请求。

ps:

ie8只支持32k的DataURI数据,在ie8使用时要注意数据大小。

在filter模式需要一个透明图片来去掉img默认显示的小图标,一般的方法需要一个图片文件。

为了“省下”这个文件,可以使用DataURI来做一个1*1的透明图片:

data:

image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

支持DataURI的情况下,只要把img的src设置为这个值就可以显示一个透明图片了。

代码

Content-Type:

?

multipart/related;?

boundary="_CLOUDGAMER"

----Transfer-Encoding:

base64

R0lGODlhAQABAJEAAAAAAP///////wAAACH5BAEAAAIALAAAAAABAAEAAAICVAEAOw==

其中boundary的值是分隔符标识,说明用于分隔数据段的字符。

Content-Location说明关联引用位置,可以用作数据段的标识。

Content-Transfer-Encoding就是字符编码形式。

后面的代码就是1*1的透明图片的base64编码数据。

然后在代码中这样调用(例如设置img元素的src属性):

mhtml:

文件完整路径!

blankImage

就可以链接到一个透明图片了。

接着可以利用getAttribute从src获取script的完整路径:

ie6/7的getAttribute支持第二个参数,设为4表示返回完整路径的url地址,详细参考msdn的getAttributeMethod。

结合DataURI和MHTML可以这样得到透明图片数据:

?

使用时要注意:

脚本必须单独另存为一个文件,作为mhtml需要的文件路径。

要自动获取完整路径需要用script标签链接文件。

【超空间】

程序还有一个dispose方法用于销毁程序。

包括这几个部分:

_upload上传文件对象:

它本身已经有一个dispose方法来销毁程序;

_preload预载图片对象:

先清除它的onload/onerror事件再移除元素;

file和img属性:

直接设为null,由于不是程序创建的元素,留给使用者来移除。

说到移除元素,顺便说一下超空间(DOMhyperspace),这是从“ppk谈javascript”中看到的。

大概指的是当元素不在dom里面,而js又有关联时,元素并不会消失,而是保存在一个称为“超空间”的地方。

详细参考书的DOM超空间部分。

书中还说可以根据是否有parentNode来判断元素是否在超空间,但测试以下代码:

第一次parentNode都是null,没有问题,按理第二次也应该是null,但ie却是一个object。

经测试,这个object的nodeType是11,也就是一个碎片对象(FRAGMENT)。

而且各个被removeChild移除的元素的parentNode都不相同,即会生成不同的碎片对象。

这种情况算不算在“超空间”呢,不过书中也只是说“一般来说”,也不用太考究。

那么用innerHTML清除呢?

再测试以下代码:

结果在ie也是null了,看来removeChild和innerHTML在清除元素时产生了不同的结果。

那个碎片对象貌似没什么用(难道为了保证有parentNode?

),那是不是innerHTML就一定比removeChild好呢?

再测试以下代码:

代码

当使用removeChild时,移除元素的结构并没有发生变化,各个浏览器的效果都一样。

而使用innerHTML清除时,其他浏览器的效果跟removeChild一样,但在ie被移除的元素就只剩下一个“外壳”了。

个人推测,ie在使用innerHTML时,被移除的元素会变成一个个单独的元素,失去了彼此的联系。

形象点说就是removeChild是直接掰断树枝,还能继续嫁接使用,而innerHTML是把需要的树叶节点取下来,再把树枝烧掉。

ps:

仅仅是推测,谁有官方资料请告诉我。

那么removeChild的好处是移除的元素能再次使用,兼容性好,不好的地方是ie会产生一个没用的碎片对象。

而innerHTML的好处是不会产生多余的碎片对象,方便高效,但在ie被移除的元素基本不能再用,有兼容性问题。

那就可以根据需要使用不同的方法了,至于防止内存泄漏用那个好,感觉是innerHTML,但没有更深入研究的话还说不清楚。

使用技巧

一般来preview方法都是在onchange中调用,即选择文件后立即显示预览。

在不需要程序时最好执行一次dispose方法来销毁程序,防止内存泄漏等。

第二个实例中的ResetFile是用来重置file控件的,详细参考这里file的reset。

而file控件样式设置详细参考这里的file样式。

使用说明

实例化时,有两个必要参数,分别是file控件对象和img元素的预览显示对象:

new?

ImagePreview(?

file,?

img?

);

还提供了以下方法:

preview:

执行预览操作;

dispose:

销毁程序。

程序源码

代码

兼容ie和ff的图片上传预览代码

Firefox3,IE6,IE7,IE8上传图片预览

styletype="text/css">

--

#preview_wrapper{

display:

inline-block;

width:

300px;

height:

300px;

background-color:

#CCC;

}

#preview_fake{/*该对象用户在IE下显示预览图片*/

}

#preview_size_fake{/*该对象只用来在IE下获得图片的原始尺寸,无其它用途*/

visibility:

hidden;

}

#preview{/*该对象用户在FF下显示预览图片*/

width:

300px;

height:

300px;

}

-->

style>

#preview_wrapper{

display:

inline-block;

width:

300px;

height:

300px;

background-color:

#CCC;

}

#preview_fake{/*该对象用户在IE下显示预览图片*/

}

#preview_size_fake{/*该对象只用来在IE下获得图片的原始尺寸,无其它用途*/

visibility:

hidden;

}

#preview{/*该对象用户在FF下显示预览图片*/

width:

300px;

height:

300px;

}

functiononUploadImgChange(sender){

alert('图片格式无效!

');

returnfalse;

}

//(相同环境有时能显示,有时不显示),因此只能用滤镜来解决

autoSizePreview(objPreviewFake,

}

}

functiononPreviewLoad(sender){

}

functionautoSizePreview(objPre,originalWidth,originalHeight){

varzoomParam=clacImgZoomParam(300,300,originalWidth,originalHeight);

}

functionclacImgZoomParam(maxWidth,maxHeight,width,height){

varparam={width:

width,height:

height,top:

0,left:

0};

if(width>maxWidth||height>maxHeight){

rateWidth=width/maxWidth;

rateHeight=height/maxHeight;

if(rateWidth>rateHeight){

}else{

}

}

returnparam;

}



配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
ie 图片 上传 滤镜
提示  冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:ie图片上传滤镜.docx
链接地址:https://www.bdocx.com/doc/28482526.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2022 冰点文档网站版权所有

经营许可证编号:鄂ICP备2022015515号-1

收起
展开