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 图片等比例缩放代码
May 13 Javascript
菜鸟javascript基础整理1
Dec 06 Javascript
jquery控制左右箭头滚动图片列表的实例
May 20 Javascript
js给onclick赋值传参数的两种方法
Nov 25 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
Oct 15 Javascript
js 原型对象和原型链理解
Feb 09 Javascript
判断横屏竖屏(三种)
Feb 13 Javascript
JS轮播图实现简单代码
Feb 19 Javascript
JS正则表达式封装与使用操作示例
May 15 Javascript
详解js中的原型,原型对象,原型链
Jul 16 Javascript
微信小程序反编译的实现
Dec 10 Javascript
小程序wx.getUserProfile接口的具体使用
Jun 02 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
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
js 判断 enter 事件
2009/02/12 Javascript
基于jquery循环map功能的代码
2011/02/26 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
js 调用百度分享功能
2017/02/27 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
使用Python写个小监控
2016/01/27 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
货代行业个人求职简历的自我评价
2013/10/22 职场文书
python3使用diagrams绘制架构图的步骤
2021/04/08 Python
Python中可变和不可变对象的深入讲解
2021/08/02 Python
MySQL 服务和数据库管理
2021/11/11 MySQL
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS