Portal 拖动 保存位置 

随机排列后按保存,则portal拖动后用json串保存其拖动后的位置到Cookie,刷新时即为拖动后的排列。

若随机排列则此时清空之前Cookie的排列信息,刷新时为默认的排列。

 

版本Ext 3.0

将附件解压至ext-3.0.0\examples\文件夹下的即可运行.

 

 

		Ext.onReady(function() {

			var tools = [{
						id : 'gear',
						handler : function() {
							alert('?');
						}
					}, {
						id : 'close',
						handler : function(e, target, panel) {
							panel.ownerCt.remove(panel, true);
						}
					}];

			var pl = [{
						id : '001',
						title : 'Panel 1',
						layout : 'fit',
						tools : tools,
						html : '3'
					}, {
						id : '002',
						title : 'Panel 2',
						tools : tools,
						html : '2'
					}, {
						id : '003',
						title : 'Panel 3',
						tools : tools,
						html : '3'
					}, {
						id : '004',
						title : 'Panel 4',
						tools : tools,
						html : '4'
					}, {
						id : '005',
						title : 'Panel 5',
						tools : tools,
						html : '5'
					}, {
						id : '006',
						title : 'Panel 6',
						tools : tools,
						html : '6'
					}];

			var portal = new Ext.ux.Portal({
						region : 'center',
						margins : '35 5 5 0',
						items : [{
									columnWidth : .33,
									style : 'padding:10px 0 10px 10px',
									items : []
								}, {
									columnWidth : .33,
									style : 'padding:10px 0 10px 10px',
									items : []
								}, {
									columnWidth : .33,
									style : 'padding:10px',
									items : []
								}],
						 tbar :['-',{
							          text:'随机排列并清除Cookie,刷新则回到默认',
							          iconCls : 'save',
							 					handler :initRandom
							         },'-',
							         {
							          text:'保存排列到Cookie,刷新则保持当前状态',
							          iconCls : 'save',
							 				  handler :savePosition
							         }
							   ]

					});

			var viewport = new Ext.Viewport({
						layout : 'fit',
						items : [portal]
					});

			function savePosition() {
				var result = [];
				var items = portal.items;
				for (var i = 0; i < items.getCount(); i++) {
					var c = items.get(i);
					c.items.each(function(portlet) {
								var o = {
									id : portlet.getId(),
									col : i
								};
								result.push(o);	;
							});
				}
				setCookie(Ext.encode(result));
				alert("以下json串保存到数据库即可记住各自位置:"+Ext.encode(result));
			}
			
			var cookieName = 'rankInfo';
			
			function setCookie(info) {
				var expiration = new Date((new Date()).getTime() + 15 * 60000);
				document.cookie = cookieName + "=" + info + "; expires ="+ expiration.toGMTString();
			}
			
			function getCookie() {
				var allcookies = document.cookie;
				var cookie_pos = allcookies.indexOf(cookieName);
				if(cookie_pos!=-1){
						cookie_pos += cookieName.length + 1;
						var cookie_end = allcookies.indexOf(";", cookie_pos);
						var rankInfo = allcookies.substring(cookie_pos, cookie_end);
						return rankInfo;
					}
				return null;
			}
			
			function delCookie(){
    		var exp = new Date();
    		exp.setTime(exp.getTime() - 1);
    		var cval=getCookie(cookieName);
    		if(cval!=null) document.cookie= cookieName + "="+cval+";expires="+exp.toGMTString();
			}

			
			removeAll = function(){
				var items = portal.items;
				for (var i = 0; i < items.getCount(); i++) {
					 var c = items.get(i);
					 c.items.each(function(portlet){
					 	  c.remove(portlet);
					 });
				}			
			}
			
init = function(rankInfo) {
    for (var i = 0; i < rankInfo.length; i++) {
     for (var j = 0; j < pl.length; j++) {
      if (rankInfo[i].id == pl[j].id) {
                                                        //pl[j].height =400;//高度设置
       portal.items.get(rankInfo[i].col).add(pl[j]);
      }
     }
    }
    portal.doLayout();
   }			
			function initRandom(){
				 var rankRandom = [{"id" : "001","col" : parseInt(Math.random()*3)}, 
				 		{"id" : "002","col" : parseInt(Math.random()*3)}, 
				 		{"id" : "003","col" : parseInt(Math.random()*3)}, 
				 		 {"id" : "004","col" : parseInt(Math.random()*3)}, 
				 		 {"id" : "005","col" : parseInt(Math.random()*3)}, 
				 		{"id" : "006","col" : parseInt(Math.random()*3)}];
				 removeAll();
				 delCookie();
				 init(rankRandom);
			}
			
			
			var rankInfoDefault=[{"id" : "001","col" : 0}, {"id" : "002","col" : 0}, {"id" : "003","col" : 0}, {"id" : "004","col" : 0}, {"id" : "005","col" : 0}, {"id" : "006","col" : 0}];
			
			eval("var rankInfo_cookie ="+ getCookie());
			init(rankInfo_cookie==null?rankInfoDefault:rankInfo_cookie);


		});

 

