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 风格的HTML文本转义
Jul 01 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
Jan 11 Javascript
jQuery中:empty选择器用法实例
Dec 30 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
May 07 Javascript
jQuery移动端图片上传组件
Jun 12 Javascript
微信小程序 倒计时组件实现代码
Oct 24 Javascript
javascript 网页进度条简单实例
Feb 22 Javascript
详解Angular 4.x NgTemplateOutlet
May 24 Javascript
JavaScript中的return布尔值的用法和原理解析
Aug 14 Javascript
Vue.JS项目中5个经典Vuex插件
Nov 28 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
Vue路由的模块自动化与统一加载实现
Jun 05 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写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
优化RequireJS项目的相关技巧总结
2015/07/01 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
python opencv实现图片旋转矩形分割
2018/07/26 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
Python 支付整合开发包的实现
2019/01/23 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
python模拟实现分发扑克牌
2020/04/22 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
就业推荐自我鉴定
2013/10/06 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
环境整治工作方案
2014/05/18 职场文书
股东授权委托书范本
2014/09/13 职场文书
离婚协议书样本
2015/01/26 职场文书
停发工资证明范本
2015/06/12 职场文书
python字符串常规操作大全
2021/05/02 Python
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL