Raphael的拖动处理:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Title</title>
<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
<script type="text/javascript" src="js/raphael.js"></script>
<script type="text/javascript" src="js/index011.js"></script>
</head>
<body>
<div id="container1"></div>
<div id="container2"></div>
<div id="container3"></div>
<div id="container4"></div>
</body>
</html>
$(function() {
// 第一种拖动方式;
initRaphael();
// 第二种拖动方式;
initRaphael2();
// 多个transform没有累加效果,只有最后一个有效;
initRaphael3();
// 拖拽集合情况;
initRaphael4();
});
function initRaphael(e) {
// 第二种初始化Raphael的方式;
var paper = Raphael('container1', 500, 500);
var circle = paper.circle(120, 110, 25).attr('fill', 'yellow');
circle.drag(dragmove, dragstart, dragend);
// dx,dy是移动的增量,增量都是相对开始位置计算的,x,y是移动到的位置;
function dragmove(dx, dy, x, y, e) {
// 这样的拖拽只能是有cx,cy属性的才可以拖动;
this.attr({
cx : x,
cy : y
});
console.log("dx:" + dx);
console.log("dy:" + dy);
console.log("x:" + x);
console.log("y:" + y);
}
// 默认情况还是有5个参数的;arguments.length=5;
function dragmove1(e) {
console.log(arguments.length);
console.log('0:' + arguments[0]);
console.log('1:' + arguments[1]);
console.log('2:' + arguments[2]);
console.log('3:' + arguments[3]);
console.log('4:' + arguments[4]);
}
function dragstart(x, y, e) {
this.attr('fill', 'orange');
}
function dragend(e) {
this.attr('fill', 'yellow');
}
}
function initRaphael2(e) {
// 在不同的div中设置svg对象;
var paper = new Raphael('container2', 500, 500);
var circle = paper.circle(120, 110, 25).attr('fill', 'yellow');
circle.drag(dragmove, dragstart, dragend);
function dragstart(x, y, e) {
this.current_transform = this.transform();
console.log('start transform::' + this.current_transform);
this.attr('fill', 'orange');
}
function dragmove(dx, dy, x, y, e) {
// 使用transform进行属性设置;
console.log('move transform::' + this.current_transform + 'T' + dx + ',' + dy);
this.transform(this.current_transform + 'T' + dx + ',' + dy);
}
function dragend(e) {
this.current_transform = this.transform();
console.log('end transform::' + this.current_transform);
this.attr('fill', 'yellow');
}
}
function initRaphael3(e) {
var paper = new Raphael('container3', 500, 500);
// 多个transform,移动的距离不会进行积累,会按照最后一个的数据进行移动
paper.ellipse(300, 200, 50, 20).attr('fill', 'green').transform('T5000,1000').transform('T50,10');
}
function initRaphael4(e) {
var paper = new Raphael('container4', 500, 500);
var dice = paper.set();
dice.push(paper.rect(10, 10, 60, 60, 4).attr('fill', '#FFF'));
dice.push(paper.circle(22, 58, 5).attr('fill', '#000'));
dice.push(paper.circle(58, 22, 5).attr('fill', '#000'));
dice.push(paper.circle(40, 40, 5).attr('fill', '#000'));
dice.push(paper.circle(22, 22, 5).attr('fill', '#000'));
dice.push(paper.circle(58, 59, 5).attr('fill', '#000'));
dice.data('myset', dice);
// 集合拖拽情况;
dice.drag(function(dx, dy, x, y, e) {
var myset = this.data('myset');
myset.transform(this.data('mytransform') + 'T' + dx + ',' + dy);
// 用下面这样的方式也可以进行;
// dice.transform(this.data('mytransform')+'T'+dx+','+dy);
}, function(x, y, e) {
var myset = this.data('myset');
myset.data('mytransform', this.transform());
// 用下面这样的方式也可以进行;
// dice.data('mytransform',this.transform());
}, function(e) {
var myset = this.data('myset');
myset.data('mytransform', this.transform())
// 用下面这样的方式也可以进行;
// dice.data('mytransform',this.transform());
});
}

