属性框架Fixjs——显示基类DisplayObject

摘要:
DisplayObject在flash中,DisplayObject是最基础的显示基类,它定义了布局的基本属性和方法,在组件开发范畴,绝对定位布局是非常重要的。我引入了jQuery停止DOM元素的操作,能够简化代码又能够处理浏览器的兼容问题,以下是Fixjs中DisplayObject的构造函数。init:function{fixjs.display.DisplayObject.base.init.call;this.ele=ele;this.ele.fixjsObj=this;$.css;this.stage=null;//todo...this.parent=null;//todo...this.name=null;this.x=0;this.y=0;this.width=0;this.height=0;this.visible=true;this.alpha=1;}通过外部传入DOM节点ele,在DisplayObject内部停止封装,Displayobject通过ele能够拜访DOM节点,DOM节点通过ele的fixjsObj属性又能够拜访DisplayObject。DisplayObject要支持事件派发,所以,它继承于EventDispatcher,以下是DisplayObject的完全实现。

首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责

Fixjs分析

Fixjs是我打算在javascript技术范畴开始积聚的一个框架项目,这套框架主要为开发庞杂组件供给底层的框架支持。

框架的类与接口我会尽量参考flash框架的实现。同时,我也会开放Fixjs的源代码,欢送同仁一起学习、交流。

DisplayObject

flash中,DisplayObject基础的显示基类,它定义了布局的基本属性和方法,在组件开发范畴,绝对定位布局是非常重要的。

我引入了jQuery停止DOM元素的操作,能够简化代码又能够处理浏览器的兼容问题,以下是FixjsDisplayObject的构造函数。

init: function (ele) {

fixjs.display.DisplayObject.base.init.call(this, this);

this.ele = ele;

this.ele.fixjsObj = this;

$(this.ele).css({ "padding": "0", "margin":"0", "border":"0", "width":"0", "height":"0",

"position":"absolute", "top": "0","left": "0","overflow": "visible"

});

this.stage = null; //to do...

this.parent = null; //to do...

this.name = null;

this.x = 0;

this.y = 0;

this.width = 0;

this.height = 0;

this.visible = true;

this.alpha = 1;

}

通过外部传入DOM节点ele,在DisplayObject内部停止封装,Displayobject通过ele能够拜访DOM节点,DOM节点通过elefixjsObj属性又能够拜访DisplayObject

this.ele = ele;

this.ele.fixjsObj = this;

然后定义了x,y,width,height等重要的布局属性,属性的读取好办直接拜访即可。但是设置属性则庞杂些,要用function来实现属性设置。

setX: function (val) {

if (this.x == val)

returnfalse;

this.x = val;

$(this.ele).css("left", val + "px");

returntrue;

}

上述代码是常见的属性处置,先判断属性值与新值是否相称,然后才赋值,许多场所还需要派发属性转变的事件、执行更多操作等。

DisplayObject要支持事件派发,所以,它继承于EventDispatcher,以下是DisplayObject的完全实现。

fixjs.display.DisplayObject = fixjs.events.EventDispatcher.extend({

init: function (ele) {

fixjs.display.DisplayObject.base.init.call(this, this);

this.ele = ele;

this.ele.fixjsObj = this;

$(this.ele).css({ "padding": "0", "margin":"0", "border":"0", "width":"0", "height":"0",

"position":"absolute", "top": "0","left": "0","overflow": "visible"

});

this.stage = null; //to do...

this.parent = null; //to do...

this.name = null;

this.x = 0;

this.y = 0;

this.width = 0;

this.height = 0;

this.visible = true;

this.alpha = 1;

},

disposing: function() {

this.ele.fixjsObj = null;

this.ele = null;

fixjs.display.DisplayObject.base.disposing.call(this);

},

clone: function() {

thrownew Error("[fixjs.display.DisplayObject.clone] is not implements!");

},

getStyle: function (name) {

return $(this.ele).css(name);

},

setStyle: function (name, val) {

return $(this.ele).css(name, val);

},

setStyles: function (obj) {

return $(this.ele).css(obj);

每日一道理
岭上娇艳的鲜花,怎敌她美丽的容颜?山间清澈的小溪,怎比她纯洁的心灵?

},

setX: function (val) {

if (this.x == val)

returnfalse;

this.x = val;

$(this.ele).css("left", val + "px");

returntrue;

},

setY: function (val) {

if (this.y == val)

returnfalse;

this.y = val;

$(this.ele).css("top", val + "px");

returntrue;

},

move: function(x, y) {

this.setX(x);

this.setY(y);

},

setWidth: function (val) {

if (this.width == val)

returnfalse;

this.width = val;

$(this.ele).css("width", val + "px");

returntrue;

},

setHeight: function (val) {

if (this.height == val)

returnfalse;

this.height = val;

$(this.ele).css("height", val + "px");

returntrue;

},

resize: function(x, y) {

this.setWidth(x);

this.setHeight(y);

},

setAlpha: function (val) {

if (this.alpha == val)

returnfalse;

this.alpha = val;

$(this.ele).css("opacity", val);

returntrue;

},

setVisible: function (val) {

if (this.visible == val)

returnfalse;

this.visible = val;

if (val)

$(this.ele).css("visibility","visible");

else

$(this.ele).css("visibility","hidden");

returntrue;

},

hitTestPoint: function (x, y) {

var r = this.x + this.width;

var b = this.y + this.height;

returnthis.x <= x && x <= r &&this.y <= y&& y <= b;

},

hitTestObject: function (obj) {

var x1 = this.x;

var y1 = this.y;

var w1 = this.width;

var h1 = this.height;

var x2 = obj.x;

var y2 = obj.y;

var w2 = obj.width;

var h2 = obj.height;

var minX = x1 > x2 ? x1 : x2;

var minY = y1 > y2 ? y1 : y2;

var maxX = (x1 + w1) > (x2 + w2) ? (x2+ w2) : (x1 + w1);

var maxY = (y1 + h1) > (y2 + h2) ? (y2 + h2) : (y1 + h1);

returnminX<= maxX && minY<= maxY;

},

localToGlobal: function (point) {

var p = $(this.ele).offset();

returnnewfixjs.geom.Point(p.left + point.x, p.top + point.y);

},

globalToLocal: function (point) {

var p = $(this.ele).offset();

returnnewfixjs.geom.Point(point.x - p.left, point.y - p.top);

}

});

相关文章

Fixjs专栏

作者推荐

MyReport一款非常适用的报表引擎插件,供给Web报表设计、展现、打印、导出等功能集,集成简略。

文章结束给大家分享下程序员的一些笑话语录: 人工智能今天的发展水平:8乘8的国际象棋盘其实是一个体现思维与创意的强大媒介。象棋里蕴含了天文数字般的变化。卡斯帕罗夫指出,国际象棋的合法棋步共有1040。在棋局里每算度八步棋,里面蕴含的变化就已经超过银河系里的繁星总数。而地球上很少有任何数量达到这个级别。在金融危机之前,全世界的财富总和大约是1014人民币,而地球人口只有1010。棋盘上,所有可能的棋局总数达到10120,这超过了宇宙里所有原子的总数!经典语录网

免责声明:文章转载自《属性框架Fixjs——显示基类DisplayObject》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python基础===数据伪造模块fakerSQL group by 分组后,同一组的排序后取第一条下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

仿苹果电脑任务栏菜单&amp;amp;&amp;amp;拼图小游戏&amp;amp;&amp;amp;模拟表单控件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &...

Node.js中的模块接口module.exports浅析

在写node.js代码时,我们经常需要自己写模块(module)。同时还需要在模块最后写好模块接口,声明这个模块对外暴露什么内容。实际上,node.js的模块接口有多种不同写法。这里作者对此做了个简单的总结。 返回一个JSON Object 如下代码是一个简单的示例。 1 var exp ={ 2 "version": "1.0.0", 3...

ASP.NET Core 中间件(Middleware)(一)

本文主要目标:记录Middleware的运行原理流程,并绘制流程图。 目录结构: 1、运行环境 2、Demo实践 3、源码追踪 4、AspnetCore内置middleware 一、运行环境 Visual Studio Community 2019 版本 16.8.5 .Net Sdk Version: 5.0.103 二、Demo实践 讲解或学习一个东...

node爬虫爬取中文时乱码问题 | nodejs gb2312、GBK中文乱码解决方法

iconv需要依赖native库,这样一来,在一些不支持native模块安装的虚拟主机和windows平台上,我们还是无法安心处理GBK编码。 老外写了一个通过纯Javascript转换编码的模块 iconv-lite 可以实现window下的转换 ,通过npm可以安装此模块,bufferhelper是一个操作buffer的加强类 首先安装 npm ins...

驱动硬件Framebuffer驱动程序框架 skeletonfb.c 分析

新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正     Framebuffer驱动程序框架 skeletonfb.c 析分     近来想好好研究一下lcd驱动发开程过,lcd驱动发开重要就是framebuffer的编写了,这里只要想做framebuffer驱动的发开可能这里是必经之路,因为这里这个skeletnfb.c是framebu...

php-fpm高并发配置[1000+]

Dell R430 2个物理CPU,每个CPU有6个内核; www.conf: pm = dynamic pm.max_children = 120 pm.start_servers = 8 pm.min_spare_servers = 6 pm.max_spare_servers = 12 pm.process_idle_timeout = 20s; p...