js实现文件上传表单域美化特效


Posted in Javascript onNovember 02, 2015

一款效果非常时尚的文件上传表单域美化特效,下面给出制作的简要教程。

先上几个效果饱饱眼福:

js实现文件上传表单域美化特效

js实现文件上传表单域美化特效

js实现文件上传表单域美化特效

使用方法

这些文件上传域的美化使用的方法都是隐藏原生的<input type="file">元素,然后使用一个<label>元素来制作美化效果。

 HTML结构

该文件上传域美化效果最基本的HTML结构如下:

<input type="file" name="file" id="file" class="inputfile" />
<label for="file">Choose a file</label>

 CSS样式

首先需要隐藏<input>元素。这里不能使用display: none或visibility: hidden来隐藏它,因为这样做只后,<input>元素里的值不会被上传到服务器端,而且按TAB键时这个<input>元素也不会被找到。隐藏的方法如下:

.inputfile {
 width: 0.1px;
 height: 0.1px;
 opacity: 0;
 overflow: hidden;
 position: absolute;
 z-index: -1;
}

接下来给<label>元素设置样式。这里要将<label>元素制作为一个按钮的样式。

.inputfile + label {
 font-size: 1.25em;
 font-weight: 700;
 color: white;
 background-color: black;
 display: inline-block;
}
 
.inputfile:focus + label,
.inputfile + label:hover {
 background-color: red;
}

当鼠标滑过label时需要将光标显示为一个小手的形状。

.inputfile + label {
 cursor: pointer; /* "hand" cursor */
}

为了制作可以使用键盘导航的效果,需要添加下面的代码。

.inputfile:focus + label {
 outline: 1px dotted #000;
 outline: -webkit-focus-ring-color auto 5px;
}

-webkit-focus-ring-color auto 5px可以在 Chrome,Opera 和 Safari浏览器中获取默认的边框外观。

js实现文件上传表单域美化特效

如果你使用了类似FastClick(一个在移动触摸设备上消除300毫秒tap-pause的工具库),并且你需要添加一些文本标签,那么按钮将不会正常工作,除非设置了pointer-events: none。

<label for="file"><strong>Choose a file</strong></label>    
.inputfile + label * {
 pointer-events: none;
}

JavaScript

最后需要做的事情是标识用户选择了哪些文件。原生的文件上传域是有这个功能的,但是这里使用的是虚拟的按钮。特效中使用javascript来实现这个功能。

<input type="file" name="file" id="file" class="inputfile" data-multiple-caption="{count} files selected" multiple />    
var inputs = document.querySelectorAll( '.inputfile' );
Array.prototype.forEach.call( inputs, function( input )
{
 var label = input.nextElementSibling,
 labelVal = label.innerHTML;
 
 input.addEventListener( 'change', function( e )
 {
 var fileName = '';
 if( this.files && this.files.length > 1 )
  fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );
 else
  fileName = e.target.value.split( '\\' ).pop();
 
 if( fileName )
  label.querySelector( 'span' ).innerHTML = fileName;
 else
  label.innerHTML = labelVal;
 });
});

 浏览器禁用JavaScript的处理

如果浏览器禁用了JavaScript,那么只有使用原生的文件上传域组件。我们需要做的事情是在<html>元素上添加一个.no-js的class,然后使用Javascript来替换它。

<html class="no-js">
 <head>
  <!-- remove this if you use Modernizr -->
  <script>(function(e,t,n){var r=e.querySelectorAll("html")[0];r.className=r.className.replace(/(^|\s)no-js(\s|$)/,"$1js$2")})(document,window,0);</script>
 </head>
</html>
.
js .inputfile {
 width: 0.1px;
 height: 0.1px;
 opacity: 0;
 overflow: hidden;
 position: absolute;
 z-index: -1;
}
 
.no-js .inputfile + label {
 display: none;
}

以上就是js实现文件上传表单域美化特效,希望对大家的学习有所帮助。

Javascript 相关文章推荐
IE不出现Flash激活框的小发现的js实现方法
Sep 07 Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 Javascript
js+csss实现的一个带复选框的下拉框
Sep 29 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
Aug 08 Javascript
jQuery EasyUI常用数据验证汇总
Sep 18 Javascript
jQuery实现选项卡功能(两种方法)
Mar 08 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
Sep 12 Javascript
基于vue中css预加载使用sass的配置方式详解
Mar 13 Javascript
Vue组件之极简的地址选择器的实现
May 31 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
Jul 13 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
Oct 18 Javascript
关于layui flow loading占位图的实现方法
Sep 21 Javascript
非常实用的12个jquery代码片段
Nov 02 #Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
Nov 02 #Javascript
jquery 表单验证之通过 class验证表单不为空
Nov 02 #Javascript
纯javascript移动优先的幻灯片效果
Nov 02 #Javascript
JS实现点击按钮获取页面高度的方法
Nov 02 #Javascript
基于jQuery实现自动轮播旋转木马特效
Nov 02 #Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
Nov 02 #Javascript
You might like
PHP提取中文首字母
2008/04/09 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
PHP goto语句用法实例
2019/08/06 PHP
jquery之Document元素选择器篇
2008/08/14 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
jQuery 性能优化指南 (1)
2009/05/21 Javascript
javascript 新浪背投广告实现代码
2009/07/07 Javascript
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
JS实现六位字符密码输入器功能
2016/08/19 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
react中的ajax封装实例详解
2017/10/17 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
给Python入门者的一些编程建议
2015/06/15 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
python如何实现int函数的方法示例
2018/02/19 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
特此通知格式
2015/04/27 职场文书