虚拟调试实战:从零构建西门子TIA与NX MCD集成项目 虚拟调试是数字孪生技术在工业自动化领域的核心应用,它通过构建高保真的虚拟模型与真实控制程序实时交互,实现控制逻辑的早期验证与优化。其原理在于打通PLC编程环境(如西门子TIA Portal)与机电仿真软件(如NX MCD)之间的信号通信,形成一个闭环的仿真测试环境。这项技术的核心价值在于将调试工作大幅前移,能在物理设备制造前发现并解决机械干涉、逻辑错误和节拍瓶颈等问题,从而显著降低项目风险和成本。在应用场景上,它广泛应用于智能制造产线规划、自动化设备研发,以及像“西门子杯”中国智能制造挑战赛这样的工程实践竞 阅读详情

相关推荐

Ubuntu 24.04 下 Kazam 屏幕录制工具的高效配置与实用技巧(含Wayland兼容方案)

本文详细介绍了在Ubuntu 24.04系统中高效配置和使用Kazam屏幕录制工具的完整指南。针对默认的Wayland显示服务器环境,提供了关键的兼容性解决方案,包括依赖安装、权限设置和音频配置,解决了录制黑屏和无声等常见问题。同时分享了区域录制、画中画、命令行自动化等实用技巧,帮助用户提升录制效率与视频质量。

weixin_29209801的博客 624

portal 源代码

portal作为一个可以自定义拖动 元素的的元件,功能不错,现在将代码贴在这里 以后 再研究研究。 /* * Ext JS Library 2.0.2 * Copyright(c) 2006-2008, Ext JS, LLC. * licensing@extjs.com * * http://extjs.com/license */ Ext.ux.Portal = Ext

代码驱动世界,数字改变生活。 2552

医学影像AI标注实战:肝脏分割与血管标注技巧

医学影像标注是AI医疗领域的基础技术,其核心在于将解剖学规则转化为可计算的标注规范。不同于普通图像标注,医学标注需要严格遵循临床共识,如Couinaud肝段划分规则。通过3D Slicer等工具,可以实现从肝脏整体分割到血管树标注的全流程工作,其中阈值处理、区域生长等算法技术是关键。在实际应用中,标注一致性往往比绝对精度更重要,这直接影响AI模型的训练效果。本文以肝脏CT标注为例,详解了包括窗宽窗位设置、误差模式分析、血管连续性处理等实用技巧,这些方法同样适用于肺部结节、脑区划分等其他医学影像任务。掌握这些

cihongmo6452的博客 1034

uStart.org的网站实现初步研究

最近看了uStart.org的网站,想了解一下不使用portal怎么实现这种类似于个人门户一样的网站,这个网站是php做的,分析了一下结果如下 1. 页面整体结构                                      //显示可drag的控件 (1)         //显示网页内容 (2)     2. 在(1)中加载可以

