前言

不仅仅是jQuery UI resizble的div包含iframe会导致缩放的不平滑,draggable也会出现包含iframe会导致拖放的不平滑,但是因为jQuery UI有为draggable进行了处理——添加了iframeFix属性设置(iframe:true时候就可以解决),但是却没有为resizable添加这个属性(实在费解,这个为毛啊)。

问题

jQuery UI resizble的div包含iframe导致缩放的不平滑解决(通过helper可观察到缩放非常不平滑)

测试代码

HTML:

<divid="draggable"><iframesrc="http://www.baidu.com"></iframe>
</div>

CSS:

#draggable{width:800px;height:500px; }iframe{width:100%;height:100%;}.widget_resizable_helper{border:3px solid #A29B9B;z-index:999999 !important;
}

JS:

$("#draggable").resizable( { helper: "widget_resizable_helper"});

解决思路

思路一:用在开始进行缩放(触发了resizable的start事件)为iframe添加z-index属性,将iframe放置在最下层。

$("#draggable").resizable({helper:"widget_resizable_helper",start:function( event, ui ) {$("#draggable").css({position:"relative","z-index":-1});$("iframe").css({position:"relative","z-index":-2});},  stop:function(){     $("#draggable").css({position:"absolute","z-index":1000});//尘归尘,土归土,设回正常状态下的属性     $("iframe").css({"z-index":1001});  }});

这个做法在chrome和firefox有效,但在IE下无效(缩放拉到iframe里面还是会一卡一卡的,蛋疼啊)。

问题原因:细心的人估计发现了,其实设置z-index是有效的,但为什么效果像是z-index无用呢。凶手就是——IE穿透了

具体原因就是—— IE中如果两个div有层叠关系,上层的div没有内容和背景图片,当鼠标在两个div重叠部分的时候,会触发下层div的mouseover事件(IE),从而触发上层div的mouseleave事件,也就是说,上层的div被穿透了。

所以示例在IE上就出现:有些元素被遮挡了(z-index起效了),但a标签因IE穿透可以被触发事件,所以在resizing的时候就会因为iframe里面的a标签被触发而一卡一卡的。

结果:这种解决思路不大行,果断放弃。

思路二在我灵机一动下,突然意识到draggable已经解决了iframe影响的问题,那我能不能借鉴draggable里的iframefix。

$("#draggable").resizable({helper:"widget_resizable_helper",start:function( event, ui ) {$("iframe").each(function() {$("<div class='ui-resizable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px", height: this.offsetHeight+"px",position:"absolute", opacity: "0.001", zIndex: 1000}).css($(this).offset()).appendTo("body");});},stop:function(){$("div.ui-resizable-iframeFix").each(function() {this.parentNode.removeChild(this);});}
});

结果:神奇的解决了,chrome、firefox、IE等,竟然都非常平滑,果然它山之石可以攻玉。

解决思路就不在这里班门弄斧了,大家看看也就明白了。

还存在问题——draggable

在上面我说过,jQuery UI 对draggable的iframefix下面这种解决思路。

$("iframe").each(function() {$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px", height: this.offsetHeight+"px",position:"absolute", opacity: "0.001", zIndex: 1000}).css($(this).offset()).appendTo("body");
});

这对draggable有很大问题——拖动还是会卡的,而且非常明显。

原因就是  .css($(this).offset()) 和 width: this.offsetWidth+"px", height: this.offsetHeight+"px"这个设置,遮挡层大小和位置就仅仅是原先iframe的大小和位置。如果鼠标边拖动iframe边离开遮挡层,会有很明显一卡一卡的情况,因为遮挡层外没有遮挡,iframefix这东西就废啦!!!!!

哈哈哈,是不是觉得坑叻。

不过还是有几个解决方法:

思路一:使用helper,当helper移到指定位置再设置iframe的位置。

$widgetObj.draggable({          helper:function(){return '<div style="width:'+w+'px;height:'+h+'px;z-index:'+1001+';background:black;opacity:0.4;"></div>';},iframeFix:true,stop:function(event,ui){$widgetObj.css({'top':ui.position.top,'left':ui.position.left});}
}) ;

思路二:不使用iframeFix。自己设置遮挡层,将遮挡层大小设为body的长宽,位置设置为top:0;left:0,

$("#draggable").draggable({start:function( event, ui ) {$("iframe").each(function() {$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width: document.body.scrollWidth+"px", height: document.body.scrollHeight +"px",position:"absolute", opacity: "0.001", zIndex: 1000,top:0,left: 0}).appendTo("body");});},stop:function(){$("div.ui-draggable-iframeFix").each(function() {this.parentNode.removeChild(this);});}
});

