中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁(yè) > 技術(shù)文檔 > 多媒體制作 > [AS2]事件處理機(jī)制
微軟 Silverlight 入門簡(jiǎn)介 回到列表 Flash處理外部XML文檔數(shù)據(jù)
 [AS2]事件處理機(jī)制

作者:chooseflash 時(shí)間: 2007-07-13 文檔類型:原創(chuàng) 來(lái)自:藍(lán)色理想

第 1 頁(yè) [AS2]事件處理機(jī)制 -- 目錄
第 2 頁(yè) [AS2]事件處理機(jī)制 -- 事件處理機(jī)制
第 3 頁(yè) [AS2]事件處理機(jī)制 -- 創(chuàng)建類庫(kù)
第 4 頁(yè) [AS2]事件處理機(jī)制 -- 使用回調(diào)函數(shù)
第 5 頁(yè) [AS2]事件處理機(jī)制 -- 使用addListener方法 一
第 6 頁(yè) [AS2]事件處理機(jī)制 -- 使用addListener方法 二
第 7 頁(yè) [AS2]事件處理機(jī)制 -- 建立強(qiáng)大的事件處理機(jī)制
第 8 頁(yè) [AS2]事件處理機(jī)制 -- 小結(jié)

[6.建立強(qiáng)大的事件處理機(jī)制]

這一節(jié)講建立強(qiáng)大的事件處理機(jī)制.學(xué)完這節(jié),如果有接觸過(guò) AS3 的,馬上會(huì)想到一句:這不就是 AS3 的事件處理機(jī)制嗎?
的確.可以說(shuō)跟 AS3 的事件處理機(jī)制一模一樣.但還是有個(gè)作用域的問(wèn)題.這節(jié)對(duì)想學(xué)習(xí) AS3 的事件處理機(jī)制會(huì)有很大
幫助.如果你掌握這節(jié)中的內(nèi)容,在 AS3 中就只有語(yǔ)法問(wèn)題.也就會(huì)很快進(jìn)入狀態(tài).畢竟是"水往低處流,人往高處走".對(duì)現(xiàn)
在用 AS2 的,學(xué) AS3 是遲早的問(wèn)題.不過(guò) AS2 在新版本出來(lái)之前還是會(huì)很有用的(個(gè)人的看法).

作用域因?yàn)橐粯?前面也講過(guò),這里就不在啰嗦.
事件對(duì)象.這里已經(jīng)創(chuàng)建一個(gè) Event 類(或其子類)來(lái)代替.但功能一樣.

這節(jié)講的事件處理機(jī)制的形態(tài)(代碼).
發(fā)送事件:

//繼承.
import AS2.events.Event;
import AS2.events.CFEventDispatcher;
class className extends CFEventDispatcher
{
    ...
    this.dispatchEvent(new Event(Event.COMPLETE));
    ...
}

//不繼承.
import AS2.events.Event;
import AS2.events.CFEventDispatcher;
class className
{
    public var addEventListener:Function;
    public var removeEventListener:Function;
    private var dispatchEvent:Function;
   
    public function className()
    {
        //此方法要在使用 dispatchEvent 方法前被執(zhí)行.一般放于構(gòu)造函數(shù)中.
        CFEventDispatcher.initialize(this);
    }
   
    ...
    this.dispatchEvent(new Event(Event.COMPLETE));
    ...
}

偵聽事件:

//使用自定義函數(shù).
import AS2.events.Event;
import className;
...
var cn:className = new className();
//自定義函數(shù).
function completeHandler(evt:Event):Void
{
    trace(this); //輸出: _level0.cn
}
cn.addEventListener(Event.COMPLETE, completeHandler);
...

//使用事件偵聽器對(duì)象.
import AS2.events.Event;
import className;
...
var cn:className = new className();
//事件同名函數(shù).
function complete(evt:Event):Void
{
    trace(this); //輸出: this(指向偵聽器對(duì)象)
}
cn.addEventListener(Event.COMPLETE, this);
...

移除偵聽:

//使用自定義函數(shù).
...
cn.removeEventListener(Event.COMPLETE, completeHandler);
...

//使用事件偵聽器對(duì)象.
...
cn.removeEventListener(Event.COMPLETE, this);
...

AS2.utils.CFDelegate;
AS2.events.Event;
AS2.events.CFEventDispatcher;
這些是什么?下面講解:

[6.1.創(chuàng)建 CFDelegate 類(修改 Delegate 類)]
CFDelegate 類是 Delegate 類的修改版本.簡(jiǎn)化了代碼(一般不用的功能).提高了執(zhí)行效率.

此類文檔詳細(xì):
Classes/AS2/utils/CFDelegate.as

主類:
打開 CFDelegate.as 文檔.輸入下面的代碼:

class AS2.utils.CFDelegate
{
    public static function create(scope:Object, method:Function):Function
    {
        var f:Function = function ()
        {
            method.apply(scope, arguments);
        };
        return f;
    }
}

保存文檔.

[6.2.創(chuàng)建 CFEventDispatcher 類(修改 EventDispatcher 類)]
CFEventDispatcher 類是 EventDispatcher 類的修改版本.簡(jiǎn)化了代碼(一般不用的功能).提高了執(zhí)行效率.

此類文檔詳細(xì):
Classes/AS2/events/CFEventDispatcher.as

主類:
打開 CFEventDispatcher.as 文檔.輸入下面的代碼:

*/
//----------------------------------------
class AS2.events.CFEventDispatcher
{
    //----------------------------------------
    //構(gòu)造函數(shù)
    public function CFEventDispatcher(){}
    //----------------------------------------
    //當(dāng)不繼承此類時(shí),此屬性才有效.
    private static var _ed:CFEventDispatcher;
    //----------------------------------------
    private static function _removeEventListener(queue:Object, handler):Void
    {
        /*
        這里主要用于刪除事件數(shù)組中的事件處理器.
        */
        if (queue != undefined) {
            var l:Number = queue.length;
            while(l--){
                if(queue[l] == handler){
                    queue.splice(l, 1);
                    return;
                }
            }
        }
    }
    //當(dāng)不繼承此類時(shí).此方法有效.
    public static function initialize(o:Object):Void
    {
        /*
        如果沒(méi)有繼承此類,而是使用 initialize 此方法時(shí), _ed 等于 undefined.然后創(chuàng)建此類的實(shí)例.
        最后將事件通知和偵聽器管理功能添加到 initialize 方法中的對(duì)象 o.
        前面所講的不繼承此類時(shí)需添加的三個(gè)方法,其實(shí)是四個(gè).還有 dispatchQueue 方法.但此方法在
        調(diào)用 dispatchEvent 方法時(shí)就會(huì)自動(dòng)調(diào)用.可能有人會(huì)問(wèn),為什么沒(méi)有定義就能調(diào)用?因?yàn)樵诤瘮?shù)
        中可以操作對(duì)象.從而對(duì)對(duì)象動(dòng)態(tài)添加方法和屬性.這里就是用了在函數(shù)中操作對(duì)象.
        */
        if (_ed == undefined) {
            _ed = new CFEventDispatcher();
        }
        o.addEventListener = _ed.addEventListener;
        o.removeEventListener = _ed.removeEventListener;
        o.dispatchEvent = _ed.dispatchEvent;
        o.dispatchQueue = _ed.dispatchQueue;
    }
    //----------------------------------------
    private function dispatchQueue(queueObj:Object, eventObj:Object):Void
    {
        /*
         這里主要用于判斷事件處理器是對(duì)象還是函數(shù).
        */
        if (queueObj[eventObj.type] != undefined) {
            for (var i:String in queueObj[eventObj.type]) {
                var o = queueObj[eventObj.type][i];
                if (typeof (o) == "object" || typeof (o) == "movieclip") {
                    //調(diào)用對(duì)象中的handleEvent函數(shù).
                    //if (o.handleEvent != undefined) {
                        //o.handleEvent(eventObj);
                    //}
                    //調(diào)用對(duì)象中的事件同名函數(shù). 
                    //if (o[eventObj.type] != undefined) {
                        o[eventObj.type](eventObj);
                    //}
                } else {
                    //調(diào)用自定義函數(shù).
                    o.apply(queueObj, [eventObj]);
                }
            }
        }
    }
    public function dispatchEvent(eventObj:Object):Void
    {
        //將事件源始終指向this(應(yīng)用此類的對(duì)象).
        eventObj.target = this;
        //此句對(duì)動(dòng)態(tài)類,或在類中定義"事件名Handler" 這樣的函數(shù)時(shí)才有效.在這里我注釋了這句.你如果你想用,可以啟用它.
        /*
        用法: 對(duì)象.事件名Handler = function(evt:Object){};
        */
        //this[eventObj.type + "Handler"](eventObj);
        this.dispatchQueue(this, eventObj);
    }
    public function addEventListener(event:String, handler):Void
    {
        //這里可以這樣理解:
        /*
        使用
        addEventListener("click", 事件處理器);
        添加事件.
        這時(shí), this["click"] 就等于 undefined.
        (this["click"] == undefined) = true
            然后將創(chuàng)建一個(gè)新數(shù)組來(lái)存儲(chǔ)事件處理器.
            this["click"] = [];
        然后執(zhí)行
        CFEventDispatcher._removeEventListener(this["click"], 事件處理器);
        來(lái)檢測(cè)此事件是否有相同的事件處理器.如果是就刪除它.
        舉個(gè)例:當(dāng)你在一個(gè)網(wǎng)站注冊(cè)用戶名時(shí).網(wǎng)站的注冊(cè)程序會(huì)從數(shù)據(jù)庫(kù)中檢測(cè)是否有與你相同的用戶名.
        如果有將會(huì)提示你重新輸入用戶名(在這里就是直接刪除了).如果沒(méi)有就會(huì)注冊(cè)成功(這里就在后面
        執(zhí)行 push).但是網(wǎng)站的注冊(cè)程序不會(huì)從數(shù)據(jù)庫(kù)中檢測(cè)是否有與你相同的密碼.
       
        就是說(shuō)一個(gè)事件,可添加多個(gè)不同的事件處理器,但不能添加相同的事件處理器.
        當(dāng)添加新的事件時(shí),也是一樣的
       
        最后使用
        this["click"].push(事件處理器);
        將事件處理器添加到事件數(shù)組.
        */
        if (this[event] == undefined) {
            this[event] = new Array();
        }
        //ASSetPropFlags 是隱藏的方法.用它和不用它貌似沒(méi)有區(qū)別.大家可以研究下.
        //_global.ASSetPropFlags(this, event, 1);
        CFEventDispatcher._removeEventListener(this[event], handler);
        this[event].push(handler);
    }
    public function removeEventListener(event:String, handler):Void
    {
        //這里我就不啰嗦了.
        CFEventDispatcher._removeEventListener(this[event], handler);
    }
    //----------------------------------------
}

保存文檔.

[6.3.創(chuàng)建 Event 類(事件基類,繼承 Object 類)]
你可以把它看作事件對(duì)象.因應(yīng)它的工作就是生成事件對(duì)象.

此類文檔詳細(xì):
Classes/AS2/events/Event.as

主類:
打開 Event.as 文檔.輸入下面的代碼:

class AS2.events.Event extends Object
{
    //----------------------------------------
    //事件的常數(shù)名.
    public static var COMPLETE:String = "complete";
    public static var CANCEL:String = "cancel";
    public static var CHANGE:String = "change";
    public static var CLOSE:String = "close";
    public static var CONNECT:String = "connect";
    public static var FULLSCREEN:String = "fullScreen";
    public static var OPEN:String = "open";
    public static var REMOVED:String = "removed";
    public static var RESIZE:String = "resize";
    public static var SCROLL:String = "scroll";
    public static var SELECT:String = "select";
    //----------------------------------------
    public var type:String;
    public var target:Object;
    //----------------------------------------
    private var className:String = "Event";
    //----------------------------------------
    //構(gòu)造函數(shù).
    public function Event(type:String)
    {
        this.type = type;
    }
    //----------------------------------------
    public function toString():String
    {
        var str:String = "";
        for (var i:String in this) {
            if (this[i] != undefined) {
                str += i + "=" + this[i] + " ";
            }
        }
        return "[" + this.className + " " + str.slice(0,str.length - 1) + "]";
    }
    //----------------------------------------
}

保存文檔.

此類包含下面內(nèi)容:
1.事件的常數(shù)名.如:

    public static var COMPLETE:String = "complete";
    ...

2.基本的屬性.如:

    public var type:String;
    ...

3.className 屬性.如:

private var className:String = "Event";
4.構(gòu)造函數(shù).如:

    public function Event(type:String)
    {
        this.type = type;
    }
5.toString() 方法.如:

    public function toString():String
    {
        var str:String = "";
        for (var i:String in this) {
            if (this[i] != undefined) {
                str += i + "=" + this[i] + " ";
            }
        }
        return "[" + this.className + " " + str.slice(0,str.length - 1) + "]";
    }

如果你嫌此方法阻礙你的執(zhí)行效率.可以改成如下(標(biāo)準(zhǔn)):

    public function toString():String
    {
        return "[object " + this.className + "]";
    }

這里講下 toString() 方法.在類中定義此方法.在輸出此類實(shí)例名實(shí)調(diào)用此方法.如:

class className
{
    ...
    private var className:String  = "className";
    public function toString():String
    {
        return "[object " + this.className + "]";
    }
    ...
}


import className;
var cn:className = new className();
trace(cn);// 調(diào)用 toString() 方法.輸出: [object className]

當(dāng)然你也可以改成 AS3 中 Event 類一樣的方法.但沒(méi)有必要,很少會(huì)用到.
如果要向 Event 類傳遞參數(shù)和定義新的事件名,請(qǐng)看下面.

[6.4.創(chuàng)建 IOErrorEvent 類(錯(cuò)誤事件類,繼承 Event 類)]
此類文檔詳細(xì):
Classes/AS2/events/IOErrorEvent.as

主類:
打開 IOErrorEvent.as 文檔,輸入下面的代碼:

import AS2.events.Event;
//----------------------------------------
class AS2.events.IOErrorEvent extends Event
{
    //----------------------------------------
    //事件的常數(shù)名.
    public static var IO_ERROR:String = "IOError";
    //----------------------------------------
    //屬性參數(shù).
    public var text:String;
    //----------------------------------------
    //className 屬性
    private var className:String = "IOErrorEvent";
    //----------------------------------------
    //在構(gòu)造函數(shù)中添加參數(shù).
    public function IOErrorEvent(type:String, text:String)
    {
        super(type);
        this.text = text;
    }
    //----------------------------------------
   
}

保存文檔.

[6.5.創(chuàng)建 HTTPStatusEvent 類(http狀態(tài)事件類,繼承 Event 類)]
此類文檔詳細(xì):
Classes/AS2/events/HTTPStatusEvent.as

主類:
打開 HTTPStatusEvent.as 文檔.輸入下面的代碼:

