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 相关文章推荐
基于jquery的超简单上下翻
Apr 20 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
Sep 25 Javascript
iframe父页面获取子页面参数的方法
Feb 21 Javascript
jquery插件ajaxupload实现文件上传操作
Dec 09 Javascript
js为什么不能正确处理小数运算?
Dec 29 Javascript
JavaScript利用HTML DOM进行文档操作的方法
Mar 28 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
May 17 Javascript
简述JS浏览器的三种弹窗
Jul 15 Javascript
小程序云开发初探(小结)
Oct 24 Javascript
浅谈JavaScript中的“!!”作用
Aug 03 Javascript
80行代码写一个Webpack插件并发布到npm
May 24 Javascript
Promise静态四兄弟实现示例详解
Jul 07 Javascript
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 获取客户端的真实ip
2009/11/30 PHP
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
javascript  删除select中的所有option的实例
2017/09/17 Javascript
webpack打包js的方法
2018/03/12 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
最基础的Python的socket编程入门教程
2015/04/23 Python
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
python一键升级所有pip package的方法
2017/01/16 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
Perricone MD裴礼康美国官网:抗衰老护肤品
2016/09/26 全球购物
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
销售人员求职的自我评价分享
2014/03/15 职场文书
大班开学家长寄语
2014/04/04 职场文书
黑白记忆观后感
2015/06/18 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
纪检部部长竞选稿
2015/11/21 职场文书