燃烧JAVA 721

14、TIA Portal HMI开发环境与操作指南

本文详细介绍了TIA Portal HMI开发环境的操作指南,包括图层管理、屏幕对象使用、静态与动态属性设置、脚本编写、事件触发等内容。同时,还总结了开发注意事项、未来趋势以及常见问题的解决方案,帮助开发者高效构建HMI界面并与PLC进行数据交互。

g5h6i7j的博客 274

jQuery可拖拽布局组件开发与实战

在现代Web应用开发中,用户界面的交互性和可操作性日益受到重视。jQuery作为一种广泛使用的JavaScript库,结合其插件体系,为开发者提供了强大的可拖拽布局组件实现能力。这类组件允许用户通过鼠标拖拽方式自由调整页面元素的位置与布局,极大地提升了用户体验和操作效率。jQuery可拖拽布局组件广泛应用于可视化仪表盘、动态表单、页面构建器等场景。其核心功能包括元素拖拽、布局重排、状态保存等,这些功能通过事件监听、DOM操作与动画控制等技术协同实现。

weixin_30533301的博客 1012

Ext Portal 新例子

Ext Portal 新例子 我综合了Ext社区目前有关Ext Portal的最新发表的扩展和讨论, 形成了一个新的例子. 将附件解开后,放置到与examples\portal目录并行的位置,即: ext-2.0\examples\portal ext-2.0\examples\portal2 运行其中的portal.html可以看到下列效果: 1.基本功能 .........

iteye_17017的博客 225

jQuery拖拽布局插件开发与实战

jQuery 是一个快速、简洁的 JavaScript 库,极大地简化了 HTML 文档的遍历、事件处理、动画效果及 Ajax 交互操作。凭借其模块化设计与丰富的插件生态,jQuery 在前端开发中占据重要地位,尤其适合需要快速构建交互式页面的开发场景。Portal.zip 是一款基于 jQuery 的拖拽布局插件,专注于提供高效的前端布局解决方案。它支持模块化组件的自由拖放、动态位置保存与实时布局更新,广泛适用于仪表盘、后台管理系统等需要高度交互性的应用场景。

weixin_29997223的博客 928

一个对Portal应用比较清晰的描述

来源: http://www.qqread.com/java/2009/11/w480007.html     探秘企业门户开发:Java Portlet入门 巧巧读书 2009-11-06 黄永兵 译 51CTO.com  技术论坛 大 中 小 当你访问iGoogle或是myYahoo!一类的门户时,是否会对这种个性化门户界面的实现方式感到好奇呢?实现...

cfy_zybing的专栏 205

jQuery拖拽布局插件Portal

jQuery拖拽布局插件Portal

jQuery EasyUI Portal 保存拖动位置,仿谷歌DashBoard效果的

文件中包含拖动后保存位置,不保存位置的设计html文件,jQuery EasyUI Portal 保存拖动位置!绝对可用!不能用请留言!已应用到实际的开发中使用

告别手动认证!Ubuntu20.04自动登录强制门户网络的黑科技(curl+nmcli实战)

本文详细介绍了在Ubuntu20.04系统中,如何利用curl和nmcli命令行工具实现自动登录强制门户网络(Captive Portal)的完整实战方案。通过编写自动化脚本,模拟网络探测、表单提交等流程,帮助用户彻底告别繁琐的手动认证,将网络连接无缝融入自动化工作流,尤其适合开发者、运维人员等需要频繁切换网络环境的用户。

weixin_28314575的博客 325

基于jquery实现的portal 拖拽实现布局调整

基于jquery实现的portal 拖拽实现布局调整,基于jquery实现的portal,不是easyui portal,和sortable

无需手柄也能玩!RetroAssembly虚拟控制器使用教程

