KineticJS教程(6)

作者: ysm

6.拖拽

6.1.拖拽功能

要实现Kinetic对象的拖拽功能很简单,只需要将图形对象的draggable属性设为true就可以了。

<script>

// 在构造方法中的config参数设置

var shape = new Kinetic.Circle({

draggable: true;

});

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

shape.draggable(true);

</script>

这种拖拽功能还可以应用到组(Group)、层(Layer)和舞台(Stage),设置方法类似。不过要注意的是,应用到组或层上时,拖拽组或层上的任一对象,整个组或层都会移动,而对于舞台,拖拽舞台上任何位置都能移动整个舞台,而无需拖拽舞台上的图形对象。

6.2.拖拽线条

线条(Line)的拖拽功能设定与其他类型图形类似,只是线条需要用像素检测功能,因此需要线条所在层添加到舞台后执行一次saveData方法,在拖拽动作结束事件处理方法中也要执行一次saveData方法。

<script>

// 在构造方法中的config中设定

var line= new Kinetic.Line({

draggable: true;

});

// 使用对象的方法设定

line.draggable(true);

// 保存像素数据

line.saveData();

//必须在每次拖拽完毕后执行一次saveData

line.on(“dragend”, function() {

blueLine.saveData();

});

</script>

完整代码:

<!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();

var line = new Kinetic.Line({

points : [ 100, 150, 340, 230 ],

stroke : “blue”,

strokeWidth : 10,

draggable : true

});

layer.add(line);

stage.add(layer);

//保存像素数据

line.saveData();

//必须在每次拖拽完毕后执行一次saveData

line.on(“dragend”, function() {

blueLine.saveData();

});

};

</script>

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

</body>

</html>

6.3.拖拽事件

有关拖拽的事件包括拖拽开始dragstart,拖拽中 dragmove,拖拽结束 dragend ,我们可以根据自己的需要绑定这几个事件响应方法。

<script>

shape.on(“dragstart”, function(evt) {

// 响应代码

};

shape.on(“dragmove”, function(evt) {

// 响应代码

};

shape.on(“dragend”, function(evt) {

// 响应代码

};

</script>

6.4.拖拽方向限制

Kinetic支持对拖拽运动限制在水平或者垂直方向上,这个功能通过对象的 dragConstraint属性进行设置来实现。 dragConstraint属性可以有三个选项,包括 none, horizontal和 vertical,默认情况下这个属性的值是none。

<script>

// 在构造方法中的config参数中设置,拖动被限制在水平方向上

var shape = new Kinetic.Rect({

dragConstraint: “horizontal”

});

// 用对象的方法设置,拖动被限制在水平方向上

shape.setDragConstraint(“horizontal”);

</script>

6.5.拖拽范围限制

Kinetic通过 dragBounds 属性的设置可以将拖拽限制在一个矩形范围之内。dragBounds 属性包括top, right, bottom, 和 left 四个参数,这四个参数可以只设置其中的几个,不需要全部设置。

<script>

// 在构造方法的config参数中设置

var shape = new Kinetic.Circle({

dragBounds: {

top: 50

}

});

// 在对象的方法中设置

shape.setDragBounds({

top: 0,

left: 0,

right: 200,

bottom: 200

});

</script>

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

  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教程(5)

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

  8. KineticJS教程(4)

    KineticJS教程(4) 作者: ysm  4.图形样式 4.1.填充 Kinetic中图形的填充属性可以在构造方法中的config参数中的fill属性进行设定,也可以用图形对象的setFill方 ...

  9. KineticJS教程(3)

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

随机推荐

  1. Hibernate lazy(延迟加载)

    Hibernat加载策略有两种,分别为即时加载和延迟加载(懒加载或者lazy),get使用的是即时加载,使用get获取数据时会立即查找(会先去缓存查找,如果缓存中没有找到,才会去数据库中查找),而lo ...

  2. 【四边形不等式】HDU3516-Tree Construction

    [题目大意] 给定n个点(x,y),并且保证xi<xj&&yi>yj当i<j.要求建一颗树,树的边只能向上和向右生长,求将所有点都连起来树的长度最小. [思路] 定义 ...

  3. 【贪心】BZOJ3668-[NOI2014]起床困难综合症

    [题目大意] 给定n次操作(与,或,异或),在0~m中选择一个数,使这个数经过n次操作后得到的值最大. [思路] 水题orz 枚举这个数每一位的取值是0还是1,然后根据它经过n次操作后的结果判断: ( ...

  4. 一文了解JVM全部垃圾回收器,从Serial到ZGC

    <对象搜索算法与回收算法>介绍了垃圾回收的基础算法,相当于垃圾回收的方法论.接下来就详细看看垃圾回收的具体实现. 上文提到过现代的商用虚拟机的都是采用分代收集的,不同的区域用不同的收集器. ...

  5. Codeforces Round #300 A. Cutting Banner 水题

    A. Cutting Banner Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pro ...

  6. Java之多线程 Semaphore(信号量)

    一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者. ...

  7. VMware中网络设置之host-only

    有了前面一篇的NAT的网络设置,本文就显得非常简单了.同样图文结合的步骤: 1.设置host-only模式. 2.设置linux虚拟机的静态IP.进入linux系统,点击主菜单---系统设置---网络 ...

  8. WEB安全扫描器Netsparker推荐给大家

    Netsparker是一款综合型的web应用安全漏洞扫描工具,它分为专业版和免费版,免费版的功能也比较强大. Netsparker与其他综合 性的web应用安全扫描工具相比的一个特点是它能够更好的检测 ...

  9. 【转】Internet连接正常但是没有网络,禁用以太网以后再重新启动就可以使用了,原因是什么?

    只是粘贴别人的答案,觉得有理,就放在博客里方便以后再学习~ 这个和网络中hdcp服务有关,网卡要在网路中通讯就必须要网络设备一般是路由器或者交换机分配地址,只有给了你电脑门牌号,信件投递能准确无误.你 ...

  10. JS 判断PC、android、ios、微信浏览器

    1.通过js userAgent来判断 <h1>判断访问此链接的操作系统</h1> <script> var Agents = new Array("An ...