Raphael的拖动处理的更多相关文章

  1. Raphael path 拖动实现

    让 Raphael 的 Path 动起来 Raphaël 是一个很实用的线上矢量图操作 Javascript 库.使用简单,一个值得一提的卖点是通过抽象出共同的接口屏蔽了 SVG 和 VML 之间的差 ...

  2. 学习RaphaelJS矢量图形包--Learning Raphael JS Vector Graphics中文翻译(一)

    (原文地址:http://www.cnblogs.com/idealer3d/p/LearningRaphaelJSVectorGraphics.html) 前面3篇博文里面,我们讲解了一本叫做< ...

  3. CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果

    CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果 开始 一图抵千言.首先来看鼠标拖动太阳(光源)的情形. 然后是鼠标拖拽旋转模型的情形. 然后我们移动摄像 ...

  4. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  5. 【Android】 修复ijkPlayer进行m3u8 hls流播放时seek进度条拖动不准确的问题

    项目中使用的播放器是ijkPlayer,发现播放切片特点的hls流(m3u8格式的视频)拖动seekBar的时候会莫名的跳转或者seek不到准确的位置,发现网友也遇到了同样的问题,ijk的开发者也说明 ...

  6. 自己封装的一个原生JS拖动方法。

    代码: function drag(t,p){ var point = p || null, target = t || null, resultX = 0, resultY = 0; (!point ...

  7. 基于Metronic的Bootstrap开发框架经验总结(13)--页面链接收藏夹功能的实现2(利用Sortable进行拖动排序)

    在上篇随笔<基于Metronic的Bootstrap开发框架经验总结(12)--页面链接收藏夹功能的实现>上,我介绍了链接收藏夹功能的实现,以及对收藏记录的排序处理.该篇随笔主要使用功能按 ...

  8. jQuery拖动剪裁图片作为头像

    图片上传是许多网站的一个常用的功能,有时需要对上传的图片做初步的选择裁剪,比如上传头像.下面就是一个使用HTML5+jQuery实现的图片上传裁剪特效,可以对选择要上传的图片做缩小.放大.拖动和裁剪, ...

  9. SharePoint 2013 通过JavaScript实现列表标题列宽度可拖动

    前言 最近有个新需求,用户希望标题栏可以拖动宽度,其实觉得没什么用,既然用户要了又推不掉,就勉为其难实现一下吧. 其实原理比较简单,就是利用JavaScript对标题栏进行宽度控制,然后从网上搜了一下 ...

随机推荐

  1. php查找文件内容

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><?ph ...

  2. 使用Dreamweaver格式化HTML代码

    今天偶然发现了DreamWeaver(DW)的一个非常有用的功能,就是代码的格式化功能.一般情况下,我们写的html或者css代码都计较混乱,难以阅读,即使刚开始很在意代码的可读性,但是等到所使用的标 ...

  3. nginx的内页跳转总结

      刚进公司的时候老大一直在要求php做内页跳转,当时也不太了解细节所以一直没有说话.后来php问我你会不会做内页跳转,我说会一点就做了几个,从此搞内页跳转搞了两个星期.至于为什么做内页跳转哪就暂时不 ...

  4. Vasiliy's Multiset

    Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input standard ...

  5. JavaScript(三)---- 控制流程语句

    常用的控制流程语句有判断语句.分支语句.循环语句.基本用法都和java中的一致,switch有几点特殊. 1.判断语句 格式:        if(判断条件){            符合条件执行的代 ...

  6. CentOS tengine mysql 5.7 php 5.6

    CentOS 7.x 编译安装 LNMP L 版本是 CentOS 7.x  x64版本, N 我们使用tengine 的最新版本,主要原因是因为tengine 默认支持很多的模块. M 这里我们选用 ...

  7. HDU 4408 Minimum Spanning Tree 最小生成树计数

    Minimum Spanning Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  8. iOS JsonModel

    iOS JsonModel 的使用 本文转自:http://blog.csdn.net/smking/article/details/40432287 下面讲一下JSONModel的使用方法. @in ...

  9. Extraordinarily Tired Students UVA - 12108

    不知道叫什么,好像是模拟的方法,看懂了题就好办(英语硬伤←_←) 题意大概是当一个同学想睡觉的时候判断周围睡觉的人数,不睡的人数大于等于睡觉的话就死撑着,否则就睡觉. 一开始没有什么思路,就直接用了个 ...

  10. 函数(swift)

    输入输出参数(In-Out Parameters) 如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Paramet ...