[ WebUpload ] WebUpload 插件初始化问题

WebUpload 插件初始化问题

本文主要针对WebUpload 文件上传插件在初始化多个时,插件自定义按钮显示位置错位导致点击失效的问题提供解决方案。(亦可描述为webupload插件在父容器display属性为none的情况下初始化位置异常)

官网

目录

WebUpload 插件初始化问题
目录
实际案例
源码分析
参考
感谢
实际案例

1、基于avalon开发的前端界面

ms-if =”布尔表达式” 为true,表示生成下方页面文本;反之,不生成

ms-visible=”布尔表达式” 为true,表示显示下方页面文本(display:block);反之,不显示(display:none)

2、解决方法

初始化前先利用ms-if显示webuploader绑定的容器部分,再执行初始化方法 

或者利用ms-if每次动态生成页面部分代码,再执行初始化方法 

利用ms-visible控制显隐,结合数组array接收Webuploader.create({…})生成的插件对象,在界面显示后(display:block),利用循环执行uploader内部函数refresh();
前两种方法相似,只是控制动态生成的文本域不同 
第三种最优,利用webuploader内置函数refresh函数,对于界面资源利用更佳 
核心是初始化在dom显示之后执行,否则,refresh函数需要dom显示之后执行!
 /**
 * 预案资源文件管理
    */
   RES_MAN: {
       /**
        * 初始化
        */
       init: function () {
           this.createWebUploader(0);
           this.createWebUploader(1);
       },
       /**
        * webUoloader对象容器
        */
       uploader: [],
       /**
        * 文件资源ID
        */
       resId:[],
       /**
        * 创建文件上传容器
        */
       createWebUploader: function (index) {
           var resMan = this;
           var dropBox = $('#' + 'uploadBox' + index);
           var ipt = $('#' + 'filePicker' + index);
           resMan.uploader[index] = WebUploader.create({

               // 选完文件后,是否自动上传。
               auto: true,

               // swf文件路径
               swf: capsule.stringUtil.addPreUrl("/js/lib/webuploader/dist/Uploader.swf"),

               //指定Drag And Drop拖拽的容器
               dnd: $('#' + 'uploadBox' + index),

               // 文件接收服务端。
               server: capsule.stringUtil.addPreUrl("/data/plan/main/uploadPlanFile",{type:index}),

               // 选择文件的按钮。可选。
               // 内部根据当前运行是创建,可能是input元素,也可能是flash.
               pick: ipt,

               accept: {// 只允许选择图片文件。
                   title: 'Images',
                   extensions: 'jpg,jpeg,png',
                   mimeTypes: 'image/jpg,image/jpeg,image/png'//修改这行,优化选择文件界面开启效率
               },
               // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
               resize: false
           });
        //其他事件监听
       },
       //其他界面样式控制
       ...
       /**
        * 刷新布局定位
        */
       refresh:function(){
           $.each(this.uploader,function(i,plugin){
               plugin.refresh();
           });
       }

源码分析

对于display:none的dom元素,offset方法获取到的值如下:

由于界面一开始是隐藏状态进行初始化的,界面初始化两个插件后:


由于绝对定位导致的的相对定位生成差异 
两个按钮虽然css属性一样,确并没有重叠,细致的原因未去研究,有兴趣的可以看下css绝对的定位相关的介绍 

可以看到,两个插件自动生成的offset都是0,采用上述方案优化js逻辑后:

建议
1、如果js逻辑没有问题,但是问题依然没有解决,本人遇到的是由于avalon渲染需要时间导致的,因此加了个延时,确保dom渲染完毕,再执行refresh方法即可 
2、对于每次初始化控件,对界面资源的使用略显浪费,建议控制显示和隐藏,在界面初始加载的时候进行webuploader插件的初始化,初始化完毕后,点击显示后,利用延时确保dom渲染完毕后遍历uplader[],执行refresh,重新定位更佳。

/**
 * 确保下载容器display属性不为none
 */
 setTimeout(function(){
     PageHelper.RES_MAN.refresh();
 },1000);

参考

WebUploader初始化时的缺陷及处理方法 
webuploader插件,我踩得坑

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webupload是一款强大的文件上传插件,它可以实现各种文件类型的上传功能。完美版指的是该插件具备了所有需要的功能,并且可以直接拿来使用,无需进行任何修改。 Webupload的完美版具有以下特点和优势: 1. 多文件上传:该插件可以同时上传多个文件,用户可以一次性选择多个文件进行上传,大大提高了上传效率。 2. 断点续传:如果上传过程中出现网络中断或其他异常情况,Webupload可以自动恢复上传进度,避免重新上传已上传的部分,节省用户的时间和流量。 3. 文件预览:在选择文件后,Webupload可以提供文件预览功能,方便用户确认选择的文件是否正确。 4. 上传进度显示:插件会实时显示文件上传的进度,让用户清楚了解上传的状态,避免长时间等待和不确定性。 5. 上传验证:Webupload可以对上传文件进行验证,确保只接受合法的文件格式和大小,保护服务器资源和数据安全。 6. 并发控制:插件可以控制并发上传的数量,有效解决服务器和网络的负载压力,保障上传的稳定性。 7. 兼容性强:Webupload兼容各种浏览器和操作系统,无论是在PC端还是移动端,都可以正常运行。 通过使用Webupload的完美版,用户可以轻松实现文件上传功能,无需进行繁琐的编码和配置工作。这大大节省了开发时间和精力,帮助开发人员更快速地搭建网站或应用。同时,Webupload的完美版还可以通过自定义配置,满足特定需求,具备灵活性和可扩展性。总之,Webupload的完美版是一款功能全面、稳定可靠的文件上传插件,使用简单方便,适用于各种Web开发项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值