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 相关文章推荐
javascript编程起步(第二课)
Jan 10 Javascript
由JavaScript技术实现的web小游戏(不含网游)
Jun 12 Javascript
jQuery+css+html实现页面遮罩弹出框
Mar 21 Javascript
jquery实现多行文字图片滚动效果示例代码
Oct 10 Javascript
javascript使用appendChild追加节点实例
Jan 12 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
Aug 11 Javascript
举例说明如何为JavaScript的方法参数设置默认值
Nov 17 Javascript
bootstrap laydate日期组件使用详解
Jan 04 Javascript
详解Vue整合axios的实例代码
Jun 21 Javascript
React教程之Props验证的具体用法(Props Validation)
Sep 04 Javascript
vue axios基于常见业务场景的二次封装的实现
Sep 21 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
Sep 27 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
解决中英文字符串长度问题函数
2007/01/16 PHP
php与php MySQL 之间的关系
2009/07/17 PHP
php 读取文件乱码问题
2010/02/20 PHP
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
Python中关键字is与==的区别简述
2014/07/31 Python
利用Python如何制作好玩的GIF动图详解
2018/07/11 Python
Django开发的简易留言板案例详解
2018/12/04 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
2014年两会学习心得范例
2014/03/17 职场文书
承诺书模板
2014/08/30 职场文书
面试通知短信
2015/04/20 职场文书