属性框架Fixjs——显示基类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)

               return false;

            this.x = val;

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

            return true;

       }

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

    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() {

            throw new 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)

               return false;

            this.x = val;

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

            return true;

       },

       setY: function (val) {

            if (this.y == val)

               return false;

            this.y = val;

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

            return true;

       },

       move: function(x, y) {

            this.setX(x);

            this.setY(y);

       },

       setWidth: function (val) {

            if (this.width == val)

               return false;

            this.width = val;

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

            return true;

       },

       setHeight: function (val) {

            if (this.height == val)

               return false;

            this.height = val;

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

            return true;

       },

       resize: function(x, y) {

            this.setWidth(x);

            this.setHeight(y);

       },

       setAlpha: function (val) {

            if (this.alpha == val)

               return false;

            this.alpha = val;

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

            return true;

       },

       setVisible: function (val) {

            if (this.visible == val)

               return false;

            this.visible = val;

      

            if (val)

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

            else

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

            return true;

       },

       hitTestPoint: function (x, y) {

            var r = this.x + this.width;

            var b = this.y + this.height;

            return this.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);

            return minX<= maxX && minY<= maxY;

       },

       localToGlobal: function (point) {

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

            return new fixjs.geom.Point(p.left + point.x, p.top + point.y);

       },

       globalToLocal: function (point) {

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

            return new fixjs.geom.Point(point.x - p.left, point.y - p.top);

       }

    });

      

      

      

    

相关文章

    Fixjs专栏

    

 

    

作者推荐

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

    

 

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

原文地址:https://www.cnblogs.com/jiangu66/p/3093658.html