两种思路我偏向第一种用法,效果比第二种好,第二种虽然不会卡,但是有像页面被全选的情况。

jQuery UI resizble、draggable的div包含iframe导致缩放和拖拽的不平滑解决方法相关推荐

  1. jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法

    jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法 参考文章: (1)jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法 ( ...

  2. 【PyQT5】安装之后,PyUIC没有成功转换ui文件转为py且出现错误:`Process finished with exit code 1`的解决方法

    目录 1. 没有成功转换且出现错误:`Process finished with exit code 1` 2. 找解决办法的过程(可跳过) 3. 解决办法 1. 没有成功转换且出现错误:Proces ...

  3. Office 2010提示:您正试图运行的函数包含有宏或需要宏语言支持的内容的解决方法

    最近发现自己的电脑速度越来越不行了,索性重装了系统,弄了个全英文的win7系统.在安装office2010的时候,我选择的是自定义安装,只选择安装其中部分常用的组件,如word, excel,pp等, ...

  4. element ui 表格中的字太长,想要把多余的字变成...解决方法,一个属性即可

    问题描述如下 相应代码段 <el-table style="width: 100%" height="330px" :data="tableDa ...

  5. Jquery Datatable 数据填充报错:requested unknown parameter ‘XXX‘ for row xx, column xx 解决方法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 报错如图: 解决方法见官网:https://datatables.net/manual/tech-n ...

  6. Element UI表格拖拽(vue中) —— 行拖拽、列拖拽

    目录 安装依赖 vuedraggable 实现拖拽的要点 行拖拽要点 列拖拽要点 完整范例代码 安装依赖 vuedraggable 安装  vuedraggable 的同时,会自动安装 sortabl ...

  7. jquery UI 跟随学习笔记——拖拽(Draggable)

    jquery UI 跟随学习笔记--拖拽(Draggable) 引言 这周暂时没有任务下达,所以老大给我的任务就是熟悉jquery相关插件,我就先选择了jquery UI 插件,以及jquery库学习 ...

  8. 让 jQuery UI draggable 适配移动端

    背景: 在移动端,本人要实现对某个元素的拖动,想到使用 jQuery UI 的 draggable 功能.但是发现此插件的拖动只支持PC端,不支持移动端. 原因: 原始的 jQuery UI 里,都是 ...

  9. jquery ui 拖拽

    Query UI是JQuery官方支持的WebUI 代码库,包含底层交互.动画.特效等API,并且封装了一些Web小部件(Widget).同时,JQuery UI继承了jquery的插件支持,有大量的 ...

最新文章

  1. EL:固氮能力主要取决于物种分类而不是土壤养分
  2. LUOGU P2764 最小路径覆盖问题 (最小路径点覆盖)
  3. 绝对定位和相对定位的口诀---子绝父相
  4. Python 操作字典 的几个技巧
  5. 单核工作法18:简化协作(下)
  6. html文件怎么保存链接,如何使用beautifulsoup将链接的html保存在文件中,并对html文件中的所有链接执行相同的操作...
  7. wpf ui框架_.NET跨平台框架Avalonia UI
  8. linux oops产生原理,kernel panic , Oops 等cpu异常的分析与定位
  9. 黑圈数字符号0到50复制_电脑上怎么打出特殊符号「收藏」
  10. 为什么薄膜干涉的厚度要很小_薄膜干涉的膜为什么不能太厚?
  11. zookeeper3.4.5集群安装
  12. Python基础学习----异常
  13. MySQL日期时间函数大全
  14. MATLAB系统辨识工具箱学习,详细教程!
  15. ftp服务器修改默认端口,FTP原理和修改FTP默认端口
  16. HBase2.0中的Benchmark工具 — PerformanceEvaluation
  17. 图像处理之图像去雾中文综述性论文
  18. 【嵌入式Linux】开发环境搭建
  19. 电脑连不上5GWiFi解决办法:更新驱动
  20. 论如何进行培养独立解决问题的能力

热门文章

  1. Python几种加密算法
  2. zhuan zai suffix tree
  3. 一个老王开枪案例带你一步一步领略程序开发的魅力
  4. 大数高精运算-----乘法
  5. 第三课 泛型+反射封装数据库访问层 2019-04-02
  6. Redis(2)---数据持久化
  7. sprint2第三天任务完成情况
  8. 任意两点间的最短路问题(Floyd-Warshall算法)
  9. Spring注解方式实现定时器
  10. 制作wordpress页面的学习记录