Fliegend的乱七八糟空间

新手入门,Hello World!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  24 随笔 :: 0 文章 :: 0 评论 :: 37709 阅读

ext开发实现点击任意html元素打开一个ext组件悬浮面板的功能。
类似与下图中点击蓝色按钮,触发一个选择面板组件功能。
image

首先要求此悬浮面板组件必须继承于
Ext.Component

此时利用component的float属性将组件悬浮,利于showat将组件定位与指定html元素下方。

关键代码如下

	//获取dom元素xy位置,
        var getXY=function(obj){
            var x = 0,y = 0;
            if (obj.getBoundingClientRect) {
                var box = obj.getBoundingClientRect();
                var D = document.documentElement;
                x = box.left + Math.max(D.scrollLeft, document.body.scrollLeft) - D.clientLeft;
                y = box.top + Math.max(D.scrollTop, document.body.scrollTop) - D.clientTop
            }
            else{
                for (; obj != document.body; x += obj.offsetLeft, y += obj.offsetTop, obj = obj.offsetParent) {}
            }
            return [x,y]

        }
		
	   //buttonDom 为按钮dom
	   //创建元素点击事件
	   var itemheight=400;
	   buttonDom.onclick = function () {
            var selector=Ext.widget('panel',{
                width:itemheight,
                height:200,
                floating: true //此属性必须设置为true

            });

	//实现鼠标点击其他位置时关闭面板
            var xys = getXY(buttonDom);
            xys[1] = xys[1] + 20;
            xys[0] = xys[0] + 20;
	    var maxY=Ext.getBody().getViewSize().height;
            if(maxY-xys[1]<itemheight){
                xys[1] = xys[1] - itemheight;
            }
            selector.showAt(xys);
            var mouseIn = false;
            selector.getEl().dom.onmouseleave = function () {
                mouseIn = false;
            };
            selector.getEl().dom.onmouseenter = function () {
                mouseIn = true;
            };
            document.onmousedown = function () {
                if (mouseIn == false) {
                    selector.destroy();
                }
            };
        };

posted on   Fliegend  阅读(287)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示