位置: 编程技术 - 正文

js实现纯前端的图片预览(html&js+前端)

编辑:rootadmin

推荐整理分享js实现纯前端的图片预览(html&js+前端),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端js代码规范,js写前端页面,js写前端页面,前端js代码规范,js写前端页面,javascript前端开发教程,js实现纯前端的输入,js实现纯前端的输入,内容如对您有帮助,希望把文章链接给更多的朋友!

图片上传是一个普通不过的功能,而图片预览就是就是上传功能中必不可少的子功能了。在这之前,我曾经通过订阅input[type=file]元素的onchange事件,一旦更改路径则将图片上传至服务器,接着就获取图片路径并赋值到img元素上。先不管文件异步提交的解决方案,就是服务端清理那些临时的预览图片已经增加不少工作量了。

偶然从MDN上找到纯前端图片预览的相关资料,经过整理后记录下来以便日后查阅。

一、准备功夫1──FileReader                        

FileReader是HTML5的新特性,用于读取Blob和File类型的数据。具体的用法如下:

(1). 构造方式

var fr = new FileReader();(2). 属性

readyState:类型为unsigned short,FileReader实例的当前状态,(EMPTY——0,还没有加载任何数据;LOADING——1,数据正在加载;DONE——2,已完成全部的读取请求),只读。

result:读取到的文件内容,只读。

error:类型为DOMError,表示在读取文件时发生的错误,只读。

(3). 方法

abort():中止读取操作,并将readyState设置为DONE。当没有执行读取操作时,调用该方法会抛DOM_FILE_ABORT_ERR异常。

readAsArrayBuffer(Blob blob):读取数据,result属性被设置为ArrayBuffer类型

readAsText(Blob blob [, encoding='utf-8']):读取数据,result属性被设置为String类型

readAsBinaryString(Blob blob):读取数据,result属性被设置为原始二进制数据

readAsDataURL(Blob blob):读取数据,result属性被设置为Data URI Scheme形式(具体请浏览《JS魔法堂:Data URI Scheme介绍》)

(4).事件

onload:读取数据成功后触发

onerror:读取数据时抛异常时触发

onloadstart:读取数据前触发

onloadend:读取数据后触发,在onload或onerror后触发

onabort:中止读取后触发

js实现纯前端的图片预览(html&js+前端)

onprogress:读取过程中周期性触发

(5). 浏览器支持

FF3.6+,Chrome7+,IE+

二、准备功夫2──DXImageTransform.Microsoft.AlphaImageLoader滤镜    

(1). 作用:主要作用是对图片进行透明处理(IE5.5~6并不支持透明的png)

(2). 样式中的使用方式

(3). JS中的使用方式

(4). 属性

enabled:可选项,设置滤镜是否激活。值范围true(默认),false

sizingMethod:可选项,设置滤镜作用的图片在容器边界内的显示方式,值范围crop(剪切图片以适应容器尺寸),image(默认值,增大或缩小容器尺寸以适应图片的尺寸),scale(缩放图片以适应容器尺寸)

src:必填项,使用绝对或相对URL指向背景图片。当URL为用户计算机本地地址时有效, 而img元素的src为用户计算机本地地址时会抛不允许访问本地文件系统的异常。

三、实现                                

接下来我们就利用FileReader的readAsDataURL来获取Data URI Scheme来实现图片预览的功能,而IE5.5~9我们就使用滤镜DXImageTransform.Microsoft.AlphaImageLoader来作降级处理。

html片断:

js片断:

四、坑                                  

由于IE作了安全方面的考虑,使得在input[type=file]元素上通过value、outerHTML和getAttribute的方式都无法获取用户所选文件的真实地址,只能获取到 C:fakepath文件名称 。因此假如使用IE,但文本模式却设置为以下,那就没木有办法实现图片预览了。

解决办法1──在head标签下加入这句: <meta http-equiv="X-UA-Compatible" content="IE=Edge"> 。这样就可以告诉IE,默认使用当前IE的最高版本解析、渲染网页了。

解决办法2──采用 document.selection.createRangeColleciton() 获取真实地址,具体操作如下:

五、补充:使用window.URL.createObjectURL代替FileReader      

