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 相关文章推荐
javascript 面向对象编程基础:继承
Aug 21 Javascript
原生JavaScript实现连连看游戏(附源码)
Nov 05 Javascript
纯js实现重发验证码按钮倒数功能
Apr 21 Javascript
jQuery标签编辑插件Tagit使用指南
Apr 21 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
Oct 13 Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 Javascript
Js+Ajax,Get和Post在使用上的区别小结
Jun 08 Javascript
微信小程序页面间通信的5种方式
Mar 31 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
Aug 29 jQuery
解决iView中时间控件选择的时间总是少一天的问题
Mar 15 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
Aug 31 Javascript
vue elementUI表格控制对应列
Apr 13 Vue.js
解决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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
用Php实现链结人气统计
2006/10/09 PHP
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
php数组合并的二种方法
2014/03/21 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
PHP _construct()函数讲解
2019/02/03 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
2015/06/18 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
2018/10/01 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
Python实现二维有序数组查找的方法
2016/04/27 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
浅谈dataframe中更改列属性的方法
2018/07/10 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
会计专业导师推荐信
2014/03/08 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
乔迁之喜主持词
2014/03/27 职场文书
病媒生物防治方案
2014/05/13 职场文书
销售业务员岗位职责
2015/02/13 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
辩护意见书
2015/06/04 职场文书
干部考核工作总结2015
2015/07/24 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技