`
vakin.jiang
  • 浏览: 147215 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

遮罩层解决jQuery UI Dialog 内嵌iFrame拖曳缓慢问题

 
阅读更多

不知道大家使用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

 

1
0
分享到:
评论
1 楼 0obeiiedo0 2011-10-31  
楼主,你好。我现在遇到个问题。我的页面是用 iframe 的。就是分了三个部分。头部,左侧,右侧。左侧是菜单,右侧是显示的页面。我在右侧页面做修改时用 jquery dialog 的时候,这个 dialog 只覆盖了右侧页面,我想要让它把所有页面都覆盖,也就是也就是整个页面,而不是只是右侧的,楼主有解决办法吗 ?

相关推荐

    jquery ui Dialog 添加最大最小化按钮控制

    在IT领域,jQuery UI是一个非常流行的前端开发库,它提供了许多可交互的用户界面组件,如Dialog(对话框)就是其中之一。"jquery ui Dialog 添加最大最小化按钮控制"的主题涉及如何扩展jQuery UI Dialog的功能,使其...

    jquery ui dialog 扩展

    《jQuery UI Dialog扩展详解》 在前端开发中,jQuery UI Dialog是一个非常实用的组件,它提供了弹出对话框的功能,可以用于警告、确认、信息提示等场景。这篇内容将深入探讨jQuery UI Dialog的扩展,包括如何自定义...

    JQuery UI Dialog

    当 bgiframe 属性被设置为 true 时,JQuery UI Dialog 将在 IE6 下使用 iframe 来覆盖 select 元素,以确保对话框能够正确地显示。 三、width 和 height 属性 width 和 height 属性用于设置对话框的宽度和高度。...

    JQuery UI Dialog使用样例

    **jQuery UI Dialog 使用详解** jQuery UI 是一个基于 jQuery 的用户界面库,提供了丰富的交互组件,其中 Dialog(对话框)是一个非常实用的功能。Dialog 可以用于创建模态或非模态窗口,通常用于显示警告、确认...

    Jquery UI dialog 详解 (弹出层)

    ### Jquery UI Dialog 详解(弹出层) #### 一、引言 Jquery UI Dialog 是 jQuery UI 库中的一个重要组件,它提供了一个简洁而强大的界面来创建对话框或者弹出层。通过简单的配置和使用,开发人员可以轻松地集成...

    jquery ui中的dialog

    **jQuery UI中的Dialog组件** jQuery UI是一个功能丰富的JavaScript库,它提供了许多用户界面元素,如对话框(Dialog)、拖放(Draggable)、可排序(Sortable)等。在这些元素中,Dialog是创建弹出式窗口或模拟...

    jqueryUI_dialog实例

    本文将深入探讨“jqueryUI_dialog实例”,这是一个关于如何使用jQuery UI库创建对话框(Dialog)功能的实践案例。 jQuery UI的Dialog组件是网页应用中常见的一种交互元素,用于显示模态或非模态窗口,例如警告、...

    jquery-ui-dialog-demo

    **jQuery UI Dialog 演示** `jquery-ui-dialog-demo` 是一个基于 jQuery UI 库的弹出窗口插件示例,它提供了丰富的交互式对话框功能,包括模拟原生 JavaScript 的 `alert` 和 `confirm` 对话框以及自定义的打开...

    jQuery UI dialog 的使用

    在web开发中,jQuery UI...首先,要使用jQuery UI的dialog组件,必须确保已经正确引入了jQuery库以及jQuery UI库。根据提供的内容,我们了解到引入jQuery库的方式是通过在HTML文档的部分插入标签,如下所示: ```html ...

    jQuery UI Frame Dialog官方修正版(官方1.1.2版本上面有问题)

    jQuery UI Frame Dialog是一款基于jQuery UI库的对话框插件,用于在网页中创建具有框架效果的弹出对话框。在官方1.1.2版本中,存在一个CSS加载问题,导致对话框的样式可能无法正常显示,影响了用户体验。这个问题在...

    jQuery UI dialog IE6下处理select框被遮挡jquery.bgiframe.js

    jQuery UI dialog IE6下处理select框被遮挡jquery.bgiframe.js

    jquery_dialog jquery_dialog jquery_dialog

    《jQuery Dialog 深度解析与实践应用》 在Web开发领域,jQuery Dialog是一款非常流行的JavaScript库,用于创建可交互的对话框。它基于jQuery框架,提供了丰富的功能和灵活的定制选项,使得开发者能够轻松地在网页上...

    jquery.ui.dialog

    里面是经过修改的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 中文帮助文档

    jQuery UI 中文帮助文档是学习和解决问题的重要参考,它详细解释了各个组件的使用方法和API。此外,社区论坛、Stack Overflow 和其他在线资源也是获取帮助和分享经验的好地方。 综上所述,jQuery UI 是一个功能强大...

    jqueryUI dialog

    《jQuery UI Dialog详解及其应用实践》 jQuery UI Dialog是一款基于jQuery库的强大对话框组件,它为Web应用程序提供了灵活且功能丰富的交互式对话框。Dialog组件不仅支持基本的弹出框功能,还可以实现模态对话框、...

    jQuery UI组件 jQuery UI

    **jQuery UI组件详解** jQuery UI 是一个强大的前端开发框架,基于流行的JavaScript库jQuery构建,它提供了丰富的用户界面组件,能够帮助开发者快速构建交互性、视觉吸引力强的网页应用。jQuery UI 包含了大量的...

    浅析JQuery UI Dialog的样式设置问题

    本文将详细讨论JQuery UI Dialog的样式设置问题。 首先,为了使用JQuery UI Dialog,你需要确保已经正确引入了JQuery库和JQuery UI库。在文章中提到,需要引入JQuery的JavaScript文件和JQuery UI的JavaScript文件...

    遮罩层弹出半透明dialog

    遮罩层弹出半透明dialog,很fashion。

    jquery-ui.css、jquery-ui.js下载

    例如,要创建一个对话框,只需简单调用`.dialog()`方法,jQuery UI会自动处理剩下的布局、事件绑定和动画效果。 jQuery UI的组件丰富多样,例如: 1. **Dialogs** - 提供模态和非模态对话框,用于展示信息、警告或...

    jquery dialog弹出层

    而jQuery UI则是在jQuery基础上扩展的一套交互式用户界面组件库,其中包括一个强大的对话框(Dialog)功能,即“jQuery dialog弹出层”。这个弹出层在网页应用中广泛用于创建模态或非模态警告、提示、确认或者更复杂...

Global site tag (gtag.js) - Google Analytics