extjs4 desktop 实现仿win7效果的桌面窗口预览效果

ExtJS桌面化(desktop)插件Demo项目 该项目是通过改装desktop插件包下的app.js和desktop.js完成的桌面化项目!采用的动态加载的方式、100%保证能在myeclipse环境下跑起来! 立即下载

先上图:



这个预览效果是不是很炫,代码如下:

在原extjs desktop自带的demo的基础上,拓展TaskBar.js代码:


Ext.namespace("LinBsoft._PreviewBox");

LinBsoft._PreviewBox = Ext.extend(Ext.Component,
				{
				    inited: false,
				    defaultZIndex: 21000,
				    defaultLeft: 0,
				    defaultBottom: 40,
				    hideBottom: 30,
				    boxWidth: 250,
				    cloneWinMaxWidth: 220,
				    cloneWinMaxHeight: 116,
				    hideDelay: 500,
				    showDelay: 500,
				    constructor: function () {
				        LinBsoft._PreviewBox.superclass.constructor.call(this, { renderTo: document.body, cls: "lbs-previewbox", hidden: true });
				        this.inited = false;
				        this.hoverCount = 0
				    },


				    createBoxElements: function () {
				        var a = this.getEl(), b;
				        this.boxMl = a.createChild({ tag: "div", cls: "lbs-previewbox-ml" });
				        this.boxMr = this.boxMl.createChild({ tag: "div", cls: "lbs-previewbox-mr" });
				        this.boxMc = this.boxMr.createChild({ tag: "div", cls: "lbs-previewbox-mc" });
				        this.arrow = a.createChild({ tag: "div", cls: "lbs-previewbox-arrow" });
				        b = this.boxMc;
				        this.desc = b.createChild({ tag: "div", cls: "lbs-previewbox-desc" });
				        b.createChild({ tag: "hr" });
				        this.win = b.createChild({ tag: "div", cls: "lbs-previewbox-win" });
				        this.inited = true;
				        this.mon(mydsk.desktop.taskbar.getEl(), "click", this.onTaskbarClick, this);
				        this.mon(mydsk.desktop.taskbar.getEl(), "contextmenu", this.onTaskbarClick, this)
				    },
				    onTaskbarClick: function () { this.hideBox(true) },
				    showBox: function (a) {
				        this.needShowBox = true;
				        this.hoverCount += 1;
				        Ext.defer(function () { this.doShowBox(a, this.hoverCount) }, 300, this);
				    },

				    doShowBox: function (f, e) {
				        var d, h, b, a, c, g;
				        if (!f || !f.win || !f.centerX) { alert("required parameters not exist"); return }
				        if (this.hoverCount !== e) { return }
				        if (!this.needShowBox) { return }
				        if (!this.inited) { this.createBoxElements() }
				        c = Ext.isNumber(f.centerX) ? f.centerX : this.defaultLeft;
				        d = f.win;
				        h = d.getEl();
				        g = d.title || "";
				        this.desc.update(g || "");
				        if (this.clonedEl) { this.clonedEl.remove() }
				        this.clonedEl = this.getClonedEl(d);
				        this.clonedEl.show();
				        this.win.appendChild(this.clonedEl);
				        b = this.getEl();
				        if (this.isVisible()) {
				            b.setBottom(this.defaultBottom);
				            this.show();
				            b.shift({ left: c - (this.boxWidth / 2), opacity: 1, easing: 'easeIn', duration: 500 })
				        } else {
				            b.setLeft(c - (this.boxWidth / 2));
				            b.setBottom(this.hideBottom);
				            b.setOpacity(0.2);
				            this.show();
				            b.shift({ bottom: this.defaultBottom, opacity: 1, easing: 'easeIn', duration: 500 })
				        }
				        this.hoverCount = 0
				    },

				    hideBox: function (a) {
				        this.needShowBox = false;
				        Ext.defer((function () { if (this.needShowBox) { return } this.doHideBox(a) }), (a === true) ? 0 : 300, this)
				    },

				    doHideBox: function (b) {
				        var c;
				        var a = function () {
				            if (this.needShowBox) { return }
				            this.hide();
				        };
				        if (this.clonedEl) { this.clonedEl.remove() }
				        this.hoverCount = 0;
				        if (b === true) { a.call(this); return }
				        c = this.getEl();
				        c.shift({ bottom: this.hideBottom, opacity: 0, duration: 500, easing: 'easeIn', scope: this, callback: a })
				    },


				    getClonedEl: function (e) {
				        var c = 0;
				        var h = 0;
				        var g = e.getEl();
				        var b = g.dom.cloneNode(true);
				        b.className = b.className.replace('x-hide-offsets', '');
				        b.removeAttribute("id");
				        var f = Ext.get(b);
				        f._previewMask = f.createChild({ tag: "div", cls: "lbs-previewbox-win-mask" });
				        var a = g.getSize();
				        var d = this.cloneWinMaxWidth / a.width;
				        c = (this.cloneWinMaxHeight - a.height * d) / 2;
				        if ((a.height * d) > this.cloneWinMaxHeight) { d = this.cloneWinMaxHeight / a.height; c = 0; h = (this.cloneWinMaxWidth - a.width * d) / 2 }
				        d = Math.min(d, 1);
				        f.setStyle("transform-origin", "0% 0%");
				        f.setStyle("-webkit-transform-origin", "0% 0%");
				        f.setStyle("-moz-transform-origin", "0% 0%");
				        f.setStyle("-o-transform-origin", "0% 0%");
				        f.setStyle("msTransform-origin", "0% 0%");
				        f.setStyle("-webkit-transform", String.format("scale({0})", d));
				        f.setStyle("-moz-transform", String.format("scale({0})", d));
				        f.setStyle("-o-transform", String.format("scale({0})", d));
				        f.setStyle("transform", String.format("scale({0})", d));
				        f.setStyle("msTransform", String.format("scale({0},{1})", d, d));
				        f.setLeftTop(h, c);
				        return f
				    }
				});


