KineticJS教程(5)

KineticJS教程(5)

 5.事件響應

5.1.圖形的事件響應

圖形對象對事件的響應處理可使用 on() 方法綁定事件類型和相應方法。 On() 方法須要一個事件類型參數和相應方法,其中所支持的事件類型包括: mouseovermouseoutmousemovemousedownmouseupclickdblclickdragstart 以及 dragend 事件。默認狀況下,圖形對象事件響應使用的是路徑檢測方法,下一節還會介紹像素檢測方法。html

綁定代碼以下:安全

<script>服務器

shape.on(「click」, function(evt){post

// 事件響應代碼spa

});.net

</script>htm

以下代碼繪製一個矩形,並相應鼠標在此矩形上的點擊操做,彈出消息框:對象

<!DOCTYPE html>教程

<html>seo

<head>

<meta charset=「UTF-8″>

<title>KineticJS</title>

<script src=「../kinetic.js」></script>

</head>

<body>

<script>

window.onload = function() {

var stage = new Kinetic.Stage({

container : 「container」,

width : 600,

height : 400

});

var layer = new Kinetic.Layer();

//建立config參數

var config = {

x : 200,

y : 150,

width : 200,

height : 100,

fill : 「blue」,

stroke : 「black」,

strokeWidth : 4

};

//建立矩形對象

var rect = new Kinetic.Rect(config);

//綁定事件響應方法

rect.on(「click」, function() {

alert(「clicked」);

});

//把矩形對象添加到層裏

layer.add(rect);

//將層添加到舞臺中

stage.add(layer);

};

</script>

<div id=「container」></div>

</body>

</html>

5.2.像素檢測

對於圖像、線條和文本之類的對象,路徑檢測就不太合適,這時就須要使用像素檢測方法來響應事件。爲了使用像素檢測,就須要爲圖形圖像對象的檢測類型detectionType設置爲像素檢測pixel。這個值默認是路徑檢測path

<script>

// 在構造方法的config中指定檢測類型

var image = new Kinetic.Image({

detectionType: 「pixel」

});

// 或者是用對象方法設定檢測類型

image.setDetectionType(「pixel」);

</script>

而後,Kinetic還須要用對象的saveData()來保存數據纔可使用像素檢測功能。另外還能夠用clearData()來清除保存的數據。但要注意的是,saveData()須要在對象所在的層被添加到舞臺上之後才能使用,不然會出錯。

<script>

// 保存圖像數據

image.saveData();

// 清除圖像數據

image.clearData();

</script>

<!DOCTYPE html>

<html>

<head>

<meta charset=「UTF-8″>

<title>KineticJS</title>

<script src=「../kinetic.js」></script>

</head>

<body>

<script>

var stage;

function loadImage() {

var image = new Image();

image.onload = function() {

var kimage = new Kinetic.Image({

x : 100,

y : 100,

image : image,

detectionType : 「pixel」

});

//綁定事件響應方法

kimage.on(「click」, function() {

alert(「image clicked」);

});

var layer = new Kinetic.Layer();

layer.add(kimage);

stage.add(layer);

//保存數據以相應事件

kimage.saveData();

};

//圖像須要與此頁面在同一個服務器上,不然會Javascript會拋出安全異常

image.src = 「http://localhost/FSM.jpg」;

}

window.onload = function() {

stage = new Kinetic.Stage({

container : 「container」,

width : 600,

height : 400

});

var rect = new Kinetic.Rect({

x : 400,

y : 100,

width : 100,

height : 100,

fill : 「red」,

detectionType : 「pixel」

});

//綁定事件響應方法

rect.on(「click」, function() {

alert(「rect clicked」);

});

var layer = new Kinetic.Layer();

layer.add(rect);

stage.add(layer);

//保存數據以相應事件

rect.saveData();

loadImage();

};

</script>

<div id=「container」></div>

</body>

</html>

5.3.事件命名

對於同一個事件,能夠經過對事件進行命名綁定多個事件處理方法。事件的命名格式遵循事件類型.自定義名稱「。好比,針對鼠標點擊事件「click「,能夠命名兩個事件處理方法「click.a」和「click.b」分別綁定各自的事件處理方法:

//建立矩形對象

var rect = new Kinetic.Rect(config);

//綁定消息響應方法

rect.on(「click.a」, function() {

alert(「clicked a」);

});

rect.on(「click.b」, function() {

alert(「clicked b」);

});

//把矩形對象添加到層裏

layer.add(rect);

//將層添加到舞臺中

stage.add(layer);

點擊這個矩形的時候會依次調用這兩個綁定的方法,彈出兩個消息框。

5.4.鼠標位置的獲取

在響應鼠標事件的時候經常須要獲取鼠標位置信息,這時能夠在事件響應方法中使用舞臺對象的getMousePosition方法獲取鼠標位置:

//綁定事件響應方法

rect.on(「click」, function() {

var mousePos = stage.getMousePosition();

var msg = 「x:」+mousePos.x+」 | 「+「y:」+mousePos.y;

alert(msg);

});

固然,要注意的是,這個座標是相對於舞臺左上角的,而不是綁定的圖像左上角。

5.5.多事件綁定

若是但願同時相應多個不一樣的事件,能夠在on方法綁定事件處理方法的時候,在事件參數中以空格分隔不一樣的事件,以下在鼠標按下和移過的時候都調用此處理方法:

<script>

shape.on(「mousedown mouseover」function(evt) {

// 事件響應代碼

});

</script>

5.6.取消事件綁定

要取消對某個事件的相應綁定,只須要用圖形對象的off方法,參數即要取消的事件名稱,以下代碼取消了鼠標點擊事件的相應:

<script>

shape.off(「click」);

</script>

對於有多個自定義命名的事件,好比上文中的「click.a「「click.b「,使用shape.off(「click」)會將兩個事件處理的綁定都取消掉,若是隻是單獨取消其中某個,能夠以下操做:

<script>

shape.off(「click.a」);

</script>

<script>

shape.off(「click.b」);

</script>

5.7.事件監聽開關

Kinetic中還能夠經過設定listening屬性的方法來肯定是否要監聽事件。若是設爲false,則綁定的事件響應方法會被忽略不執行。

<script>

// 在構造方法的config參數中設置

var shape = new Kinetic.Circle({

listening: false

});

// 使用對象方法設置

shape.listen(true);

</script>

5.8.禁止事件向上級對象傳遞

若是某個圖形對象屬於某個組,則某個發生在圖形上的事件會被依次傳遞到圖形對象、組、層,那麼若是這三者都綁定了此事件的相應方法,那麼這些方法也會被依次執行。

那麼若是但願在本對象處理事件後事件再也不繼續向上級傳遞,則能夠在綁定事件處理方法時以下用方法的evt參數處理:

<script>

shape.on(「click」, function(evt) {

evt.cancelBubble = true;

});

</script>

5.9.在事件處理方法中獲取圖形對象

一樣也是用在綁定事件處理方法時方法的evt參數獲取當前事件綁定的圖形對象:

<script>

shape.on(「click」, function(evt) {

var shape = evt.shape;

});

</script>

而後就能夠在事件處理方法中對圖形對象進行操做了。

5.10.觸發事件響應方法

除了由用戶交互操做出發事件而執行響應方法外,還能夠在代碼裏用simulate方法觸發事件。

好比:

<script>

// 圖形對象綁定了鼠標點擊事件

shape.on(「click」, function(evt){

// 事件處理

});

// 觸發事件鼠標點擊事件

shape.simulate(「click」);

</script>

5.11.移動設備的觸摸屏事件響應

觸摸屏的事件響應與普通電腦的響應處理方法相似,只是事件類型的名稱略有不一樣。Kinetic支持的觸摸屏事件包括touchstarttouchmovetouchendtapdbltapdragstartdragmove 以及 dragend

而觸摸點座標的獲取就不是用getMousePosition(evt),而是觸摸屏專用方法getTouchPosition(evt)或者桌面與觸摸屏通用方法getUserPosition(evt)。

相關文章
相關標籤/搜索