KineticJS教程(4)

作者: ysm 

4.图形样式

4.1.填充

Kinetic中图形的填充属性可以在构造方法中的config参数中的fill属性进行设定,也可以用图形对象的setFill方法进行设定。不过要注意,setFill使用的填充类型必须与创建这个对象时的config中所用的填充类型相同。

Kinetic支持颜色、图像、线性渐变和径向渐变四种填充模式。

4.1.1.颜色填充

<!DOCTYPE html>

<html>

<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 config1 = {

x : 100,

y : 150,

width : 100,

height : 100,

//填充色

fill : “blue”

};

//创建第一个矩形对象

var rect1 = new Kinetic.Rect(config1);

//创建第二个矩形对象的config参数

var config2 = {

x : 400,

y : 150,

width : 100,

height : 100,

//填充色

fill : “red”

};

//创建第二个矩形对象

var rect2 = new Kinetic.Rect(config2);

//修改第二个矩形对象的颜色

rect2.setFill(“green”);

layer.add(rect1);

layer.add(rect2);

stage.add(layer);

};

</script>

<div id=“container”></div>

</body>

</html>

4.1.2.线性渐变填充

线性渐变填充的fill参数值如下:

{ start: { x: 100, y: 50 }, end: { x: 500, y: 50 }, colorStops: [0, "red", 0.5, "green", 1, "blue"] }

的形式,start是线性渐变线的起点位置,end是线性渐变线的终点位置,colorStops是指定线性渐变线上关键点的颜色值,位置参数是一个介于0到1之间的浮点数,0表示起点的颜色,1表示终点的颜色。

这里要注意的是,渐变线的坐标基点并不是以canvas左上角为(0, 0)点,如果是图形对象是矩形的话,矩形的左上角点才是(0, 0)点,如果是圆形对象的话,圆心才是(0, 0)点。

<!DOCTYPE html>

<html>

<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 config1 = {

x : 100,

y : 50,

width : 400,

height : 100,

//渐变色

fill : {

start : {

x : 0,

y : 50

},

end : {

x : 400,

y : 50

},

colorStops : [ 0, "red", 0.5, "green", 1, "blue" ]

}

};

//创建第一个矩形对象

var rect1 = new Kinetic.Rect(config1);

//创建第二个矩形对象的config参数

var config2 = {

x : 100,

y : 200,

width : 400,

height : 100,

//渐变色

fill : {

start : {

x : 0,

y : 50

},

end : {

x : 400,

y : 50

},

colorStops : [ 0, "red", 0.5, "green", 1, "blue" ]

}

};

//创建第二个矩形对象

var rect2 = new Kinetic.Rect(config2);

//修改第二个矩形对象的颜色变化模式

rect2.setFill({

start : {

x : 100,

y : 50

},

end : {

x : 400,

y : 50

},

colorStops : [ 0, "yellow", 0.5, "cyan", 1, "purple" ]

});

layer.add(rect1);

layer.add(rect2);

stage.add(layer);

};

</script>

<div id=“container”></div>

</body>

</html>

上述代码的渐变效果图如下:

上面的矩形渐变线为(0, 50)到(400, 50),正如上面提到的,这里的渐变线是以这个矩形的左上角为(0, 0)点的,所以实际的渐变线是如黑线条所示的区域,而下面的矩形由于setFill的修改,渐变线为(100, 50)到(400, 50),所以实际渐变线是图上所示的黑线区域,而不是整个矩形的范围。不要把渐变线的坐标理解为相对于canvas的左上角。

4.1.3.径向渐变填充

径向渐变填充的fill参数值如下:

{ start: { x: 100, y: 50, radius: 100 }, end: { x: 500, y: 50, radius: 100 }, colorStops: [0, "red", 0.5, "green", 1, "blue"] }

的形式,start是径向渐变的起始圆位置,end是径向渐变的终止圆位置,colorStops是指定径向渐变圆间的关键距离的颜色值,位置参数是一个介于0到1之间的浮点数,0表示起始圆的颜色,1表示终止圆的颜色。

这里要注意的是,与线性渐变类似,渐变圆的圆心坐标基点并不是以canvas左上角为(0, 0)点,如果是图形对象是矩形的话,矩形的左上角点才是(0, 0)点,如果是圆形对象的话,圆心才是(0, 0)点。

<!DOCTYPE html>

<html>

<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 config1 = {

x : 150,

y : 200,

radius : 100,

//渐变色

fill : {

start : {

x : 0,

y : 0,

radius : 0

},

end : {

x : 0,

y : 0,

radius : 100

},

colorStops : [ 0, "red", 0.5, "green", 1, "blue" ]

}

};

//创建第一个圆形对象

var circle1 = new Kinetic.Circle(config1);

//创建第二个圆形对象的config参数

var config2 = {

x : 450,

y : 200,

radius : 100,

//渐变色

fill : {

start : {

x : 0,

y : 0,

radius : 0

},

end : {

x : 0,

y : 0,

radius : 100

},

colorStops : [ 0, "red", 0.5, "green", 1, "blue" ]

}

};

//创建第二个圆形对象

var circle2 = new Kinetic.Circle(config2);

//修改第二个矩形对象的颜色变化模式

circle2.setFill({

start : {

x : 0,

y : 0,

radius : 0

},

end : {

x : 0,

y : 0,

radius : 100

},

colorStops : [ 0, "yellow", 0.5, "cyan", 1, "purple" ]

});

layer.add(circle1);

layer.add(circle2);

stage.add(layer);

};

</script>

<div id=“container”></div>

</body>

</html>

上述代码的效果如下图:

4.1.4.图像填充

图像填充的fill参数值如下:

{ image : imageObj, offset : { x : 0, y : 0 }

imageObj是javascript的Image对象,offset是图像开始填充的位置偏移量。

<!DOCTYPE html>

<html>

<head>

<meta charset=“UTF-8″>

<title>KineticJS</title>

<script src=“../kinetic.js”></script>

</head>

<body>

<script>

function draw(image) {

var stage = new Kinetic.Stage({

container : “container”,

width : 600,

height : 400

});

var layer = new Kinetic.Layer();

//创建第一个矩形config参数

var config1 = {

x : 50,

y : 100,

width : 180,

height : 180,

//填充图像

fill : {

image : image,

offset : {

x : 0,

y : 0

}

}

};

var rect1 = new Kinetic.Rect(config1);

//创建第二个矩形config参数

var config2 = {

x : 350,

y : 100,

width : 180,

height : 180,

//填充图像,并将填充图像向右下移动50个像素

fill : {

image : image,

offset : {

x : 0,

y : 0

}

}

};

var rect2 = new Kinetic.Rect(config2);

//将填充图像向左上移动50个像素

rect2.setFill({

//image : image,

offset : {

x : -50,

}

});

layer.add(rect1);

layer.add(rect2);

stage.add(layer);

}

window.onload = function() {

var image = new Image();

image.onload = function() {

draw(image);

};

image.src = “./FSM.jpg”;

};

</script>

<div id=“container”></div>

</body>

</html>

上述代码的效果如下图:

4.2.线条颜色与宽度

线条对象与其他图形的边缘线的颜色与宽度设置如下:

<script>

// 使用构造方法的config参数设置

var shape = new Kinetic.Circle({

stroke: “black”,

strokeWidth: 4

});

// 用图形对象的方法设置

shape.setStroke(“blue”);

shape.setStrokeWidth(20);

</script>

4.3.透明

透明度是一个0到1之间的浮点值,0表示完全透明,1则是完全不透明。

<script>

// 使用构造方法的config参数设置

var shape = new Kinetic.Circle({

alpha: 0.5

});

// 用图形对象的方法设置

shape.setAlpha(1);

</script>

4.4.阴影

<script>

// 使用构造方法的config参数设置

var shape = new Kinetic.Circle({

shadow: {

color: “black”,

blur: 10,

offset: [10, 10],

alpha: 0.5

}

});

// 用图形对象的方法设置

shape.setShadow({

color: “black”,

blur: 10,

offset: [10, 10],

alpha: 0.5

});

</script>

4.5.线段间连接点样式

连接点的样式可以是 miter , bevel 或 round。其中,默认的样式是 miter。

<script>

// 使用构造方法的config参数设置

var shape = new Kinetic.Circle({

lineJoin: “bevel”

});

// 用图形对象的方法设置

shape.setLineJoin(“round”);

</script>

4.6.图形的隐藏与显示

<script>

// 使用构造方法的config参数设置

var shape = new Kinetic.Circle({

visible: false

});

// 用图形对象的show方法显示图形

shape.show();

// 用图形对象的hide方法隐藏图形

shape.hide();

</script>

KineticJS教程(4)的更多相关文章

  1. KineticJS教程(12)

    KineticJS教程(12) 作者: ysm  12.舞台 12.1.舞台的大小 舞台创建后还可以用舞台对象的setSize(width, height)方法来设置舞台的宽度与高度. <scr ...

  2. KineticJS教程(11)

    KineticJS教程(11) 作者: ysm 11.对象的上下关系 11.1.层的上下关系 Kinetic的层是按照添加到舞台的次序,由下向上排列,上层遮盖下层的图形.每个层各自有一个ZIndex编 ...

  3. KineticJS教程(10)

    KineticJS教程(10) 作者: ysm  10.在容器之间移动图形对象 Kinetic支持通过图形对象的moveTo(container)方法把图形对象从一个容器移动到另一个容器里,这个容器指 ...

  4. KineticJS教程(9)

    KineticJS教程(9) 作者: ysm  9.选择器 Kinetic在舞台.层和组对象上都提供了get方法,用于返回这三者中包含的对象. 9.1.根据ID获取对象 要用id获取对象,首先要给对象 ...

  5. KineticJS教程(8)

    KineticJS教程(8) 作者: ysm  8.动画 动画就是一帧帧的画面按照时间间隔显示出来,Kinetic给我们提供了一个舞台对象的onFrame方法,用这个方法可以绑定一个动画方法,我们要显 ...

  6. KineticJS教程(7)

    KineticJS教程(7) 作者: ysm 7.图形变换 7.1.线性变化 Kinetic提供了一个图形对象的transitionTo(config)方法实现图形的线性变换,也就是从原始的状态线性变 ...

  7. KineticJS教程(6)

    KineticJS教程(6) 作者: ysm 6.拖拽 6.1.拖拽功能 要实现Kinetic对象的拖拽功能很简单,只需要将图形对象的draggable属性设为true就可以了. <script ...

  8. KineticJS教程(5)

    KineticJS教程(5) 作者: ysm  5.事件响应 5.1.图形的事件响应 图形对象对事件的响应处理可以使用 on() 方法绑定事件类型和相应方法. On() 方法需要一个事件类型参数和相应 ...

  9. KineticJS教程(3)

    KineticJS教程(3) 作者: ysm  3.图形对象 3.1.Shape Kinetic提供了一个Shape对象用于在层上绘制图形,我们可以通过Kinetic.Shape()构造方法返回一个S ...

随机推荐

  1. Vue 2.0学习(六)内置指令

    基本指令 1.v-cloak v-cloak不需要表达式,它会在Vue实例结束编译时从绑定的HTML元素上移除,经常和CSS的display:none配合使用. <div id="ap ...

  2. 「2017 山东一轮集训 Day4」基因

    设置 \(\sqrt{n}\) 个关键点,维护出关键点到每个右端点之间的答案以及Pam的左指针,每次暴力向左插入元素即可,为了去重,还需要记录一下Pam上每个节点在每个关键点为左端点插入到时候到最左边 ...

  3. UVA11107 Life Forms --- 后缀数组

    UVA11107 Life Forms 题目描述: 求出出现在一半以上的字符串内的最长字符串. 数据范围: \(\sum len(string) <= 10^{5}\) 非常坑的题目. 思路非常 ...

  4. JZYZOJ1540 BZOJ4035 [ haoi2015 上午] T3 博弈论 sg函数 分块 haoi

    http://172.20.6.3/Problem_Show.asp?id=1540 之前莫比乌斯反演也写了一道这种找规律分块计算的题,没觉得这么恶心啊. 具体解释看代码. 翻硬币的具体方法就是分别算 ...

  5. 使用百度ai接口加图灵机器人完成简单web版语音对话

    app文件 from flask import Flask, request, render_template, jsonify, send_file from uuid import uuid4 i ...

  6. MODI出现ORC RUNNING ERROR的解决方法

    stackflow都没个靠谱的说法,最后还是csdn上看到的.转一个备用.http://bbs.csdn.net/topics/390135443 由于直接执行Mircosoft Office Doc ...

  7. hdu 1171 多重背包

    题意:给出价值和数量,求能分开的最近的两个总价值,例如10,20*2,30,分开就是40,40 链接:点我 #include<cstdio> #include<iostream> ...

  8. Selenium自动化工具工作原理

    http://blog.csdn.net/five3/article/details/6790925 原文作者信息如下,需要更多信息请去原作者博客查看: 作者:hyddd 出处:http://www. ...

  9. OpenVPN Server端配置文件详细说明(转)

    本文将介绍如何配置OpenVPN服务器端的配置文件.在Windows系统中,该配置文件一般叫做server.ovpn:在Linux/BSD系统中,该配置文件一般叫做server.conf.虽然配置文件 ...

  10. Linux网络设置1——Linux网络环境配置

    方法一: ① 利用root登陆,输入setup命令 ② 选择Network configuration,进入Configure TCP/IP界面 ③ 第一个[],若光标在此,按空格出现*号,则自动分配 ...