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 相关文章推荐
javascript检查日期格式的函数[比较全]
Oct 17 Javascript
XENON基于JSON变种
Jul 27 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
Jan 08 Javascript
将光标定位于输入框最右侧实现代码
Dec 04 Javascript
javascript 回到顶部效果的实现代码
Feb 17 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
Jan 23 Javascript
javascript页面倒计时实例
Jul 25 Javascript
innerHTML中标签可以换行的方法汇总
Aug 14 Javascript
seajs模块之间依赖的加载以及模块的执行
Oct 21 Javascript
javascript滚轮事件基础实例讲解(37)
Feb 14 Javascript
vue项目上传Github预览的实现示例
Nov 06 Javascript
vue3使用vue-router的完整步骤记录
Jun 20 Vue.js
非常实用的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
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
PHP文件操作详解
2016/12/30 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
分析JS单线程异步io回调的特性
2017/12/01 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
Python中标准模块importlib详解
2017/04/16 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
numpy中的高维数组转置实例
2018/04/17 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
python如何求解两数的最大公约数
2018/09/27 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
python opencv读mp4视频的实例
2018/12/07 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
django框架ModelForm组件用法详解
2019/12/11 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
交通事故协议书范文
2014/10/23 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
python3 sqlite3限制条件查询的操作
2021/04/07 Python