RetroAssembly是一款可以在浏览器中运行的个人复古游戏收藏柜,让你随时随地重温经典游戏。本文将详细介绍如何使用RetroAssembly的虚拟控制器功能,即使没有实体手柄也能轻松畅玩各类复古游戏。 ## 什么是RetroAssembly虚拟控制器? RetroAssembly的虚拟控制器是一个集成在游戏界面中的模拟控制器,它可以通过鼠标或触摸屏操作,模拟实体游戏手柄的各种按键和摇杆功

gitblog_01054的博客 1078

easyui portal可拖拽到任意位置

该实例是easyui的扩展,点击index.html即可可以实现任意拖拽,

电阻应变式力传感器

电阻应变式力传感器

lu_fresh_student的博客 5075

终极揭秘:ScreenCloud截图实现原理,多显示器与窗口捕获源码全解析

在日常办公与远程协作中,截图工具几乎是每个人的刚需。ScreenCloud 作为一款跨平台(Windows、Mac、Linux)的**开源截图分享工具**,不仅截图快捷,还能一键上传到剪贴板、FTP、Imgur 等服务。本文将从源码角度深度解析 **ScreenCloud截图实现原理**,重点拆解多显示器捕获、单窗口捕获、选区截图三大核心路径,带你理解一款专业截图工具背后是如何工作的。 ## 截

gitblog_00775的博客 957

nRF开发环境搭建全攻略:VS Code + nRF Connect SDK + Zephyr实战

嵌入式开发中,环境配置往往是新手入门的第一道障碍,尤其面对基于Zephyr RTOS的Nordic nRF平台时,工具链的复杂度常让人望而却步。理解构建系统、SDK版本管理和调试工具之间的协作关系,是高效开发的前提。Zephyr作为开源实时操作系统,通过设备树和Kconfig实现硬件描述与功能配置,而nRF Connect SDK(NCS)则是Nordic基于Zephyr的增强发行版,两者结合为物联网开发提供了强大支持。基于VS Code搭建开发环境,配合west工具管理多仓库、CMake/Ninja执行构

weixin_29188997的博客 227

Sioyek:专为学术研究设计的智能PDF阅读器实战指南

作为一名经常需要阅读大量学术论文和教材的研究人员或学生,你是否曾为在PDF文档中反复查找参考文献、图表和公式而感到困扰?Sioyek正是为解决这一痛点而生的开源PDF阅读器,它通过智能跳转、快速搜索和高效导航功能,彻底改变了学术阅读的工作流程。 ## 为什么选择Sioyek?学术阅读的三大痛点解决方案 ### 痛点一:参考文献跳转效率低下 传统PDF阅读器在处理学术论文时,参考文献跳转往往依赖

gitblog_00260的博客 393

第3章: MMU Interval Notifier 区间通知器的核心原理⭐

摘要:区间级内存通知机制分析 本文分析了Linux内核中区间级内存通知机制(mmu_interval_notifier)的设计原理与实现。该机制针对传统全局通知(mmu_notifier)存在的性能开销大、无法精确控制等问题,通过引入区间树(Interval Tree)实现精确匹配,仅当内存变化与注册区间重叠时才触发回调。核心优势包括:1)O(log n + k)的高效查找性能;2)支持独立管理各内存区间;3)实现高并发处理不同区间的失效事件。

图形/计算GPU的驱动与虚拟化技术分享园地 2026

SAP CBC 集成质量系统初始化接入实战指南

摘要 本文探讨了SAP S/4HANA Cloud Public Edition项目中质量系统的初始接入过程。质量系统并非开箱即用,而是需要经过SAP Central Business Configuration(CBC)的Scope and Organizational Structure阶段部署后才能具备完整功能。文章重点分析了几个关键环节:CBC里程碑确认的时机选择、Identity Authentication的初始管理员设置、Business Role Template的创建规范等。实施过程中需特

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1410
上一篇: (转)跨浏览器编程之JavaScript
下一篇: Ext 对iframe中的panel进行doLayout
fireinjava
博客等级 码龄20年 5粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值