以下代码涉及 Vue 2.0 及 ES6 语法。
目标
纯 javascrpit 实现,兼容ie9及以上浏览器,在本地做好文件格式、长宽、大小的检测,减少浏览器交互。
现实是残酷的,为了兼容Ie9 还是用上了 flash,第二篇来解释解释。
代码结构
<div id="wrap"> <label> 点我上传图片 <input type='file' @change="change" ref="input"> </label> <img :src="/UploadFiles/2021-04-02/src">如何获取图片大小
现代浏览器中十分简单
function getSize(e){ return e.target.files[0].size; }但 ie9 下暂时没有找到纯 JS 的方案。
因此,在需要判断大小时,遇到 ie9 直接绕过不去判断
如何预览本地图片
const refs = this.$refs const elInput = refs.input const elImg = refs.img现代浏览器中,通过调用 FileReader 读取本地图片,将图片地址转成 Base64 格式实现预览。
function getSrc(){ const reader = new FileReader(); reader.onload = (e) => { const src = e.target.result; elImg.src = src; }; if (elInput.files && elInput.files[0]) { reader.readAsDataURL(elInput.files[0]); } }但是问题又来了,ie9 并不支持 FileReader,但可以通过 ie 滤镜显示。
function getSrc(){ elInput.select(); elInput.blur(); const src = document.selection.createRange().text; document.selection.empty(); elImg.style.filter = `progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='${src}')`; }滤镜中
sizingMethod='scale'
的写法是为了图片能适应内容缩放。由于 IE9 对安全限制有所增强,实践中会遇到以下两个问题:
如果 file 控件获得焦点,则
document.selection.createRange()
拒绝访问,因此需要在elInput.select()
后面加一句elInput.blur()
即可。为了让上传按钮更美观,默认给
input[type=file]
的设置了样式visible:hidden
,这样会导致 ie9 下报错。应该会被浏览器认为欺骗用户点击,只好曲线救国。label{ overflow:hidden; } label input[type='file']{ position:absolute; top:9999px; left:9999px; }如何获取图片长宽
同理,利用 ie 滤镜和 FileReader 的方案对 ie9 和非 ie9 分别实现。
ie9 的方案
参数 src 接受的是本地图片路径
let tempEl; const getSizeIncompatible = (src, callback) => { if (!tempEl) { tempEl = document.createElement('div'); tempEl.style.position = 'absolute'; tempEl.style.width = '1px'; tempEl.style.height = '1px'; tempEl.style.left = '-9999px'; tempEl.style.top = '-9999px'; tempEl.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image)'; document.body.insertBefore(tempEl, document.body.firstChild); } tempEl.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = src; callback(tempEl.offsetWidth, tempEl.offsetHeight); };其中
sizingMethod='image'
是为了图片显示原始大小。非 ie9 方案
参数 src 接受的是 base64 编码后的图片路径
const getSize = (src, callback) => { const image = new Image(); image.onload = () => { callback(image.width, image.height); }; image.src = src; };参考
https://elemefe.github.io/ima...
总结
以上所述是小编给大家介绍的vue.js 实现图片本地预览 裁剪 压缩 上传功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]