js自定义input文件上传样式


Posted in Javascript onOctober 26, 2018

文件上传是我们经常会用到的功能,但是原生的input样式太丑了,能不能自定义一个input文件上传样式呢?

我这里写了两种方法,form表单提交跟ajax异步提交都没有问题,自动上传或者点击上传按钮上传也都没问题

先看效果:

js自定义input文件上传样式

js自定义input文件上传样式

js自定义input文件上传样式

代码贴出来: 

方法1

<!--
      方法1:
      div : 设置宽高、overflow:hidden;超出的部分被隐藏
      input : 设置层级z-index = 1;设置透明度opacity:0;设置相对定位position:relative;使两个元素重叠
      i : 设置层级z-index = 0;(要比input小)设置相对定位position:relative;使两个元素重叠
      利用div框出大小,input在i上面但透明度为0,当我们点击i时其实是点击到了input但视觉上我们只看到了i
    -->
    <h3>方法1:</h3>
    <form action="upload" method="post" enctype="multipart/form-data">
      <!-- 辅助div,框出显示内容 -->
      <div style="width: 20px;height: 20px;overflow:hidden;">
        <!-- 实际的选择文件input -->
        <input style="position:relative;z-index :1;opacity:0" onchange="change()" id="file" type="file"
            name="file"/>
        <!-- 可视图标 -->
        <i class="glyphicon glyphicon-open" style="position:relative;top:-22px;z-index :0;font-size: 20px;"></i>
      </div>
      <!-- 文件名 -->
      <br/><span id="fileName"></span>
      <!-- 表单提交按钮 -->
      <br/><input id="but_submit" type="submit" value="上传"/>
    </form>
    <script>
      function change() {
        //回显文件名
        $("#fileName").text($("#file").val());
      }
</script>

方法2

<!--
    方法2:
      input : 设置层级display: none; 直接隐藏
      i : onclick="document.getElementById('file2').click();" 图标的click触发input的click
      直接隐藏input,设置图标的click触发input的click,从而达到我们想要的效果
    -->
    <h3>方法2:</h3>
    <form id="uploadForm">
      <!-- 实际的选择文件input -->
      <input style="display: none;" onchange="change2()" id="file2" type="file" name="file"/>
      <!-- 可视图标 -->
      <i class="glyphicon glyphicon-open" style="font-size: 20px;"
        onclick="document.getElementById('file2').click();"></i>
      <!-- 文件名 -->
      <br/><span id="fileName2"></span>
    </form>
    <script>
      //自动上传
      function change2() {
        //回显文件名
        $("#fileName2").text($("#file2").val());
        //执行上传
        var form = new FormData(document.getElementById("uploadForm"));
        $.ajax({
          url: ctx + "/rack/upload",
          type: "post",
          data: form,
          processData: false,
          contentType: false,
          success: function (data) {
            console.log(data);
          },
          error: function (e) {
            console.log(e);
          }
        });
    }
</script>

controller

@PostMapping("upload")
  public ResultModel<Boolean> upload(MultipartFile file) {
    //文件名
    System.out.println(file.getOriginalFilename());
    return ResultModel.of(true);
}

样式还是丑了一点,但这些都不重要,关键是掌握了方法再找个UI小姐姐来帮忙调试,就可以做出任何想要的UI效果啦!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用js实现随机返回数组的一个元素
Aug 13 Javascript
js数组Array sort方法使用深入分析
Feb 21 Javascript
自己写了一个展开和收起的多更能型的js效果
Mar 05 Javascript
Jquery 模板数据绑定插件的使用方法详解
Jul 08 Javascript
js浏览器本地存储store.js介绍及应用
May 13 Javascript
js表单验证实例讲解
Mar 31 Javascript
js实现华丽的九九乘法表效果
Mar 29 Javascript
Angular2进阶之如何避免Dom误区
Apr 02 Javascript
一个基于react的图片裁剪组件示例
Apr 18 Javascript
vue循环数组改变点击文字的颜色
Oct 14 Javascript
mpvue实现微信小程序快递单号查询代码
Apr 03 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
Jun 12 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
Oct 25 #Javascript
在Vue中使用axios请求拦截的实现方法
Oct 25 #Javascript
webpack4+react多页面架构的实现
Oct 25 #Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
Oct 25 #Javascript
代码整洁之道(重构)
Oct 25 #Javascript
Vue使用NPM方式搭建项目
Oct 25 #Javascript
小程序云开发实战小结
Oct 25 #Javascript
You might like
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
Python实现的石头剪子布代码分享
2014/08/22 Python
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
在职证明范本
2015/06/15 职场文书
运输公司工作总结
2015/08/11 职场文书
感恩教师主题班会
2015/08/12 职场文书
2016年教师节慰问信
2015/12/01 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
校园安全教育心得体会
2016/01/15 职场文书