博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bootstrap+fileinput插件实现可预览上传照片功能
阅读量:5066 次
发布时间:2019-06-12

本文共 9604 字,大约阅读时间需要 32 分钟。

5640239-90e8d7d77ff0d9e9.png
图片.png

实际项目中运用:

5640239-bfce77153e576d8c.png
图片.png

功能:实现上传图片,更改上传图片,移除图片的功能

            
选择图片 更改
移除
请选择1M以内图片

bootstrap-fileinput.css文件:(github目前正在维护中,之后所有代码上传至我的github)

/*! * Jasny Bootstrap v3.1.3 (http://jasny.github.io/bootstrap) * Copyright 2012-2014 Arnold Daniels * Licensed under Apache-2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE) */ .btn-file {  position: relative;  overflow: hidden;  vertical-align: middle;}.btn-file > input {  position: absolute;  top: 0;  right: 0;  width: 100%;  height: 100%;  margin: 0;  font-size: 23px;  cursor: pointer;  filter: alpha(opacity=0);  opacity: 0;  direction: ltr;}.fileinput {  display: inline-block;  margin-bottom: 9px;}.fileinput .form-control {  display: inline-block;  padding-top: 7px;  padding-bottom: 5px;  margin-bottom: 0;  vertical-align: middle;  cursor: text;}.fileinput .thumbnail {  display: inline-block;  margin-bottom: 5px;  overflow: hidden;  text-align: center;  vertical-align: middle;}.fileinput .thumbnail > img {  max-height: 100%;}.fileinput .btn {  vertical-align: middle;}.fileinput-exists .fileinput-new,.fileinput-new .fileinput-exists {  display: none;}.fileinput-inline .fileinput-controls {  display: inline;}.fileinput-filename {  display: inline-block;  overflow: hidden;  vertical-align: middle;}.form-control .fileinput-filename {  vertical-align: bottom;}.fileinput.input-group {  display: table;}.fileinput.input-group > * {  position: relative;  z-index: 2;}.fileinput.input-group > .btn-file {  z-index: 1;}.fileinput-new.input-group .btn-file,.fileinput-new .input-group .btn-file {  border-radius: 0 4px 4px 0;}.fileinput-new.input-group .btn-file.btn-xs,.fileinput-new .input-group .btn-file.btn-xs,.fileinput-new.input-group .btn-file.btn-sm,.fileinput-new .input-group .btn-file.btn-sm {  border-radius: 0 3px 3px 0;}.fileinput-new.input-group .btn-file.btn-lg,.fileinput-new .input-group .btn-file.btn-lg {  border-radius: 0 6px 6px 0;}.form-group.has-warning .fileinput .fileinput-preview {  color: #8a6d3b;}.form-group.has-warning .fileinput .thumbnail {  border-color: #faebcc;}.form-group.has-error .fileinput .fileinput-preview {  color: #a94442;}.form-group.has-error .fileinput .thumbnail {  border-color: #ebccd1;}.form-group.has-success .fileinput .fileinput-preview {  color: #3c763d;}.form-group.has-success .fileinput .thumbnail {  border-color: #d6e9c6;}.input-group-addon:not(:first-child) {  border-left: 0;}

bootstrap-fileinput.js:

/* =========================================================== * Bootstrap: fileinput.js v3.1.3 * http://jasny.github.com/bootstrap/javascript/#fileinput * =========================================================== * Copyright 2012-2014 Arnold Daniels * * Licensed under the Apache License, Version 2.0 (the "License") * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ========================================================== */+function ($) { "use strict";  var isIE = window.navigator.appName == 'Microsoft Internet Explorer'  // FILEUPLOAD PUBLIC CLASS DEFINITION  // =================================  var Fileinput = function (element, options) {    this.$element = $(element)        this.$input = this.$element.find(':file')    if (this.$input.length === 0) return    this.name = this.$input.attr('name') || options.name    this.$hidden = this.$element.find('input[type=hidden][name="' + this.name + '"]')    if (this.$hidden.length === 0) {      this.$hidden = $('').insertBefore(this.$input)    }    this.$preview = this.$element.find('.fileinput-preview')    var height = this.$preview.css('height')    if (this.$preview.css('display') !== 'inline' && height !== '0px' && height !== 'none') {      this.$preview.css('line-height', height)    }            this.original = {      exists: this.$element.hasClass('fileinput-exists'),      preview: this.$preview.html(),      hiddenVal: this.$hidden.val()    }        this.listen()  }    Fileinput.prototype.listen = function() {    this.$input.on('change.bs.fileinput', $.proxy(this.change, this))    $(this.$input[0].form).on('reset.bs.fileinput', $.proxy(this.reset, this))        this.$element.find('[data-trigger="fileinput"]').on('click.bs.fileinput', $.proxy(this.trigger, this))    this.$element.find('[data-dismiss="fileinput"]').on('click.bs.fileinput', $.proxy(this.clear, this))  },  Fileinput.prototype.change = function(e) {    var files = e.target.files === undefined ? (e.target && e.target.value ? [{ name: e.target.value.replace(/^.+\\/, '')}] : []) : e.target.files        e.stopPropagation()    if (files.length === 0) {      this.clear()      return    }    this.$hidden.val('')    this.$hidden.attr('name', '')    this.$input.attr('name', this.name)    var file = files[0]    if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match(/^image\/(gif|png|jpeg)$/) : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {      var reader = new FileReader()      var preview = this.$preview      var element = this.$element      reader.onload = function(re) {        var $img = $('')        $img[0].src = re.target.result        files[0].result = re.target.result                element.find('.fileinput-filename').text(file.name)                // if parent has max-height, using `(max-)height: 100%` on child doesn't take padding and border into account        if (preview.css('max-height') != 'none') $img.css('max-height', parseInt(preview.css('max-height'), 10) - parseInt(preview.css('padding-top'), 10) - parseInt(preview.css('padding-bottom'), 10)  - parseInt(preview.css('border-top'), 10) - parseInt(preview.css('border-bottom'), 10))                preview.html($img)        element.addClass('fileinput-exists').removeClass('fileinput-new')        element.trigger('change.bs.fileinput', files)      }      reader.readAsDataURL(file)    } else {      this.$element.find('.fileinput-filename').text(file.name)      this.$preview.text(file.name)            this.$element.addClass('fileinput-exists').removeClass('fileinput-new')            this.$element.trigger('change.bs.fileinput')    }  },  Fileinput.prototype.clear = function(e) {    if (e) e.preventDefault()        this.$hidden.val('')    this.$hidden.attr('name', this.name)    this.$input.attr('name', '')    //ie8+ doesn't support changing the value of input with type=file so clone instead    if (isIE) {       var inputClone = this.$input.clone(true);      this.$input.after(inputClone);      this.$input.remove();      this.$input = inputClone;    } else {      this.$input.val('')    }    this.$preview.html('')    this.$element.find('.fileinput-filename').text('')    this.$element.addClass('fileinput-new').removeClass('fileinput-exists')        if (e !== undefined) {      this.$input.trigger('change')      this.$element.trigger('clear.bs.fileinput')    }  },  Fileinput.prototype.reset = function() {    this.clear()    this.$hidden.val(this.original.hiddenVal)    this.$preview.html(this.original.preview)    this.$element.find('.fileinput-filename').text('')    if (this.original.exists) this.$element.addClass('fileinput-exists').removeClass('fileinput-new')     else this.$element.addClass('fileinput-new').removeClass('fileinput-exists')        this.$element.trigger('reset.bs.fileinput')  },  Fileinput.prototype.trigger = function(e) {    this.$input.trigger('click')    e.preventDefault()  }    // FILEUPLOAD PLUGIN DEFINITION  // ===========================  var old = $.fn.fileinput    $.fn.fileinput = function (options) {    return this.each(function () {      var $this = $(this),          data = $this.data('bs.fileinput')      if (!data) $this.data('bs.fileinput', (data = new Fileinput(this, options)))      if (typeof options == 'string') data[options]()    })  }  $.fn.fileinput.Constructor = Fileinput  // FILEINPUT NO CONFLICT  // ====================  $.fn.fileinput.noConflict = function () {    $.fn.fileinput = old    return this  }  // FILEUPLOAD DATA-API  // ==================  $(document).on('click.fileinput.data-api', '[data-provides="fileinput"]', function (e) {    var $this = $(this)    if ($this.data('bs.fileinput')) return    $this.fileinput($this.data())          var $target = $(e.target).closest('[data-dismiss="fileinput"],[data-trigger="fileinput"]');    if ($target.length > 0) {      e.preventDefault()      $target.trigger('click.bs.fileinput')    }  })}(window.jQuery);

自荐前端干货:

进阶攻略|前端最全的框架总结:

web开发快速提高工作效率的一些资源:
前端学习的几个网站:
老司机程序员用到的各种网站整理:
进阶攻略|前端完整的学习路线:
八款前端开发人员更轻松的实用在线工具:
前端几个常用简单的开发手册拿走不谢:
程序员常用的六大技术博客类:
九款优秀的企业项目协作工具推荐:
移动端手势的七个事件库:
Bootstrap相关优质项目学习清单:
2018前端越来越流行的的技术:

原文作者:祈澈姑娘

原文链接:
创作不易,转载请告知

90后前端妹子,爱编程,爱运营,爱折腾。

坚持总结工作中遇到的技术问题,坚持记录工作中所所思所见,欢迎大家一起探讨交流。

转载于:https://www.cnblogs.com/ting6/p/9725714.html

你可能感兴趣的文章
(转)盒子概念和DiV布局
查看>>
Android快速实现二维码扫描--Zxing
查看>>
获取元素
查看>>
nginx+lighttpd+memcache+mysql配置与调试
查看>>
ubuntu12.04 启动apache2 对.htaccess 的支持
查看>>
proxy写监听方法,实现响应式
查看>>
前端工具----iconfont
查看>>
Azure Site Recovery 通过一键式流程将虚拟机故障转移至 Azure虚拟机
查看>>
Hello China操作系统STM32移植指南(一)
查看>>
cocos2dx CCEditBox
查看>>
VC++2012编程演练数据结构《8》回溯法解决迷宫问题
查看>>
第一阶段冲刺06
查看>>
WIN下修改host文件并立即生效
查看>>
十个免费的 Web 压力测试工具
查看>>
ckeditor 粘贴后去除html标签
查看>>
面试题
查看>>
51Nod:活动安排问题之二(贪心)
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
数据库框架的log4j日志配置
查看>>
lintcode-easy-Remove Element
查看>>