`

为TWaver HTML5的Tree组件增加鼠标滑过效果

阅读更多

出于效率和保持js库最小化的考虑,TWaver HTML5的Tree组件默认的交互方式比较单调,目前只有选中改变文字背景;但是这不代表TWaver功能不够强大,相反,TWaver预留了很多可以重载的方法方便我们扩展,本文中我们就利用这些方法实现鼠标滑过改变背景色的效果。
先来张gif图片看看效果:



实现方式再简单不过,只有短短几十行代码,先列一下我们用到的方法:

  • onDataRendered(div, data, row, selected)
  • adjustRowSize()
  • getSelectColor()
除了上面三个方法,还有两个事件监听器,稍后我们就会讲解,先来看下这三个方法的原理:
  • onDataRendered 从字面上很好理解,每当Tree要渲染行数据的时候就会调用此方法
  1. div 行数据的显示容器,每行都有一个div容器,我们可以通过改变div背景色来实现变色效果
  2. data 行数据,我们监听鼠标move事件,记录鼠标所在行的数据,然后在onDataRendered里判断当前行是否在鼠标下,如果在就改变div的背景色
  3. row 行数
  4. selected 当前行是否被选中,如果被选中将div设置为深色背景
看一下这个方法的实现:
this.onDataRendered = function (div, data, row, selected) {
       DemoTree.superClass.onDataRendered(div, data, row, selected);
        if (selected) {
             //如果当前行被选中,设置div为深色背景和边框
              div.style.background = "rgb(216,233,252)";
               div.style.border = "1px solid rgb(125,162,206)";
        }
        else if (data == self.newdata) {
             //如果当前行是鼠标所在的行,设置div为浅色背景和边框
             div.style.background = "rgb(246,249,253)";
             div.style.border = "1px solid rgb(184, 214, 251)";
        }else{
            //设置其它行的padding
             div.style.padding="1px";
        }
}
 
  • adjustRowSize 这个方法紧接着onDataRendered执行,用来设置行宽和行高。我们在onDataRendered为div设置了边框或padding,会造成Tree上出现横向滚动条,所以需要重写这个方法:

this.adjustRowSize = function () {
	var id, div;
        var hpx = self.getRowHeight() - self.getRowLineWidth() + 'px';
//每行div的宽度都减去2像素,避免出现横向滚动条
        var wpx = Math.floor((self.getView().scrollLeft + self.getView().clientWidth) / self.getZoom()-2) + 'px';
        for (id in self._renderMap) {
                div = self._renderMap[id];
                div.style.height = hpx;
                div.style.width = wpx;
        }
};
 

  • getSelectColor 这个方法用来返回Tree上被选中行的文字的背景色,因为我们已经通过div给整行设置了背景色,文字背景就显得多余了,所以我们重写这个方法返回一个透明色:
this.getSelectColor = function () {
    return "rgba(0,0,0,0)";
};
 
除了这三个方法,还有两个监听器
首先,鼠标移动的时候需要保存鼠标下的data
var self=this;
this._view.addEventListener("mouseover", function (e) {
                self.newdata = self.getDataAt(e);
                if (self.olddata != self.newdata) {
                    if (self.olddata) {
                        //调用invalidateData通知Tree数据发生了变化,TWaver稍后会调用onDataRendered
                        self.invalidateData(self.olddata);
                    }
                    if (self.newdata) {
                        self.invalidateData(self.newdata);
                    }
                    self.olddata = self.newdata;
                }
            });


其次:当鼠标移除Tree时,清空滑过时设置的背景色:

this._view.addEventListener("mouseout", function (e) {
                if (self.newdata) {
                    self.invalidateData(self.newdata);
                    self.newdata = null;
                }
            });

 
最后附上完整的代码:

var DemoTree = function (dataBox) {
			DemoTree.superClass.constructor.apply(this, arguments);
            var self = this;


            this.newdata = null;
            var olddata = null;
            this._view.addEventListener("mouseover", function (e) {
                self.newdata = self.getDataAt(e);
                if (self.olddata != self.newdata) {
                    if (self.olddata) {
                        self.invalidateData(self.olddata);
                    }
                    if (self.newdata) {
                        self.invalidateData(self.newdata);
                    }
                    self.olddata = self.newdata;
                }
            });

            this.onDataRendered = function (div, data, row, selected) {
                DemoTree.superClass.onDataRendered(div, data, row, selected);
                if (selected) {
                    div.style.background = "rgb(216,233,252)";
                    div.style.border = "1px solid rgb(125,162,206)";
                }
                else if (data == self.newdata) {
                    div.style.background = "rgb(246,249,253)";
                    div.style.border = "1px solid rgb(184, 214, 251)";
                }else{
					div.style.padding="1px";
				}
            }

            this.adjustRowSize = function () {
				var id, div;
                var hpx = self.getRowHeight() - self.getRowLineWidth() + 'px';
                var wpx = Math.floor((self.getView().scrollLeft + self.getView().clientWidth) / self.getZoom()-2) + 'px';
                for (id in self._renderMap) {
                    div = self._renderMap[id];
                    div.style.height = hpx;
                    div.style.width = wpx;
                }
            };

            this.getSelectColor = function () {
                return "rgba(0,0,0,0)";
            };
            this._view.addEventListener("mouseout", function (e) {
                if (self.newdata) {
                    self.invalidateData(self.newdata);
                    self.newdata = null;
                }
            });
        };
twaver.Util.ext(DemoTree, twaver.controls.Tree, {});
 
分享到:
评论

相关推荐

    TWaver的3d图形组件库,小demo

    TWaver是一个专业级的图表和数据可视化工具,它提供了HTML5版本的3D图形组件,允许开发者在Web应用中创建交互式的三维图形。 【描述解读】 描述中提到的“TWaver HTML5 3D 制作的demo提供一个3d图形展示的基本代码...

    TWaver HTML5 开发指南代码

    《TWaver HTML5 开发指南代码》是一份专为开发者准备的参考资料,它主要聚焦于如何利用TWaver库在HTML5环境下构建拓扑工具和机房展示应用。TWaver是一个强大的可视化框架,其核心特性是支持复杂的图形和网络图表的...

    twaver-html5-5.9.0-api_html5_-5.9.0-api_twaver_

    标题中的"twaver-html5-5.9.0-api_html5_-5.9.0-api_twaver_"似乎是指一个基于HTML5的Twaver版本5.9.0的应用程序接口(API)文档。Twaver是一个强大的数据可视化和网络建模工具,广泛应用于网络拓扑、流程图、组织...

    Twaver-html5.zip

    Twaver学习案例的例子

    TWaver“一站式”UI组件提供包括网络拓扑图、地图、设备面板图、流程图、各种Chart图表、树图、表格等各种通用组件

    TWaver HTML5(以下简称TWaver)使用HTML5技术和javascript语言,可在支持HTML5的浏览器上进行绘图。 使用TWaver前,需熟悉几个基本概念:图元(Element)、容器(DataBox)和画布(Network)。 图元:图形中的...

    TWaver-Java 电信组件

    【标题】"TWaver-Java 电信组件"是基于Java平台开发的一款专业级的电信行业图形组件库。这个组件库专为电信领域的数据可视化和业务流程管理设计,它提供了丰富的图表类型和强大的交互功能,帮助开发者高效地构建复杂...

    TWaver for HTML5

    TWaver的图形组件库中提供了拓扑组件、地图组件、设备图组件,以及表格、树图、属性表、图表等丰富的通用图形界面组件,为电信运营支撑系统(OSS)的开发提供“一站式”的组件产品和解决方案,是快速设计、开发和...

    TWaver-Java 电信组件 单机Demo 相应的文档和接口

    【TWaver-Java 电信组件】是专门为电信行业设计的一款强大的可视化组件库,它提供了丰富的图形化工具,用于构建复杂的网络拓扑、设备状态监控、业务流程展示等应用。这个单机Demo是开发者和系统集成商了解和评估...

    TWaver Java 3.7 Developer Guide

    - **通用特性**:支持HTML标签、半透明效果、节点对象的使用等,增加图形的视觉效果。 ### 结论 《TWaver Java 3.7 Developer Guide》不仅是一份技术手册,更是开发者理解和掌握TWaver Java库的钥匙。它详细介绍了...

    基于TWaver实现的3D机房Demo

    5. 动画效果:例如,设备状态变化时可通过颜色变化、闪烁等方式呈现,增强视觉效果。 为了更好地理解TWaver在3D机房管理中的应用,可以查看"demo"文件夹中的内容。这个示例可能包含HTML、CSS和JavaScript文件,展示...

    TWAVER-最好的JAVA 图形设计组件-试用

    TWAVER是一款强大的JAVA图形设计组件,专为电信级别的应用设计,它提供了丰富的功能来满足开发者在图形化展示、操作和地理信息系统(GIS)等方面的需求。这款组件的强大之处在于其高度定制性和灵活性,使得开发人员...

    twaver例子

    TWaver的图形组件库中提供了拓扑组件、地图组件、设备图组件,以及表格、树图、属性表、图表等丰富的通用图形界面组件,为电信运营支撑系统(OSS)的开发提供“一站式”的组件产品和解决方案,是快速设计、开发和...

    TWaver Java开发手册

    TWaver允许用户为图形组件设置右键菜单,以便用户可以执行更多操作。 #### 添加鼠标和键盘动作 TWaver支持添加自定义的鼠标和键盘事件处理器,以实现更复杂的交互逻辑。 #### 处理数据选择 TWaver提供了强大的数据...

    Twaver Web SVG 开发说明文档

    ### Twaver Web SVG 开发说明文档 #### 一、前言 Twaver Web SVG 开发说明文档是一份针对电信...通过对该文档的学习,可以深入了解 Twaver Web SVG 的各个组成部分及其实现原理,为后续的实际应用奠定坚实的基础。

    TWaver文档

    - TWaver的各个版本都非常轻量级,例如**Java**版本的大小仅为1.8MB,而**HTML5**版本则只有0.6MB。 - 这意味着TWaver不仅加载速度快,而且对系统的资源消耗也很小,能够在各种设备上流畅运行。 #### 易扩展 - ...

    twaver-java-4.1

    【描述】该开发包的亮点在于其强大的可视化能力,通过TWaver,开发者可以轻松地构建出各种炫酷的图形,如流程图、网络拓扑图、时间线、地图等,为应用程序增添专业且美观的视觉效果。TWaver的API设计友好,使得即使...

Global site tag (gtag.js) - Google Analytics