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. web项目启动执行方法

    近期在项目中需要将用户在web启动时就查询出来,当作缓存使用. 一.首先需要实现 ServletContextListener 接口 public class UserCacheUtils imple ...

  2. 初识Linux 基础操作(2)

    1.Linux启动流程    1).linux启动过程        ①.进入grub界面选择相应的启动内核        ②.读取kernel内核文件-/boot/vmlinuz-*         ...

  3. 【BZOJ 3229】 3229: [Sdoi2008]石子合并 (GarsiaWachs算法)

    3229: [Sdoi2008]石子合并 Description 在一个操场上摆放着一排N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合 ...

  4. 单点登录 SSO, 自动登录 , java 加密,ssl原理, Tomcat配置SSL

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 单点登录的英文简称为SSO(single sign on),单点登录功能使得用户只要登录 ...

  5. BZOJ 4276: [ONTAK2015]Bajtman i Okrągły Robin

    最大权值匹配,贪心匈牙利即可. 检查一些人是否能被全部抓住可以采用左端点排序,右端点优先队列处理. By:大奕哥 #include<bits/stdc++.h> using namespa ...

  6. luoguP3250 [HNOI2016]网络 树链剖分 + 堆

    机房某大佬告诉我,一条链在全局线段树中的区间最多有$log$段 因此同样的,代表不在这条链上的区间同样只有$log$段 对这$log$段区间进行维护即可 为了能够删除,在线段树的每个节点暴力维护一个堆 ...

  7. 【DP】BZOJ1564- [NOI2009]二叉查找树(!!)

    [题目大意] 已知一个treap上每个节点的键值.权值和访问频率.现在可以修改一些节点的权值(可以修改为实数),需要付出k(k为定制)的额外代价.一个treap的总代价=∑(每个节点的访问频率*深度) ...

  8. USACO 2017 FEB Platinum nocross DP

    题目大意 上下有两个长度为n.位置对应的序列A.B,其中数的范围均为1~n.若abs(A[i]-B[j]) <= 4,则A[i]与B[j]间可以连一条边.现要求在边与边不相交的情况下的最大的连边 ...

  9. sqlserver -- 学习笔记(一)自定义函数(学习总结,备忘)

    SQL Server自定义函数,以前只在书上看过,没有动手去敲一敲,今天刚好接触到,看了几篇博文学习了下.做好备忘很重要!! (@_@)Y Learn from:http://www.cnblogs. ...

  10. 典型案例收集-OpenVPN不同网段的访问控制(转)

    一.案例1  针对不同的客户端指定不同的等级和权限. 通常的方法是: 1.每个客户端分配不同的IP地址: 2.利用防火墙对不同的IP地址进行控制: 例如: 1.公司内部网段是10.66.4.0/24: ...