然后,在 Ext.define('Ext.ux.desktop.TaskBar', { 的  initComponent: function () { 里new一个对象

  LinBsoft.PreviewBox = new LinBsoft._PreviewBox();

在鼠标经过进入和移出任务栏快捷图标时显示和隐藏预览小窗:

    onMouseOverHandler: function (d) {
        var posx = 173 + d.x + (d.width / 2);
        var mx = window.event.x;
        if (Ext.isIE) { posx = mx + 173 }
        else if (Math.abs(posx - mx) > 73) { posx = mx }
        var b = { win: d.win, centerX: posx };
        LinBsoft.PreviewBox.showBox(b)
    },
    onMouseOutHandler: function (a) {
        LinBsoft.PreviewBox.hideBox()
    },

其中 b变量计算显示小窗的位置,因如ie和谷歌浏览器等的位置计算有差别,作了适应计算。

因为win7 是操作系统,可以直接操作复制屏幕显示内存,而js在浏览器中运行,不可能做这个操作,因此,这只是通过复制dom和css的缩小效果实现。

100%仿windows7桌面,任务栏以及桌面图标。 大家去下载 2011/4/15号的修改版本。 立即下载

相关推荐

EXTJS桌面系统-完整实例

EXTJS桌面系统-完整实例 数据库可以根据映射文件自己简历 这里只是为大家展示一下

(六)ExtJs小例子之窗体组件(Window)

申明:今后我们将使用ExtJs4.0,以前学的3.0的技术还仍然可以使用,只是为了使用更多新技术我们换成使用4.0. 点击下载4.0相关资源 4.0和3.0引入文件发生了变化。下面是4.0需要引入的文件 1.今天我们学习窗体组件Ext.window.Window。今天我们就是简单认识该组件,在接下来的课程中我们会不断的使用该组件,并且更加深入学习Window组件。 2.下面我们看一

fubo1990的博客 546

ExtJs做的仿桌面体系统,超酷!

Extjs做的类似与桌面的一个系统,IE打开后全屏后就和桌面一样,非常酷!

EXT富客户端后台管理系统 初步代码 -- vb2005xu自己动手系列

" /> "> "> //具体开发 -- BJExtreme类 BJExtreme= function(){} ; BJExtreme.prototype.getAuthor = function(){ return '许消寒' ; } BJExtreme.prototype.getVersion = function(){ return '2008年08

vb2005xu的专栏 388

Extjs实现的桌面系统(MVC)

Extjs实现的桌面化的管理系统,使用了MVC架构。希望大家可以从中学到东西。

基于Spring Boot在线远程考试系统的设计与实现

结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。目前的信息时代,对信息的管理趋于高效化,便捷化,这也是计算机大力普及所带来的便利,此程序软件在设备选用上,依靠的是比较大众的电脑设备,对电脑的配置没有过多要求,一般学校的计算机机房的电脑都可以满足程序开发需求,另外,开发出此款程序,让信息处理变得高效率,其所带来的高效益是远超程序开发的低成本的,因此程序开发的资金投入是可以忽略不计的。

ITbiyesheji的博客 1215

EXTJS学习笔记:类似于Window的登录窗体

EXTJS写的一个类似于Window的登录窗体,可以实现按回车直接运行确定按钮事件,用户名与密码空值验证等功能,通过异步实现登录验证等功能。上下二个Panel作为FromPanel的Items,组合起来实现界面效果如下图:以下是源代码: //用户名和密码验证function LoginCheck(){ var userName = Ext.getCmp("userName").get...

weixin_30569153的博客 149

SpringBoot实现电子发票生成

电子发票是近年来比较流行的一种票据形式,它取代了以往传统的纸质发票,具有减少纸张浪费、方便有效查验等优点。本文将介绍如何使用Spring Boot和Vue.js构建一个仿真电子发票生成应用程序,借助微信二维码扫描功能和第三方库,实现用户扫描二维码获取发票信息并填写相关开票信息,最后生成电子发票。在本文中,我们介绍了如何使用Spring Boot和Vue.js构建一个仿真电子发票生成应用程序,借助微信二维码扫描功能和第三方库,实现用户扫描二维码获取发票信息并填写相关开票信息,最后生成电子发票。

不愧是暮言的博客 6090

基于ExtJs的桌面系统(1)

最近要开发一个小型的管理系统,后台用的是java(其实是baby的),然后前端用啥好呢,之前项目后台管理的一般用easyui,很好用也很顺手。然而这次无意中发现了ExtJs desktop,觉得真是挺赞的,虽然已经挺老的模板了,不过作为初步学习,也很值得。

KeepCoding 814

GitLab社区版vs企业版:本地部署性能对比与选型建议(含实测数据)

本文深入对比GitLab社区版(CE)与企业版(EE)在本地部署中的性能差异与功能特性,提供实测数据与选型建议。测试显示EE版在并发克隆、CI流水线启动等场景性能提升显著,尤其适合需要高级安全合规与CI/CD功能的团队。文章还包含硬件配置指南与成本效益分析,帮助技术决策者做出明智选择。

weixin_28828243的博客 293

OpenHarmony自定义Launcher

OpenHarmony源码版本:4.0release开发板:DAYU / rk3568DevEco Studio版本:4.0.0.600切换分支为OpenHarmony-4.0-Release,并下载源码。

Abner_Crazy的博客 1630

ExtJs桌面组件(DeskTop)

ExtJs桌面组件(DeskTop)

落日小屋 2万+

Spring Boot日志可视化实战:5分钟搞定Promtail采集与Grafana查询(避坑指南)

本文详细介绍了如何通过Promtail和Grafana实现Spring Boot日志的可视化查询,提供从日志采集到高效查询的全流程实战指南,重点解决部署中的常见问题。内容包括Logback配置、Promtail日志采集、Grafana的LogQL查询技巧及生产环境优化建议,帮助开发者快速定位和解决日志问题。

weixin_42526015的博客 106

在extjs4的desktop例子中添加自己的东西

版本4.0 1、在desktop目录下 新建一个Users.js问价 输入代码 /*! * Ext JS Library 4.0 * Copyright(c) 2006-2011 Sencha Inc. * licensing@sencha.com * http://www.sencha.com/license */ Ext.define('MyDesktop.User

ZAZALLL的专栏 2131

【JDK】win 10 / win 11:jdk 8 下载、安装、配置、验证

win10 / win 11:JDK 最新版本下载 / 历史版本下载(jdk 8)、安装、配置系统环境变量、验证安装全详细操作教程

顾三殇 —— 博客空间(软件测试) 13万+

16、Cortex-M7处理器:高性能与复杂架构解析

本文深入解析了Cortex-M7处理器的高性能架构与复杂设计,涵盖AHB总线矩阵优化、超标量六阶段双发射流水线、增强型分支预测单元及双精度浮点支持。重点介绍了其独特的内存层次结构,包括指令与数据TCM、片上缓存和AXI-M 64位总线接口,提升系统并行性与执行效率。通过实际测试对比M4与M7性能差异,并演示如何将代码与数据定位到TCM以实现零等待运行。同时阐述了缓存机制的工作原理及其对系统性能的影响,为开发者提供全面的性能优化指导。

a1b2c3d的博客 126

Ext4.1下desktop桌面快捷方式和开始菜单的动态绑定

以前一直用ext2.0,最近刚好有个项目要做个web桌面,于是就下了个4.1,想体验下新的功能~4.1相比2.0,变化还是不少,2.0的desktop以前也实现过~所以对ext的desktop的还是有一定的概念~通过一个下午的努力!实现想要的效果~桌面快捷方式实现比较简单,只需将app.js的shortcuts修改1shortcuts:Ext.create('Ext.data.Store'...

weixin_30256505的博客 161

AIGC算法工程师 面试八股文

1、简述DDPM的算法原理 2、什么是重参数化技巧?Diffusion Models和VAE中的重参数化技巧是如何使用的? VAE中的重参数化技巧 Diffusion Models中的重参数化技巧 3、什么是马尔可夫过程?DDPM中的马尔可夫链是如何定义的? 马尔可夫过程 DDPM马尔可夫链 4、为什么DDPM前向过程中前期加噪少,后期加噪多? 5、VAE和Diffusion Models中的变分推断是什么? 6、Negative Prompt实现的原理是什么?

沉迷单车的追风少年 1万+

在desktop应用中的window中打开另一个网页的代码解决flexpaper在window中不能全屏

flexpaper在window中不能全屏的解决 第一种方式:     //直接加载网页的另一种方法     var flexwin = desktop.createWindow({         id: 'flexpaper-win',         titl

我是一匹来自北方的狼 1422

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

十年程序员的AI副驾驶:用.claude.md把经验变成可执行数字资产

在AI编程时代,程序员的核心能力正从‘写代码’转向‘结构化表达知识’。大语言模型如Claude Code并非万能,其效能高度依赖高质量、可检索、场景驱动的领域知识输入——这正是隐性经验显性化的工程实践。`.claude.md`本质是面向LLM的‘经验编译器’,它通过语义锚点、例外标记与业务流组织,将二十年踩坑总结、私有协议细节、产线时序陷阱等模糊认知,转化为AI可理解、可索引、可复用的指令集;配合`config.yaml`定义行为边界,二者协同构建起人机协作的‘知识操作系统’。该范式已广泛应用于工业视觉、电

weixin_30824599的博客 472

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Windows DNS Client服务启动失败:错误1075的依赖链诊断与修复指南

在Windows系统中,服务依赖关系是确保系统组件有序启动和运行的核心机制。其原理在于,许多服务并非独立运行,而是依赖于更基础的系统服务,形成一条启动依赖链。理解这一机制对于系统运维和故障排查具有重要价值,它使得开发者能够从根源上诊断网络、应用等各类服务异常。当DNS解析、Docker服务或luafv驱动等关键功能出现启动失败时,问题往往可追溯至其底层依赖服务的缺失或损坏。本文聚焦于典型的“错误1075:服务不存在”问题,以DNS Client服务为例,详细拆解如何通过系统命令和注册表工具,逐级诊断并修复因

weixin_33728708的博客 445

ExtJs桌面组件

在 desktop/js 目录中包含了5个js文件,这5个js文件如下:

第三眼的思绪 1363

Extjs desktop类桌面系统的开发

最近看到extjs的类桌面系统,被其界面吸引,然后试着用extjs desktop开发了一个项目。 一》开发目录结构: resources文件夹是我们自己定义的放资源文件,包括样式,壁纸,图片等。 modules是我项目中对应的各个窗口js模块,也是我们自己需要开发的窗口模块。 extjslib是extjs的库文件; extjslib中core文件夹内是desktop类桌面需

Fly_Sky之听香水榭 2万+

Ext JS模拟Windows桌面 (项目搭建)

在Ext JS的目录下包含了相关的例子,Ext JS_HOME/examples/desktop目录下可以找打相关的示例。 (1)把整个desktop文件夹拷贝到主目录下 (2)在主目录下创建一个文件夹script,把Ext JS目录里的下述文件复制到script文件夹中          a) adapter文件夹          b) resources文件夹

hechurui的专栏 1256

基于ExtJs的desktop桌面化框架。(仿京东后台管理系统)

系统展示: 登录系统: 图标展示: grid组件展示 grid+tree展示 壁纸切换:      做的不怎么样,大家如果有好的意见请与我交流。模块采用的是ext的动态加载机制,所有窗口创建的时候都会利用mvc模式去动态加载自己需要的js文件。

Java方向程序员_张帅鹏 8384
上一篇: extjs4.2 desktop 桌面图标拖动
下一篇: extjs desktop startmenu (开始菜单)
领尚
博客等级 码龄14年 1143粉丝 271原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值