import AS2.events.Event;
//----------------------------------------
class AS2.events.HTTPStatusEvent extends Event
{
    //----------------------------------------
    //事件的常數(shù)名.
    public static var HTTP_STATUS:String = "httpStatus";
    //----------------------------------------
    //屬性參數(shù).
    public var status:Number;
    //----------------------------------------
    //className 屬性
    private var className:String = "HTTPStatusEvent";
    //----------------------------------------
    //在構(gòu)造函數(shù)中添加參數(shù).
    public function HTTPStatusEvent(type:String, status:Number)
    {
        super(type);
        this.status = status;
    }
    //----------------------------------------
   
}

保存文檔.

[6.6.示例: EventClass 類(簡(jiǎn)單的示例)]
此示例文檔詳細(xì):
Example/AS2/events/Event/EventClass.as
Example/AS2/events/Event/EventExample.as
Example/AS2/events/Event/EventExample.xml
Example/AS2/events/Event/EventExample.fla

主類:
打開 EventClass.as 文檔.輸入下面的代碼:

import AS2.utils.CFDelegate;
import AS2.events.Event;
import AS2.events.IOErrorEvent;
import AS2.events.HTTPStatusEvent;
import AS2.events.CFEventDispatcher;
//----------------------------------------
class EventClass extends CFEventDispatcher
{
    //----------------------------------------
    public var tXML:XML;
    //----------------------------------------
    public function EventClass(url:String)
    {
        this.tXML = new XML();
        this.tXML.onLoad = CFDelegate.create(this, this.XMLonLoad);
        this.tXML.onHTTPStatus = CFDelegate.create(this, this.XMLHTTPStatus);
        this.tXML.load(url);
    }
    public function toString():String
    {
        return "[EventClass]";
    }
    //----------------------------------------
    private function XMLonLoad(success:Boolean):Void
    {
        if (success) {
            this.dispatchEvent(new Event(Event.COMPLETE));
        } else {
            this.dispatchEvent(new IOErrorEvent(IOErrorEvent.IO_ERROR, "加載錯(cuò)誤!請(qǐng)檢查 XML 文檔地址和網(wǎng)絡(luò)連接"));
        }
    }
    private function XMLHTTPStatus(httpStatus:Number):Void
    {
        this.dispatchEvent(new HTTPStatusEvent(HTTPStatusEvent.HTTP_STATUS, httpStatus));
    }
    //----------------------------------------
}

保存文檔.

示例類:
打開 EventExample.as 文檔.輸入下面的代碼(手指應(yīng)該很痛吧.呵.我也一樣.(可能是無(wú)謂的話)):

import EventClass;
import AS2.events.Event;
import AS2.events.IOErrorEvent;
import AS2.events.HTTPStatusEvent;
//----------------------------------------
class EventExample
{
    public function EventExample()
    {
        var ee:EventClass = new EventClass("http://localhost/Examples/AS2/events/Event/EventExample.xml");
        ee.addEventListener(Event.COMPLETE, this.completeHandler);
        ee.addEventListener(IOErrorEvent.IO_ERROR, this.ioErrorHandler);
        ee.addEventListener(HTTPStatusEvent.HTTP_STATUS, this.httpStatusHandler);
    }
    private function completeHandler(evt:Event):Void
    {
        trace(evt);
    }
    private function ioErrorHandler(evt:IOErrorEvent):Void
    {
        trace(evt);
    }
    private function httpStatusHandler(evt:HTTPStatusEvent):Void
    {
        trace(evt);
    }
}

保存文檔.
這里注意 XML 文檔地址不是本地地址,是用服務(wù)器地址的(測(cè)試 http 狀態(tài)用):

var ee:EventClass = new EventClass("http://localhost/Examples/AS2/events/Event/EventExample.xml");
要加載的 XML 文檔:
打開 EventExample.xml 文檔,隨便輸入一些內(nèi)容便可.測(cè)試用.

示例 fla 文檔:
打開 EventExample.fla 文檔.將"圖層 1"重命名為  Actions.并在第一幀中輸入下面的代碼:

new EventExample();
保存文檔.
測(cè)試 Flash 文檔.在 XML 文檔成功加載后會(huì)在輸出面板中顯示以下內(nèi)容:

[HTTPStatusEvent target=[EventClass] status=200 type=httpStatus]
[Event target=[EventClass] type=complete]

當(dāng)將 XML 地址改成錯(cuò)誤時(shí),在輸出面板中將顯示以下內(nèi)容:

Error opening URL "http://localhost/Example/AS2/events/Event/EventExamples.xml"
[HTTPStatusEvent target=[EventClass] status=404 type=httpStatus]
[IOErrorEvent target=[EventClass] text=加載錯(cuò)誤!請(qǐng)檢查 XML 文檔地址和網(wǎng)絡(luò)連接 type=IOError]

下面再看一個(gè)示例:
[6.7.示例: Timer 類(定時(shí)器,功能跟 AS3 中的 Timer 類一樣)]
此示例文檔詳細(xì):
Classes/AS2/utils/Timer.as
Classes/AS2/utils/TimerEvent.as
Example/AS2/utils/Timer/TimerExample.as
Example/AS2/utils/Timer/TimerExample.fla

主類:
打開 Timer.as 文檔,輸入下面的代碼:

import AS2.utils.TimerEvent;
import AS2.utils.CFDelegate;
import AS2.events.CFEventDispatcher;
//----------------------------------------
class AS2.utils.Timer extends CFEventDispatcher
{
    //----------------------------------------
    private var _timerID:Number;
    private var _delay:Number;
    private var _repeatCount:Number;
    private var _currentCount:Number = 0;
    private var _running:Boolean;
    //----------------------------------------
    /*
    @parameter    delay:            延遲,單位毫秒.
    @parameter    repeatCount:    重復(fù)次數(shù).默認(rèn)為Infinity(正無(wú)窮大);
    */
    public function Timer(delay:Number, repeatCount:Number)
    {
        if (isNaN(delay)) {
            return;
        }
        if (isNaN(repeatCount)) {
            repeatCount = Infinity;
        }
        this._delay = delay;
        this._repeatCount = repeatCount;
    }
    //----------------------------------------
    public function reset():Void
    {
        this._currentCount = 0;
        this.stop();
    }
    public function start():Void
    {
        this._timerID = setInterval(CFDelegate.create(this, this.startTimer), this._delay);
        this._running = true;
    }
    public function stop():Void
    {
        clearInterval(this._timerID);
        this._running = false;
    }
    public function toString():String
    {
        return "[Timer]";
    }
    //----------------------------------------
    private function startTimer():Void
    {
        this._currentCount++;
        this.dispatchEvent(new TimerEvent(TimerEvent.TIMER, this._currentCount));
        if (this._currentCount == this._repeatCount) {
            this.reset();
            this.dispatchEvent(new TimerEvent(TimerEvent.TIMER_COMPLETE));
        }
    }
    //----------------------------------------
    public function get delay():Number
    {
        return this._delay;
    }
    public function set delay(d:Number):Void
    {
        this._delay = d;
    }
    public function get repeatCount():Number
    {
        return this._repeatCount;
    }
    public function set repeatCount(r:Number):Void
    {
        this._repeatCount = r;
    }
    public function get currentCount():Number
    {
        return this._currentCount;
    }
    public function get running():Boolean
    {
        return this._running;
    }
    //----------------------------------------
}

保存文檔.

Timer 事件類:
打開 TimerEvent.as 文檔,輸入下面的代碼:

import AS2.events.Event;
//----------------------------------------
class AS2.utils.TimerEvent extends Event
{
    //----------------------------------------
    public static var TIMER:String = "timer";
    public static var TIMER_COMPLETE:String = "timerComplete";
    //----------------------------------------
    public var currentCount:Number;
    //----------------------------------------
    private var className:String = "TimerEvent";
    //----------------------------------------
    public function TimerEvent(type:String, currentCount:Number)
    {
        super(type);
        this.currentCount = currentCount;
    }
    //----------------------------------------
}

