zoukankan      html  css  js  c++  java
  • 属性框架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,这超过了宇宙里所有原子的总数!经典语录网

  • 相关阅读:
    区块链技术的应用场景
    区块链快速了解
    区块链工作汇报部分问题
    区块链Fabric 交易流程
    maven配置settings.xml【阿里云】
    Java常用工具类整理
    程序员职业思考:从大数据到人工智能再到区块链
    Python实现图像信息隐藏
    Python直接控制鼠标键盘
    Mac使用Clion配置OpenGL
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3093658.html
Copyright © 2011-2022 走看看