通过FileReader的readAsDataURL方法获取的Data URI Scheme会生成一串很长的base字符串,若图片较大那么字符串则更长,若页面出现reflow时则会导致性能下降。解决方案如下:

1. 预览的img标签使用绝对定位,从而脱离正常文档流,那么就与文档的其他元素无关了,而reflow时则不会影响性能。

2. 采用 window.URL.createObjectURL(Blob blob) 生成数据链接。

注意: window.URL.createObjectURL 生成的数据链接是独占内存的,因此若不时用时需要调用 window.URL.revokeObjectURL(DOMString objUrl) 来释放内存。在刷新页面时,也会自动释放内容。

标签: html&js+前端

本文链接地址:https://www.jiuchutong.com/biancheng/373366.html 转载请保留说明!

上一篇:简介BootStrap model弹出框的使用(简介英文)

下一篇:JavaScript弹窗基础篇(javascript弹窗函数)

  • 2023小规模纳税人所得税税收优惠政策
  • 自来水安装增值税税率
  • 应交税费会计分录怎么做明细科目
  • 小规模纳税人劳务分包税率
  • 餐饮企业销售外购食品 增值税税率cpa
  • 营改增对电信业的影响及对策
  • 自产自用应税消费品
  • 餐饮无票收入怎么做账
  • 管理费用是进项还是销项
  • 进项税额转出会影响利润吗
  • 一般纳税人在国家电子税务局里面如何添加银行账户
  • 增值税的税负率就是用应缴纳的增值税总额
  • 福利费开专票怎么处理
  • 股东私人垫支公司支付零星材料的会计分录
  • 厂家给返点算拿回扣吗
  • 1697506686
  • 财产行为税税种
  • 咨询费如何缴纳个税
  • 财务费用包括哪些主要内容
  • 发票金额大于开票金额
  • 项目工程会计账务处理
  • 会计差错更正账务处理 对股价影响
  • 在win10系统中如何找到应用
  • 扬声器音量调节
  • adv举例
  • 以租代购怎么入账
  • 福利企业退税计入哪个科目
  • php常用的设计模式在开发中的实例
  • 如何使专业人员的工作卓有成效读后感悟
  • 展开双翅的绯红之花
  • 初学者是啥意思
  • 财务的几张报表
  • 自动驾驶感知决策控制
  • 数据库arc文件
  • 赔偿金需要交税么
  • 信息技术服务所得税税负率多少
  • 电子发票怎么开具?
  • 小规模纳税人的企业所得税怎么算
  • 包装物为什么是无菌的
  • 什么情况下可以提取公积金
  • 工资薪金和外出费用区别
  • 织梦文章标题显示不全
  • python time. time
  • 个体户3万免税规定2019
  • 进项税额计提是哪个科目
  • 政府奖励收入要交所得税吗
  • 小规模公司的做账要求
  • 新会计准则规定
  • 全年一次性奖金税率表2023最新
  • 食堂维修费用计入什么科目
  • 资产负债表与利润表的关联性可在存货与销售成本
  • 接受捐赠收入作为广告费扣除基数吗
  • 财务管理税后利息费用都包含什么
  • 购买花卉
  • 材料成本差异的含义
  • 高新技术企业认定条件
  • 开专票需要什么条件呢怎么开
  • 土地拍卖相关法律法规
  • 采购材料发票未到
  • 成立教育培训司
  • 公司想自己开发票怎么申请
  • 养老院老人摔倒责任划分
  • 企业会计准则和小企业准则的区别
  • sql server数据库使用
  • Windows Update XP SP3官方下载地址
  • Percona Server 5.5.44-37.3/5.6.25-73.0 发布
  • WIN10开始菜单点不动
  • 【Cocso2d-x Lua笔记五】quick中的display
  • win sc
  • 深入浅出Struts
  • 安卓录制音频
  • js实现表格动态合并单元格
  • 安卓activity和fragment的区别
  • python网络编程从入门到精通
  • 安徽税务网上申报领取发票
  • 河北云办税厅2.0登录
  • 北京四合院为什么出名那么多
  • 孵化企业税收优惠
  • 湖南长沙税务局上班时间
  • 公司以融资租赁形式从事非法放贷业务,,能否让法院判
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设