保存文檔.

示例類:
打開 TimerExample.as 文檔,輸入下面的代碼:

import AS2.utils.Timer;
import AS2.utils.TimerEvent;
//----------------------------------------
class TimerExample
{
    //----------------------------------------
    public function TimerExample()
    {
        var te:Timer = new Timer(1000, 5);
        te.addEventListener(TimerEvent.TIMER, this.timerHandler);
        te.addEventListener(TimerEvent.TIMER_COMPLETE, this.timerCompleteHandler);
        te.start();
    }
    private function timerHandler(evt:TimerEvent):Void
    {
        trace("timer: " + evt);
    }
    private function timerCompleteHandler(evt:TimerEvent):Void
    {
        trace("timerComplete: " + evt);
    }
    //----------------------------------------
}

保存文檔.

示例 fla 文檔:
打開 TimerExample.fla 文檔,將"圖層 1"重命名為  Actions.并在第一幀中輸入下面的代碼:

new TimerExample();
保存文檔.
測(cè)試 Flash 文檔.在輸出面板可以看到下面的內(nèi)容:

timer: [TimerEvent target=[Timer] currentCount=1 type=timer]
timer: [TimerEvent target=[Timer] currentCount=2 type=timer]
timer: [TimerEvent target=[Timer] currentCount=3 type=timer]
timer: [TimerEvent target=[Timer] currentCount=4 type=timer]
timer: [TimerEvent target=[Timer] currentCount=5 type=timer]
timerComplete: [TimerEvent target=[Timer] type=timerComplete]

經(jīng)典論壇討論:
http://bbs.blueidea.com/thread-2768209-1-1.html

出處:藍(lán)色理想
責(zé)任編輯:藍(lán)色月光

上一頁(yè) [AS2]事件處理機(jī)制 -- 使用addListener方法 二 下一頁(yè) [AS2]事件處理機(jī)制 -- 小結(jié)

◎進(jìn)入論壇Flash專欄版塊參加討論

作者文章
Flash處理外部XML文檔數(shù)據(jù)
Flash處理XML文檔數(shù)據(jù)教程
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁(yè)制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計(jì)大賽開啟
國(guó)際體驗(yàn)設(shè)計(jì)大會(huì)7月將在京舉行
中國(guó)國(guó)防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問(wèn)題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會(huì)
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語(yǔ)言的編碼規(guī)范
如何在illustrator中繪制臺(tái)歷
Ps簡(jiǎn)單繪制一個(gè)可愛(ài)的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡(jiǎn)單的作品展示頁(yè)面
CSS定位機(jī)制之一:普通流
25個(gè)最佳最閃亮的Eclipse開發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁(yè) 首頁(yè) 前頁(yè) 后頁(yè) 尾頁(yè) 頁(yè)次:7/8頁(yè) 1個(gè)記錄/頁(yè) 轉(zhuǎn)到 頁(yè) 共8個(gè)記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來(lái)自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來(lái)自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請(qǐng)不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計(jì)作品,如需使用,請(qǐng)與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請(qǐng)與我們聯(lián)系,我們將立即刪除修改。

您的評(píng)論
用戶名:  口令:
說(shuō)明:輸入正確的用戶名和密碼才能參與評(píng)論。如果您不是本站會(huì)員,你可以注冊(cè) 為本站會(huì)員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請(qǐng)用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評(píng)分 1 2 3 4 5
注意:請(qǐng)不要在評(píng)論中含與內(nèi)容無(wú)關(guān)的廣告鏈接,違者封ID
請(qǐng)您注意:
·不良評(píng)論請(qǐng)用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評(píng)論管理人員有權(quán)保留或刪除其管轄評(píng)論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評(píng)論文檔 | 報(bào)告錯(cuò)誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測(cè)試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2