Javascript图片上传前的本地预览实例


Posted in Javascript onJune 16, 2014

图片的上传预览功能主要用于图片上传前的一个效果的预览,目前主流的方法主要有js,jquery与flash实现,但我们一般都会使用js来实现图片上传预览功能,下面来看一个例子。

原理:

分为两步:当上传图片的input被触发并选择本地图片之后获取要上传的图片这个对象的URL(对象URL);把对象URL赋值给事先写好的img标签的src属性即可把图片显示出来。

在这里,我们需要了解Javascript里File对象、Blob对象和window.URL.createObjectURL()方法。

File对象:

File对象可以用来获取某个文件的信息,还可以用来读取这个文件的内容.通常情况下,File对象是来自用户在一个input元素上选择文件后返回的FileList对象,也可以是来自由拖放操作生成的 DataTransfer对象.
下面来看获取FileList对象:

<script type="text/javascript" src="jquery.js"></script>
<input id="upload" type="file">
<img id="preview" src="">
<script type="text/javascript">
$('#upload').change(function(){
    // 获取FileList的第一个元素
    alert(document.getelementbyid('upload').files[0]);
});
</script>

Blob对象:

一个Blob对象就是一个包含有只读原始数据的类文件对象.Blob对象中的数据并不一定得是JavaScript中的原生形式.File接口基于Blob,继承了Blob的功能,并且扩展支持了用户计算机上的本地文件.
我们想要得到的对象URL实际上就是从Blob这个对象获取的,因为File的接口继承Blob。下面就来把Blob对象转换成URL:

<script type="text/javascript">
var f = document.getelementbyid('upload').files[0];
var src = window.URL.createObjectURL(f);
document.getElementById('preview').src = src;
</script>

兼容性:

上述方法适用于chrome浏览器
如果是IE浏览器可以直接使用input的value来代替src
网上查看资料有直接使用File对象的getAsDataURL()方法获取URL的,现在这个方法都已经废除,类似的还有getAsText()和getAsBinary()方法,我们来看这样一个例子。

function getFullPath(obj) {    //得到图片的完整路径  
    if (obj) {  
//ie  
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {  
    obj.select();  
    return document.selection.createRange().text;  
}  
//firefox  
else if (window.navigator.userAgent.indexOf("Firefox") >= 1) {  
    if (obj.files) {  
return obj.files.item(0).getAsDataURL();  
    }  
    return obj.value;  
}  
return obj.value;  
    }  
}

这段代码是获取客户端图片的完整路径
我们再限制其大小和格式

$("#loadFile").change(function () {  
var strSrc = $("#loadFile").val();  
img = new Image();  
img.src = getFullPath(strSrc);  
//验证上传文件格式是否正确  
var pos = strSrc.lastIndexOf(".");  
var lastname = strSrc.substring(pos, strSrc.length)  
if (lastname.toLowerCase() != ".jpg") {  
    alert("您上传的文件类型为" + lastname + ",图片必须为 JPG 类型");  
    return false;  
}  
//验证上传文件宽高比例  if (img.height / img.width > 1.5 || img.height / img.width < 1.25) {  
    alert("您上传的图片比例超出范围,宽高比应介于1.25-1.5");  
    return;  
}  
//验证上传文件是否超出了大小  
if (img.fileSize / 1024 > 150) {  
    alert("您上传的文件大小超出了150K限制!");  
    return false;  
}

其中,loadFile是html input file的id。在它的change事件,也就是选择了要上传的文件以后,让图片显示在图片框里吗,在上面代码的最后加上以下代码

$("#stuPic").attr("src", getFullPath(this));

既然用到了jQuery,下面我们再分享一个用jQuery的写的代码实例:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery.js"></script>
<script language="javascript">
 $(function(){
        var ei = $("#large");
        ei.hide();
        $("#img1").mousemove(function(e){
                ei.css({top:e.pageY,left:e.pageX}).html('<img style="border:1px solid gray;" src="' + this.src + '" />').show();
        }).mouseout( function(){
                ei.hide("slow");
        })
        $("#f1").change(function(){
                $("#img1").attr("src","file:///"+$("#f1").val());
        })
 });
</script>
<style type="text/css">
        #large{position:absolute;display:none;z-index:999;}
</style>
</head>
<body>
<form name="form1" id="form1">
<div id="demo">
<input id="f1" name="f1" type="file" />
<img id="img1" width="60" height="60">
</div>
<div id="large"></div>
</form>
</body>
</html>
Javascript 相关文章推荐
浅析js封装和作用域
Jul 09 Javascript
jsonp原理及使用
Oct 28 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
Aug 04 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
Apr 16 Javascript
jQuery入门基础知识学习指南
Aug 14 Javascript
基于bootstrap实现广告轮播带图片和文字效果
Jul 22 Javascript
纯js实现手风琴效果代码
Apr 17 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
Oct 20 Javascript
浅谈JavaScript 代码简洁之道
Jan 09 Javascript
如何从头实现一个node.js的koa框架
Jun 17 Javascript
Vue分页器实现原理详解
Jun 28 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
jquery的ajax异步请求接收返回json数据实例
Jun 16 #Javascript
Javascript判断图片尺寸大小实例分析
Jun 16 #Javascript
javascript进行数组追加方法小结
Jun 16 #Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
Jun 16 #Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
Jun 16 #Javascript
js限制文本框只能输入数字方法小结
Jun 16 #Javascript
JS实现简单的顶部定时关闭层效果
Jun 15 #Javascript
You might like
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
ext 同步和异步示例代码
2009/09/18 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
用 python 进行微信好友信息分析
2020/11/28 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
安全责任书范文
2014/03/12 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
个人学习总结范文
2015/02/15 职场文书
材料员岗位职责范本
2015/04/11 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python