不知道大家使用jQuery UI Dialog 内嵌iFrame页面时候遇到拖曳延迟等问题没有,或者是对mousedown,mouseup事件触发不敏感。特别在同时弹出多个dialog非常明显。很明显问题症结所在就是iframe,所以对症下药就是要把iframe藏起来。在同时不影响用户体验的同时,我的解决方案是:在触发拖曳事件前将整个dialog加一层透明遮罩层,拖曳停止remove掉这个遮罩层。直接贴代码,由于只贴部分关键处理代码。。如果有兴趣可以留言给我。
代码片段:
//弹出页:frame页面
function showFrameDialog(url,pageid,height,width) {
screenWidth = screenWidth || $(document).width();
screenHeight = screenHeight || $(document).height();
var maxZindex = getNextZindex();
onActivePageId = pageid;
//页面显示前调用
try {beforeFrameDialogShow(onActivePageId);} catch (e) {}
var pageIsOpen = false;
var dialogCount = 0;
$("iframe").each(function(){
dialogCount++;
var $dialog = $(this).parent().parent();
var key = $(this).attr('key');
if(pageid == key){
//alert("page[key:"+pageid+"] Is Open");
pageIsOpen = true;
//set z-index at top
$dialog.css("z-index",maxZindex);
//set position in center
resetDialogPosition($dialog);
}else{
//reset position
var offset = (dialogCount%2==0)? 15: -15;
var _top = $dialog.position().top + 5;
var _left = $dialog.position().left + offset;
//
resetDialogPosition($dialog,_left,_top);
}
});
if(pageIsOpen)return;
var w = width || 450;
var h = height || 285;
var split = (url.indexOf("?")>0)?"&":"?";
url = url + split + "__time=" + new Date().getTime()+"&pageid="+pageid;
var div = document.createElement("div");
var iframeHtml = " <iframe winStatu='Normal' id='ifr_"+pageid+"' name='ifr_"+pageid+"' width='" + w
+ "px' height='" + h + "px' src='" + url
+ "' frameborder=0 scrolling='no' key='"+ pageid +"'></iframe>";
var finalTitle = openedTitles[pageid];
$(div).attr('id', 'div_'+pageid);
$(div).attr('divHeight', h);
$(div).attr('divWidth', w);
$(div).attr('title', finalTitle ? finalTitle : 'Page is Loading...');
$(div).html(iframeHtml);
var dlg = $(div).dialog( {
height : h,
width : w,
zIndex:maxZindex,
resizable : false,
bgiframe: true,
beforeclose: function(event, ui) {
refreshProperties(true);
//页面关闭前调用
try{beforeFrameDialogClose(pageid);}catch(err){}
dlg.remove();
},
dragStart: function(event, ui) {},
drag: function(event, ui) {
onActivePageId = pageid;
try{onActivePage(onActivePageId);}catch(err){}
},
dragStop: function(event, ui) { }
});
//--------------解决拖曳延迟问题 add by vakin 20110818-------------------
var $waterfall = addWaterfall('#div_'+pageid);
$waterfall.hide();
var $headerBar = $('#div_'+pageid).prev();
$headerBar.bind('mousedown',function(){
window.console.info.apply(window.console, ["mousedown"]);
$waterfall.show();
});
$headerBar.bind('mouseup',function(){
window.console.info.apply(window.console, ["mouseup"]);
$waterfall.hide();
});
//--------------add by vakin 20110818 end-------------------
if(finalTitle)return;
var frameElm = window.frames['ifr_'+pageid];
if (frameElm.attachEvent) {
frameElm.attachEvent("onload", function() {
setDialogTitle(frameElm,pageid);
});
} else {
try {
frameElm.onload = function() {
setDialogTitle(frameElm,pageid);
};
} catch (e) {}
}
}
/*iframe加载完成调用*/
function setDialogTitle(frameElm,pageid,defaultTitle){
var pageTitle = defaultTitle || frameElm.document.title;
$("span.ui-dialog-title").each(function(){
var $this = $(this);
if($this.attr('id').indexOf(pageid)>0){
$this.text(pageTitle);
openedTitles[pageid] = pageTitle;
return false;
}
});
}
//增加遮罩层
function addWaterfall(outterDiv){
var waterfall = $(document.createElement("div"));
waterfall.css( {
"height" : "100%",
"width" : "100%",
"filter" : "alpha(opacity = 50)",
"-moz-opacity" : "0.1",
"opacity" : "0.1",
"background-color" : "#fff",
"position" : "absolute",
"left" : "0px",
"top" : "30px",
"display":"none"
});
$(waterfall).appendTo(outterDiv);
$(waterfall).bind('click',function(){
$(this).hide();
});
return $(waterfall);
}
淘宝入口:http://item.taobao.com/item.htm?id=13440256831
分享到:
相关推荐
Jquery UI dialog 详解 (弹出层) 包含jquery弹出层的详细介绍,以及代码用例
两个版本:一个替换ui close按钮,对三个按钮设立同样css;一个不替换,修改ui的css文件;完美打开多个对话框,并可以分别控制最大最小关闭。jquery文件没有包含进来。
NULL 博文链接:https://taotie119.iteye.com/blog/2075536
JQuery UI 的对话框的一些属性的用法
jQuery UI dialog IE6下处理select框被遮挡jquery.bgiframe.js
NULL 博文链接:https://wufan0023.iteye.com/blog/1446334
添加按钮弹出层jqueryui实现,dialog
jQuery UI dialog 的使用 准备 jQuery 环境 首先,我们创建一个按钮,点击这个按钮的时候,将会弹出一个对话框。 详情内容可以参考文档
里面是经过修改的jquery.ui.dialog.js(版本jQuery UI Dialog 1.8.12),添加了parentElement: 'body',详情查看http://forum.jquery.com/topic/dialog-will-move-its-div-tag-to-body
jQuery_UI全教程之一_dialog以及Datepicker使用说明 jQuery UI全教程之一(dialog的使用教程) 2011-03-15 17:41 jQuery UI目前的版本已经更新到了1.8.7。个人感觉和easyui相比起来,jQuery UI在界面的美观程度和可...
jquery_dialogjquery_dialogjquery_dialogjquery_dialogjquery_dialogjquery_dialogjquery_dialog
遮罩层弹出半透明dialog,很fashion。
最近在用一个JQUERY UI Dialog的插件,感觉特别强大,但样式设置比较麻烦,研究了俩天终于搞定了。 运行插件,需要的环境如下 [removed][removed] [removed][removed] <link href=”CSS/themes/redmond/jquery.ui...
JQuery UI Dialog 弹出框以及清楚数据
jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们可以直接用它来构建具有很好交互性的web应用程序。 编辑本段组件构成 jQuery UI ...
jQuery UI Cookbook(2013.7) Adam Boduch (pdf + ePub) 出版时间:2013.7 Adam Boduch Packt 内容简介: jQuery UI is the quintessential framework for creating professional user interfaces. While jQuery ...
今天我们用jquery ui dialog来做一个弹窗特效。我们先看下效果截图: 我们可以看到,点击的时候,弹窗出现,而且这个弹窗是居中的,还是可以拖动的。。。实现这一切,只要以下代码: 我们可以看到,我对pop这个...
一个小的网站等待效果的例子,jquery做的,jquery的dialog,这里有div的z-index控制着div层的重叠顺序
Jquery中dialog属性的小计,详细介绍dialog的使用