web 图片上传实现本地预览
在说上传之前先说说如何替换or美化浏览器自带的简陋上传按钮(自定义自己的上传按钮 如:img):
1.将自定义上传按钮上方添加 input file 框,实现input实现透明处理。
2.对自定义上传按钮添加事件。隐藏真正input框。用事件来触发:
function imgBtn(){
return document.getElementById("inputid").click();
}
现在浏览器基本都支持H5 。针对H5的代码:
var docObj=document.getElementById("inputid");//file文本框id
var imgObjPreview=document.getElementById("imgId");//预显示的图片
imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
针对ie的代码:
docObj.select();
docObj.blur();
var localImagId = document.getElementById("divid or imgid");
var imgSrc = docObj.createTextRange().text;
try{
localImagId.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
}
catch(e)
{
console.log(e);
alert("您上传的图片格式不正确,请重新选择!");
return false;
}
很多大型网站上都使用到了这个滤镜,它是IE滤镜的一种,其主要作用就是对图片进行透明处理。虽然FireFox和IE7以上的IE浏览器已经支持透明的PNG图片,但是就IE5-IE6而言还是有一定的意义。
语法:
filter : progid:DXImageTransform.Microsoft.AlphaImageLoader ( enabled=bEnabled , sizingMethod=sSize , src=sURL )
属性:
enabled : 可选项。布尔值(Boolean)。设置或检索滤镜是否激活。true | false (这个基本可以忽略,被禁止了那还搞什么……) true : 默认值。滤镜激活。 false : 滤镜被禁止。 sizingMethod : 可选项。字符串(String)。设置或检索滤镜作用的对象的图片在对象容器边界内的显示方式。(可以无视这行说明,关键是下面的参数。一般来说单独图片且精度比较高的使用scale比较合适,除非您把所有的要用到的图片都放到一张图那就当我没说过。但是那样做的话这张png图片的体积估计不会很小。另,这个滤镜只是加载,其填充方式还是可以受CSS控制的。) crop : 剪切图片以适应对象尺寸。 image : 默认值。增大或减小对象的尺寸边界以适应图片的尺寸。 scale : 缩放图片以适应对象的尺寸边界。 src : 必选项。字符串(String)。(指定图片的路径。要注意的是这个路径是指加载滤镜的页面相对于图片的路径而不是css文件相对于图片的路径。这跟一般的图片加载有区别。)
使用实例:
.login_logo {
background-image: url(../Image/login_logo.png);
_background-image: none;
_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src='/Public/Image/login_logo.png');
}
上面那样预览,图片的临时格式是这样的:blob:http://XXX.com/3fdc2df8-bb2d-479a-bb45-796f976d0b27
参考: https://www.cnblogs.com/hzxy-blog/p/6410204.html
上面怎么点击浏览按钮后,图片显示在网页中了,这个用到了, 浏览按钮的各个事件 可以参考下...
<body>
<input type="file" id="input">
</body>
<script>
document.getElementById("input").addEventListener("focus",function () {
console.log("focus");
}); document.getElementById("input").addEventListener("mousedown",function () {
console.log("mousedown");
}); document.getElementById("input").addEventListener("mouseup",function () {
console.log("mouseup");
}); document.getElementById("input").addEventListener("input",function () {
console.log("input");
}); document.getElementById("input").addEventListener("change",function () {
console.log("change");
}); document.getElementById("input").addEventListener("blur",function () {
console.log("blur");
}); document.getElementById("input").addEventListener("click",function () {
console.log("click");
}); </script>
onchange可以这样写:(本地就可以浏览要上传的文件了)
var docObj=document.getElementById("uploaderInput");//获取input=file 按钮对象
var imgObjPreview=document.getElementById("imgId");//获取一个img的对象
imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);//把file选中的图片临时地址复制给img的src-- 很容易理解
//和上面没关系--这个直接把一个li元素包着图片显示,
let bg = window.URL.createObjectURL(docObj.files[0]);//ES6 定义一个变量
let el = `<li class="weui-uploader__file" style="background-image:url(${bg})"></li>`;//ES6 新特性,模板字符串替换变量, 原来JavaScript需要用+号拼接,很麻烦...
或一个现成写法:
function clickup(obj1,obj2)
{
//获取点击的文本框
var file = document.getElementById("uploaderInput");
//存放图片的父级元素
var imgContainer = document.getElementsByClassName(obj1)[0];
//获取的图片文件
var fileList = file.files;
//文本框的父级元素
var input = document.getElementsByClassName(obj2)[0];
var imgArr = [];
//遍历获取到得图片文件
for (var i = 0; i < fileList.length; i++) {
let imgUrl = window.URL.createObjectURL(file.files[i]);
alert(imgUrl);
$("#uploaderFiles").append(`<li class="weui-uploader__file" style="background-image:url(${imgUrl})"></li>`); //imgArr.push(imgUrl);
//var img = document.createElement("img");
//img.setAttribute("src", imgArr[i]); }
web 图片上传实现本地预览
也可以这样 :
html之file标签 --- 图片上传前预览 -- FileReader
https://www.cnblogs.com/tandaxia/p/5125275.html
web 图片上传实现本地预览的更多相关文章
- jquery实现图片上传前本地预览
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- jquery实现图片上传前本地预览功能
HTML <img id="pic" src="" > <input id="upload" name="fil ...
- java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。
java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...
- jsp+springmvc实现文件上传、图片上传和及时预览图片
1.多文件上传:http://blog.csdn.net/a1314517love/article/details/24183273 2.单文件上传的简单示例:http://blog.csdn.net ...
- 图片上传前的预览(PHP)
1.先创建一个file表单域,我们需要用它来浏览本地文件.<form name="form1" id="form1" method="post& ...
- 分离与继承的思想实现图片上传后的预览功能:ImageUploadView
本文要介绍的是网页中常见的图片上传后直接在页面生成小图预览的实现思路,考虑到该功能有一定的适用性,于是把相关的逻辑封装成了一个ImageUploadView组件,实际使用效果可查看下一段的git效果图 ...
- 基于Jcrop的图片上传裁剪加预览
最近自己没事的时候研究了下图片上传,发现之前写的是有bug的,这里自己重新写了一个! 1.页面结构 <!DOCTYPE html> <html lang="en" ...
- file图片上传之前先预览
链接:https://www.cnblogs.com/tandaxia/p/5125275.html 记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<inp ...
- js实现图片上传后即时预览
//关于FileReader对象 http://blog.csdn.net/zk437092645/article/details/8745647 <!DOCTYPE html> < ...
随机推荐
- ubuntu 16.04.1 LTS zabbix-agent安装
$ wget http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.0-1+xeni ...
- C++线段树模板(区间和、区间加)
操作说明: segtree<T>tree(len) =>创建一个内部元素类型为T.区间为1-len的线段树tree tree.build(l,r) =>以[l,r]区间建立线段 ...
- Forward与include的区别
Forward与include的区别 <jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入. < ...
- [Codeforces 19E] Fiary
Brief Intro: 给定一个无向图,询问删去哪条边能使得剩下的图为一个二分图,输出所有结果 Algorithm: 关于二分图的重要性质:一个图为二分图的充要条件为其中没有奇环 1.如果没有奇环, ...
- 【DFS序】【莫队算法】【权值分块】bzoj1803 Spoj1487 Query on a tree III
基本等同这个,只是询问的东西不大一样而已. http://www.cnblogs.com/autsky-jadek/p/4159897.html #include<cstdio> #inc ...
- python3开发进阶-Djamgo框架中的JSON和AJAX
阅读目录 什么是JSON 什么是AJAX AJAX常见的应用情景 jQery实现AJAX AJAX请求如何设置csrf_token AJAX上传文件 补充Django内置的serializers 一. ...
- Java概述--Java开发实战经典
1)Java有三个发展方向,分别是Java SE,Java EE,Java ME.以下简要介绍. a.Java SE,Java Standard Edition(java标准版),包含了构成java语 ...
- SecureCRT实现跳板机自动登录
背景: 1.通常运维会开放几个内网的机器能跳转到外网机器进行访问,这样的就是跳板机. 2.比如线上有120.0.0.2这台机器,而内网192.168.1.2这台连接了VPN,能通过SSH登录120.0 ...
- IntelliJ IDEA下Maven控制台出现中文乱码问题解决
Setting->maven->runner: VMoptions: -Dfile.encoding=GB2312 不一定有效,要不断的尝试.
- 两道Java面试题!
body { font-family: 微软雅黑; font-size: 14px; line-height: 2; } html, body { color: inherit; background ...