JS实现的图片预览插件与用法示例【不上传图片】


Posted in Javascript onNovember 25, 2016

本文实例讲述了JS实现不需要上传的图片预览插件与用法。分享给大家供大家参考,具体如下:

小小的几十行代码,很牛逼,很实用。

JS实现的图片预览插件与用法示例【不上传图片】

支持多个图片的预览,只要new多个对象就行了。

html如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>uploadPreview演示</title>
  <script src="uploadPreview.js" type="text/javascript"></script>
  <script>
    window.onload = function () { 
      new uploadPreview({ UpBtn: "up_img", DivShow: "imgdiv", ImgShow: "imgShow" });
      new uploadPreview({ UpBtn: "up_img2", DivShow: "imgdiv2", ImgShow: "imgShow2" });
    }
  </script>
</head>
<body>
  <div id="imgdiv"><img id="imgShow" width="200"/></div>
  <input type="file" id="up_img" />
  <div id="imgdiv"><img id="imgShow2" width="200" /></div>
  <input type="file" id="up_img2" />
</body>
</html>

插件uploadPreview.js代码如下

/*
*发布时间:2014年12月12日
*插件介绍:图片上传本地预览插件 兼容浏览器(IE 谷歌 火狐) 不支持safari 当然如果是使用这些内核的浏览器基本都兼容
*使用方法:
*界面构造(IMG标签外必须拥有DIV 而且必须给予DIV控件ID)
* <div id="imgdiv"><img id="imgShow" width="120" height="120" /></div>
* <input type="file" id="up_img" />
*调用代码:
* new uploadPreview({ UpBtn: "up_img", DivShow: "imgdiv", ImgShow: "imgShow" });
*参数说明:
*UpBtn:选择文件控件ID;
*DivShow:DIV控件ID;
*ImgShow:图片控件ID;
*Width:预览宽度;
*Height:预览高度;
*ImgType:支持文件类型 格式:["jpg","png"];
*callback:选择文件后回调方法;
*版本:v1.4
更新内容如下:
1.修复回调.
*版本:v1.3
更新内容如下:
1.修复多层级框架获取路径BUG.
2.去除对jquery插件的依赖.
*/
/*
*work:图片预览插件
*/
var uploadPreview = function(setting) {
  /*
  *work:this(当前对象)
  */
  var _self = this;
  /*
  *work:判断为null或者空值
  */
  _self.IsNull = function(value) {
    if (typeof (value) == "function") { return false; }
    if (value == undefined || value == null || value == "" || value.length == 0) {
      return true;
    }
    return false;
  }
  /*
  *work:默认配置
  */
  _self.DefautlSetting = {
    UpBtn: "",
    DivShow: "",
    ImgShow: "",
    Width: 100,
    Height: 100,
    ImgType: ["gif", "jpeg", "jpg", "bmp", "png"],
    ErrMsg: "选择文件错误,图片类型必须是(gif,jpeg,jpg,bmp,png)中的一种",
    callback: function() { }
  };
  /*
  *work:读取配置
  */
  _self.Setting = {
    UpBtn: _self.IsNull(setting.UpBtn) ? _self.DefautlSetting.UpBtn : setting.UpBtn,
    DivShow: _self.IsNull(setting.DivShow) ? _self.DefautlSetting.DivShow : setting.DivShow,
    ImgShow: _self.IsNull(setting.ImgShow) ? _self.DefautlSetting.ImgShow : setting.ImgShow,
    Width: _self.IsNull(setting.Width) ? _self.DefautlSetting.Width : setting.Width,
    Height: _self.IsNull(setting.Height) ? _self.DefautlSetting.Height : setting.Height,
    ImgType: _self.IsNull(setting.ImgType) ? _self.DefautlSetting.ImgType : setting.ImgType,
    ErrMsg: _self.IsNull(setting.ErrMsg) ? _self.DefautlSetting.ErrMsg : setting.ErrMsg,
    callback: _self.IsNull(setting.callback) ? _self.DefautlSetting.callback : setting.callback
  };
  /*
  *work:获取文本控件URL
  */
  _self.getObjectURL = function(file) {
    var url = null;
    if (window.createObjectURL != undefined) {
      url = window.createObjectURL(file);
    } else if (window.URL != undefined) {
      url = window.URL.createObjectURL(file);
    } else if (window.webkitURL != undefined) {
      url = window.webkitURL.createObjectURL(file);
    }
    return url;
  }
  /*
  *work:绑定事件
  */
  _self.Bind = function() {
    document.getElementById(_self.Setting.UpBtn).onchange = function() {
      if (this.value) {
        if (!RegExp("\.(" + _self.Setting.ImgType.join("|") + ")$", "i").test(this.value.toLowerCase())) {
          alert(_self.Setting.ErrMsg);
          this.value = "";
          return false;
        }
        if (navigator.userAgent.indexOf("MSIE") > -1) {
          try {
            document.getElementById(_self.Setting.ImgShow).src = _self.getObjectURL(this.files[0]);
          } catch (e) {
            var div = document.getElementById(_self.Setting.DivShow);
            this.select();
            top.parent.document.body.focus();
            var src = document.selection.createRange().text;
            document.selection.empty();
            document.getElementById(_self.Setting.ImgShow).style.display = "none";
            div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
            div.style.width = _self.Setting.Width + "px";
            div.style.height = _self.Setting.Height + "px";
            div.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = src;
          }
        } else {
          document.getElementById(_self.Setting.ImgShow).src = _self.getObjectURL(this.files[0]);
        }
        _self.Setting.callback();
      }
    }
  }
  /*
  *work:执行绑定事件
  */
  _self.Bind();
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js onpropertychange输入框 事件获取属性
Mar 26 Javascript
javascript简单性能问题及学习笔记
Feb 04 Javascript
jQuery实现在列表的首行添加数据
May 19 Javascript
利用js实现禁止复制文本信息
Jun 03 Javascript
原生JS实现图片轮播切换效果
Dec 15 Javascript
原生JS轮播图插件
Feb 09 Javascript
jquery插件ContextMenu设置右键菜单
Mar 13 Javascript
vue params、query传参使用详解
Sep 12 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
Oct 14 Javascript
JavaScript鼠标悬停事件用法解析
May 15 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
Aug 09 Javascript
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
Nov 25 #Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
Nov 25 #Javascript
bootstrap-datetimepicker实现只显示到日期的方法
Nov 25 #Javascript
利用angular.copy取消变量的双向绑定与解析
Nov 25 #Javascript
JS冒泡事件与事件捕获实例详解
Nov 25 #Javascript
js事件源window.event.srcElement兼容性写法(详解)
Nov 25 #Javascript
使用JS读取XML文件的方法
Nov 25 #Javascript
You might like
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
javascript背投广告代码的完善
2008/04/08 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
求职简历中个人的自我评价
2013/12/01 职场文书
公司离职证明范本
2014/01/13 职场文书
社团活动总结怎么写
2014/06/30 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
匿名信格式范文
2015/05/27 职场文书
南京大屠杀观后感
2015/06/02 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python
试了下Golang实现try catch的方法
2021/07/01 Golang
MySQL如何使备份得数据保持一致
2022/05/02 MySQL