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表单验证代码
Aug 02 Javascript
读jQuery之四(优雅的迭代)
Jun 20 Javascript
ajax与302响应代码测试
Oct 23 Javascript
Textarea根据内容自适应高度
Oct 28 Javascript
jQuery中:last-child选择器用法实例
Dec 31 Javascript
JS是按值传递还是按引用传递
Jan 30 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
Dec 15 Javascript
js实现随机抽选效果、随机抽选红色球效果
Jan 13 Javascript
js实现省份下拉菜单效果
Feb 15 Javascript
原生JS实现随机点名项目的实例代码
Apr 30 Javascript
javascript系统时间设置操作示例
Jun 17 Javascript
使用PDF.js渲染canvas实现预览pdf的效果示例
Apr 17 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实现AES256加密算法实例
2014/09/22 PHP
php实现多城市切换特效
2015/08/09 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
[03:48]大碗DOTA
2019/07/25 DOTA
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Python编程之序列操作实例详解
2017/07/22 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
会计专业自我鉴定范文
2013/10/06 职场文书
特色冷饮店创业计划书
2014/01/28 职场文书
四年级下册教学反思
2014/02/01 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
关于教师节的演讲稿
2014/09/04 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
销售员岗位职责范本
2015/04/11 职场文书
党员转正申请报告
2015/05/15 职场文书
2016年父亲节寄语
2015/12/04 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python