(uploadify版本:3.2.1 )

因为公司业务的原因,所做的项目需要兼容IE8,因此做的上传插件无奈选择的是基于flash的uploadify。

由于是基于flash的,所以使用过程中,难以给上传按钮自定义样式,但原来的样式实在不好看,是这样的,或者和项目的UI风格不搭,于是就要想办法自定义一下,最终折腾出了一个兼容性很好的可行方案。以下为解决问题的过程记录和最终方案:

思路一(不可行):

类似于H5的自定义上传控件,将uploadify上传空间的按钮隐藏,自己做一个好看的按钮BTN,在点击这个BTN的时候,用JS控制模拟触发uploadify上传按钮的点击事件,从而完成点击上传的过程,这个想法很美好,可是在实践中发现uploadify的上传按钮是无法模拟触发点击事件的,它是一个这样的object元素,百度谷歌都查了一遍,得出的结论是如果flash插件没有提供模拟click的接口,那JS是无法模拟点击事件的,只有用户真正地去点击才行。所以,这个方法就宣布失败了。

思路二:

制作一层遮挡层,遮挡层的位置在上传按钮的上方,并设置遮挡层的pointer-eventsnone即可既满足按钮的样式效果,又能实现点击上传的功能。但是只得注意的是,pointer-events是CSS3的属性,并不兼容IE8,所以这样看来也是不行的。但是抱着不死心的想法,我还是试了试,惊喜地发现原来uploadify实现的本身就类似于我那种思路:样式层的按钮和功能实现的层分离开来,功能层为那个object元素,且背景透明,z-inex为1,下方放置一个div作为按钮的样式控制元素。这样的话就有办法了,只要用一层样式层去替换(盖住)原来的样式层就好了,于是根据uploadify的DOM结构,结合利用伪元素,只需要利用CSS就可以自定义uploadify的按钮的样式了,实现代码如下:

DOM:

JS:

// 初始化的配置,上传input元素的ID为ipt
$("#ipt").uploadify({
width: 120,
height: 30,
buttonText: '上传文件',
buttonClass: 'prettyBtn', // 给默认的"button"添加className
swf: 'uploadify/uploadify.swf',
uploader: 'uploadify/uploadify.php'
});

CSS:

// 伪元素的内容和样式可以根据需要自己重新定义
.uploadify {
position: relative;
}
.uploadify-button {
border: none;
}
.prettyBtn:after {
content: '上传文件';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 30px;
line-height: 30px;
display: inline-block;
background-color: #fff;
color: #000;
}

效果

结论

利用uploadify的DOM结构以及CSS伪元素,就可以自定义上传按钮的样式了,详见思路2。

兼容IE8的flash上传框架"uploadify"自定义上传按钮样式的办法的更多相关文章

  1. 完成FileUpload的文件上传功能,且可改按钮样式

    FileUpload控件: 更改按钮样式思路: 自己定义一个按钮,设置该按钮的样式,然后将FileUpload控件通过定位定在自己定义的按钮上面,设置z-index,使得控件浮在自己定义的按钮上面,记 ...

  2. 第三百一十九节,Django框架,文件上传

    第三百一十九节,Django框架,文件上传 1.自定义上传[推荐] 请求对象.FILES.get()获取上传文件的对象上传对象.name获取上传文件名称上传对象.chunks()获取上传数据包,字节码 ...

  3. Bootstrap+PHP fileinput 实现多图上传 这是ajax上传,只能单张单张图片地上传

    插件及源代码可以在这里下载 http://www.jq22.com/jquery-info5231下面是根据下载的demo进行补充:使用bootstrap界面美观,可预览,可拖拽上传,可配合ajax异 ...

  4. 自定义上传控件(兼容IE8)

    上传控件是 <input type="file"/> 而实际开发过程中,都会自定义一个控件,因为这个控件本身难看,而且不同浏览器效果不一样. 如IE8显示如下: 谷歌浏 ...

  5. js上传插件uploadify自动检测不到flash控件的问题

    [问题描述] 项目开发中,由于使用了js的一个上传插件uploadify,下载的是flash版本的,后来在谷歌浏览器上运行时经常报flash控件未安装,虽然下图是uploadify自动检测自动弹出来的 ...

  6. 图片上传jQuery插件(兼容IE8)

      图片上传jQuery插件(兼容IE8) 代码来源 :https://github.com/zilan93/uploadImg   html <!DOCTYPE html> <ht ...

  7. jquery.uploadify文件上传组件

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  8. Uploadify/uploadifive上传(中文文档)

    Uploadify是一款基于JQuery的优秀的文件/图片上传的插件,有基于Flash和HTML5两种版本.  Uploadify/uploadifive主要特点有: 1. 多文件上传 2. 个性化设 ...

  9. 基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用

    大概一年前,我还在用Asp.NET开发一些行业管理系统的时候,就曾经使用这个组件作为文件的上传操作,在随笔<Web开发中的文件上传组件uploadify的使用>中可以看到,Asp.NET中 ...

随机推荐

  1. note 1 对象和数据类型

    /#行注释 print "Hello World" 对象 五种基本类型 字符串 (string),简记为str 使用 ' ' 或 " " 括起来的一系列字符 整 ...

  2. iOS上传本地代码到git

    1.顾名思义,首先你得注册一个github账户 这个我就不细说了. 2.然后你得创建一个 repository  步骤见下图 3.相当于创建成功 会跳到下图界面 4.一看就很清楚了 create a ...

  3. MII、GMII、RMII、SGMII、XGMII 接口区别

    MII即媒体独立接口,也叫介质无关接口.它是IEEE-802.3定义的以太网行业标准.它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1). 数据接口包括分别用于发送器和接收器的两条独立信 ...

  4. 手机App调试(Android)

    方法一:  用Chrome+手机来调试.1) 在PC上安装谷歌的USB驱动:         http://developer.android.com/sdk/win-usb.html#top     ...

  5. kubernetes学习笔记之十一:kubernetes dashboard认证及分级授权

    第一章.部署dashboard 作为Kubernetes的Web用户界面,用户可以通过Dashboard在Kubernetes集群中部署容器化的应用,对应用进行问题处理和管理,并对集群本身进行管理.通 ...

  6. error C4996: 'sprintf': This function or variable may be unsafe.

    error C4996: 'sprintf': This function or variable may be unsafe.   error C4996: 'sprintf': This func ...

  7. JS-Promise笔记

    转自:http://www.runoob.com/w3cnote/javascript-promise-object.html ECMAscript 6 原生提供了 Promise 对象. Promi ...

  8. mac无密登陆到linux

    最近弄了台linux云服务器,然而每次登陆linux都好麻烦,所以倒腾了下ssh无密登陆. linux:centos 6.5,自带ssh mac:yosemite,自带ssh 步骤: 1. 创建key ...

  9. java数据类型关系及关系

    java中有常见的基本数据类型和引用数据类型,基本数据类型为四类八种如下 整数型(byte,short,int,long) 浮点型(float,double) 字符型(char) 布尔型(boolea ...

  10. python 列表复制给另一个列表,改值两个列表均会改变(备忘)

    http://blog.csdn.net/lc_lc2000/article/details/53135839 本意是使A = B,B为一个列表,结果在后续对A的操作中,导致B中的值也改变了,才回忆起 ...