Raphael

Readme

根据 Raphael官网翻译过来的 http://raphaeljs.com/
一方面是联系markdown,一方面是了解svg的相关库~

创建Raphael

  • Raphael(x,y,w,h) || Raphael(ele,w,h,cb )|| Raphael(all,vb)
    创建一个svg,这个svg是绝对定位的,距离左边x距离 距离顶部y距离,宽高为w和h
    ele是一个id名字或者是一个id节点
    all 是一个图形数组数组与Paper.add类似
// Each of the following examples create a canvas
// that is 320px wide by 200px high.
// Canvas is created at the viewport’s 10,50 coordinate.
var paper = Raphael(10, 50, 320, 200);
// Canvas is created at the top left corner of the #notepad element
// (or its top right corner in dir="rtl" elements)
var paper = Raphael(document.getElementById("notepad"), 320, 200);
// Same as above
var paper = Raphael("notepad", 320, 200);
// Image dump
var set = Raphael(["notepad", 320, 200, {
    type: "rect",
    x: 10,
    y: 10,
    width: 25,
    height: 25,
    stroke: "#f00"
}, {
    type: "text",
    x: 30,
    y: 40,
    text: "Dump"
}]);
  • Raphael.angle(x1,y1,x2,y2[x3,y3]) 返回两点之间的角度
Raphael.angle(10,50,100,120)
  • Raphael.animation(params, ms, [easing], [callback])
    params 要变化的属性 ms 持续时间 easing 运动曲线 cb 回调函数
  • Raphael.bezierBBox(…) 三次贝塞尔曲线 里面是6个值 或者是一个数组

  • Raphael.color(rsl) 返回一个颜色值的解析 支持rgb,hsl ,#xxx,#xxxxxx

  • Raphael.deg(deg) 返回transform的角度

  • Raphael.easing_formulas 运动曲线

    • linear 直线
    • < 或者easeIn 或者ease-in 先减速再加速
    • > 或者easeOut 或者ease-out 先加速再减速
  • < > 或者easeInOut 或者 ease-in-out

  • backIn 或者 back-in 一开始就弹性

  • backOut 或者back-out 最后弹性

  • bounce 慢速弹性运动

  • elastic 超快速弹性运动

  • Raphael.el 自定义函数 !!是给这个节点或者是图形加的 跟之后说的 Raphael.fn差别在这里
Raphael.el.red = function () {
    this.attr({fill: "#f00"});
};
// then use it
paper.circle(100, 100, 20).red();
    
  • Raphael.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) 找到点坐标对应的三次贝塞尔曲线

  • Raphael.fn 自定义函数 ,函数是绑在Raphael上的

Raphael.fn.arrow = function (x1, y1, x2, y2, size) {
    return this.path( ... );
};
// or create namespace
Raphael.fn.mystuff = {
    arrow: function () {…},
    star: function () {…},
    // etc…
};
var paper = Raphael(10, 10, 630, 480);
// then use it
paper.arrow(10, 10, 30, 30, 5).attr({fill: "#f00"});
paper.mystuff.arrow();
paper.mystuff.star();
  • Raphael.format (taken,...) 替换
var x = 10,
    y = 20,
    width = 40,
    height = 50;
// this will draw a rectangular shape equivalent to "M10,20h40v50h-40z"
paper.path(Raphael.format("M{0},{1}h{2}v{3}h{4}z", x, y, width, height, -width));
  • Raphael.fullfill(token, json) 更加先进的一直替换
// this will draw a rectangular shape equivalent to "M10,20h40v50h-40z"
paper.path(Raphael.fullfill("M{x},{y}h{dim.width}v{dim.height}h{dim['negative width']}z", {
    x: 10,
    y: 20,
    dim: {
        width: 40,
        height: 50,
        "negative width": -40
    }
}));
  • Raphael.getColor([value]) 获取光谱上的下一个颜色值 value 默认是0.75
  • Raphael.getColor.reset() 重置光谱颜色最初为红色

  • Raphael.getPointAtLength(path, length) 获取在路径上长度为length的坐标 返回是一个json { x: ,y: ,alpha: } 最后一个是角度

  • Raphael.getRGB(colour) 解析这个颜色值 返回一个json形式的颜色分析 colour的格式可以是'red','#xxx''#xxxxxx''rgb()' 'hsl'
    返回的格式

    {
    r  red
    g green
    b blue
    hex   #xxx
    error 
    

}
```

  • Raphael.getSubpath(path,form,to) 截取一段路径 返回的是一个字符串路径
    path 路径( string) from 开头 to 结束

  • Raphael.getTotalLength(path) 返回这个路径的长度 返回的是长度px

  • Raphael.hsl(h,s,l) hsl转换成16进制的颜色值 类似Raphael.hsb(h,s,l)

  • Raphael.hsl2rgb(h, s, l) hsl转换rgb 类似还有 Raphael.hsb2rgb(h, s, b)

  • Raphael.isBBoxIntersect(bbox1,bbox2) 判断两个元素的boundingbox是否相交

  • Raphael.isPointInsideBBox(bbox , x , y) 判断这个点是否在盒子里面

  • Raphael.isPointInsidePath(path,x,y) 判断点是否在这条路径上

  • Raphael.mapPath(path, matrix) 对路径进行矩阵变换

  • Raphael.matrix(a, b, c, d, e, f) 返回一个线性变换

  • Raphael.parsePathString(pathString) 解析这个路径 返回一个包含路径字符串的数组

  • Raphael.parseTransformString(TString) 解析这个transform 传回一个数组

  • Raphael.pathBBox(path) 给定路径返回一个盒子模型 返回是一个json {x,y,x2,y2,width,height}

  • Raphael.pathIntersection(path1,path2) 找到两个路径的一个相交点

return 
[
{
x:[number] x coordinate of the point
y:[number] y coordinate of the point
t1:[number] t value for segment of path1 //第1个线段
t2:[number] t value for segment of path2 //第2个线段
segment1:[number] order number for segment of path1
segment2:[number] order number for segment of path2
bez1:[array] eight coordinates representing beziér curve for the segment of path1
bez2:[ array]eight coordinates representing beziér curve for the segment of path2
}
]
  • Raphael.rad(deg) 角度转换弧度 感觉是超级有用的东西

  • Raphael.registerFont(font) 定义一个新的字体

  • Raphael.rgb2hsl(r, g, b) rgb 转hsl

  • Raphael.setWindow(newwin) 设置一个新的窗口 类似iframe

  • Raphael.st 给节点增加方法或者设置值
    与Raphael.el的不同

Raphael.el.red = function () {
    this.attr({fill: "#f00"});
};
Raphael.st.red = function () {
    this.forEach(function (el) {
        el.red();
    });
};
// then use it
paper.set(paper.circle(100, 100, 20), paper.circle(110, 100, 20)).red();
  • Raphael.svg 监测浏览器是否支持svg

  • Raphael.toMatrix(path, transform) 返回变换到路径的一个矩阵

  • Raphael.transformPath(path, transform) 返回路径经过变化后的路径

  • Raphael.type 判断浏览器是支持svg还是vml (ie独有)

  • Raphael.vml 判断浏览器是否支持vml

Paper(这里指的是svg)

  • Paper.add(arg)增加内容到svg上
    arg是一个数组的形式,每一个值都是一个json,type确定一个创建的内容

  • Paper.bottom
    找到在svg在表现上为最下面的一个元素

  • Paper.ca Paper.customAttributes 的简写 自定义属性

paper.customAttributes.hue = function (num) {  
    num = num % 1;  
    return {fill: "hsb(" + num + ", 0.75, 1)"};  
};  
var c = paper.circle(10, 10, 10).attr({hue: .45});  
// or even like this:    
c.animate({hue: 1}, 1e3);  
  • Paper.circle(x, y, r) 画一个圆;

  • Paper.clear() 清除svg的所有内容

  • Paper.ellipse(x, y, rx, ry) 椭圆 增加一个椭圆 x,y坐标 rx,ry半径;

  • Paper.forEach(cb,thisArg) 跟jq一样 循环这个paper的节点 详细见<code>foreach.html</code>

  • Paper.getById(id) 获得某个id节点 //表示我用attr加不上去 目前不知道怎么加id

  • Paper.getElementByPoint(x, y) 返回给定点的最上面的一个元素

paper.getElementByPoint(mouseX, mouseY).attr({stroke: "#f00"})
  • Paper.getFont(family,[weight],[style],[stretch]) 暂时不明
    font-family font-weight font-style font-stretch 拉伸
paper.print(100, 100, "Test string", paper.getFont("Times", 800), 30);
  • Paper.image(src,x,y,w,h) 增加一个图像
    地址 起始坐标 宽高

  • Paper.path(pathString) 路径 按照基本原则 M、Z、L、H、V、C、S、Q、T、A、R

var c = paper.path("M10 10L90 90");
  • Paper.print(x, y, string, font, [size], [origin], [letter_spacing])

在某个位置写上文字 x,y位置 string 文字 font 见getFont size文字大小 默认16 origin 对齐方式 baseline middle(默认) 间隔 默认0

print(10, 50, "print", r.getFont("Museo"), 30).attr({fill: "#fff"});
  • Paper.raphael 这个obj/function 具体不明

  • Paper.rect(x,y,w,h,[r])
    创建矩形 最后的参数是弧度 默认0

  • Paper.remove()
    移出某个元素

  • Paper.renderfix()
    在firefox 和ie9中,当这个图形有依赖其他节点的时候,他的位置会发生变化,使这个图形固定

  • Paper.safari()
    解决Safari 强制渲染的问题

  • Paper.set()
    分组,对分组内的元素进行统一操作但是不会创建新的元素 详细见<code>set.html</code>

 var st = paper.set();
st.push(
   paper.circle(10, 10, 5),
   paper.circle(30, 10, 5)
);
st.attr({fill: "red"}); // changes the fill of both circles
  • Paper.setStart()
    结合 Paper.setFiniash()使用 创建Paper.set 所有的东西都会被创建进这个set里面,直到遇到Paper.setFinish

  • Paper.setFinish()

paper.setStart();
paper.circle(10, 10, 5),
paper.circle(30, 10, 5)
var st = paper.setFinish();
st.attr({fill: "red"}); // changes the fill of both circles
  • Paper.setViewBox(x,y,w,h,fit)
    设置视窗 最后一个参数表示是有需要用图形去填充边框

  • Paper.text(x,y,text) 设置文字 需要换行就加个\n

    var t = paper.text(50, 50, "Raphaël\nkicks\nbutt!");
  • Paper.top 找到表现上最上面的那个元素 与Paper.bottom相反

Element 对节点的操作

  • Element.animate(…)
    {
    params 参数列表
    ms 时间
    easing 运动曲线
    callback
    } or
    animtion [Raphael.animation]
  • Element.animateWith(…) 动画给另外一个元素
  • Element.attr(…) 给节点增加一个属性
(attrName,value)
(params)
(arrtName)
(attrNames)
  • Element.click(handler) 给每一个节点增加点击方法

  • Element.clone() 克隆这些节点

  • Element.data 增加或者检索整个节点的key(暂时不知道是什么鬼)

for (var i = 0, i < 5, i++) {
    paper.circle(10 + 15 * i, 10, 10)
         .attr({fill: "#000"})
         .data("i", i)
         .click(function () {
            alert(this.data("i"));
         });
}
  • Element.dblclick(handler) 双击

  • Element.drag(onmove, onstart, onend, [mcontext], [scontext], [econtext]) 节点的拖拽事件

  • Element.getBBox(isWithoutTransform) 返回一个没有经过transform的合模型

  • Element.getPointAtLength(length) 返回的坐标点位于给定长度在给定的路径。仅适用于元素的“路径”

{
x:r x coordinate
y: y coordinate
alpha: angle of derivative
}
  • Element.getSubpath(from, to) 返回从开始点到结束点的一个路径

  • Element.getTotalLength() 返回路径长度

  • Element.glow([glow]) 给元素周围增加辉光(跟阴影差不多)

{
width   number  size of the glow, default is 10
fill    boolean will it be filled, default is false
opacity number  opacity, default is 0.5
offsetx number  horizontal offset, default is 0
offsety number  vertical offset, default is 0
color   string  glow colour, default is black
}
  • Element.hide() 隐藏元素

  • Element.hover(f_in, f_out, [icontext], [ocontext]) 移入移出

{
f_in  fn
f_out fn
icontext  context for hover in handle
ocontext context for hover in handle
}
  • Element.id 设置id

  • Element.insertAfter() 在当前的节点后插入一个object

  • Element.insertBefore() 在当前的节点前插入一个object

  • Element.isPointInside(x, y) 判断这个点是否在图形里面

  • Element.mousedown(handler) mosedown事件

  • Element.mousemove(handler) mousemove事件

  • Element.mouseout(handler) mouseout事件

  • Element.mouseover(handler) mouseover事件

  • Element.mouseup(handler) mouseup事件

  • Element.onDragOver(f) dragover事件

  • Element.pause([anim]) 暂停动画

  • Element.paper 用于元素的扩展

Raphael.el.cross = function () {
    this.attr({fill: "red"});
    this.paper.path("M10,10L50,50M50,10L10,50")
        .attr({stroke: "red"});
}
  • Element.remove() 移出这个节点

  • Element.removeData([key]) remove这个key跟之前设置data相反

  • Element.resume([anim]) 继续播放,目测是

  • Element.rotate(deg, [cx], [cy]) 旋转,后两个参数是旋转中心点

  • Element.setTime(anim, value) 设置动画时间

  • Element.show() 相对 hide

  • Element.status([anim], [value]) 获取 或者设置这个元素的动画状态

  • Element.scale(sx, sy, [cx], [cy]) 缩放,后两个是缩放中心点

  • Element.stop([anim]) 停止动画

  • Element.toBack() 移动这个节点到其他节点的后面,以至于让浏览者看到的是最后面的

  • Element.toFront() 移动这个节点到其他节点的前面,以至于让浏览者看到的是最上面的

  • Element.touchcancel(handler) 触摸取消事件(移动端也能支持?)

  • Element.touchend(handler) touchend 事件

  • Element.touchmove(handler) touchmove 事件

  • Element.touchstart(handler) touchstart事件

  • Element.transform([tstr]) transform变换

t translate t100,0  横向移动100 垂直0
r rotate r30,0,100 顺时针30度 旋转点为0,100
s scale s1.5,2,100 放大1.5 放点中心点2,100
//
var el = paper.rect(10, 20, 300, 200);
// translate 100, 100, rotate 45°, translate -100, 0
el.transform("t100,100r45t-100,0");
// if you want you can append or prepend transformations
el.transform("...t50,50");
el.transform("s2...");
// or even wrap
el.transform("t50,50...t-50-50");
// to reset transformation call method with empty string
el.transform("");
// to get current value call it without parameters
console.log(el.transform());
  • Element.translate(dx, dy) translate 变换

  • Element.unclick(handler) 移出click事件

  • Element.undblclick(handler) 移除双击事件

  • Element.undrag() 移除drug

  • Element.unhover(f_in, f_out) 移除hover时间 包括f_in,f_out

  • Element.unmousedown(handler) 移除mousedown事件

  • Element.unmousemove(handler) 移除mousemove事件

  • Element.unmouseout(handler) 移除mouseout事件

  • Element.unmouseover(handler) 移除mouseover事件

  • Element.unmouseup(handler) 移除mouseoverup事件

  • Element.untouchcancel(handler) 移除 touchcancel事件

  • Element.untouchend(handler) 移除touchend事件

  • Element.untouchmove(handler) 移除touchmove事件

  • Element.untouchstart(handler) 移除touchstart事件

Matrix 矩阵

  • Matrix.add(a, b, c, d, e, f, matrix) 增加一个新的矩阵

  • Matrix.clone() 克隆一个新的矩阵

  • Matrix.invert() 返回矩阵的相反矩阵

  • Matrix.rotate(a, x, y) 旋转矩阵

  • Matrix.scale(x, [y], [cx], [cy]) 缩放矩阵

  • Matrix.split() 反编译矩阵

{
dx  number translation by x
dy  number translation by y
scalex  number  scale by x
scaley  number  scale by y
shear   number  shear 剪切
rotate  number  rotation in deg
isSimple    boolean could it be represented via simple transformations 是否可以通过简单转换
}
  • Matrix.toTransformString() 矩阵转换transform 字符串形式

  • Matrix.translate(x, y) translate 转换成矩阵

  • Matrix.x(x, y) 返回给定的X坐标点变换后的矩阵描述 (就是矩阵变化之后x点的值么)

  • Matrix.y(x, y) 返回给定的Y坐标点变换后的矩阵描述 (就是矩阵变化之后y点的值么)

Animation

  • Animation.delay(delay) 对一个已存在的动画增加延迟时间
var anim = Raphael.animation({cx: 10, cy: 20}, 2e3);
circle1.animate(anim); // run the given animation immediately
circle2.animate(anim.delay(500)); // run the given animation after 500 ms
  • Animation.repeat(repeat) 增加循环次数

Set

  • Set.clear() 从set里面清除全部元素

  • Set.exclude(element) 从set里面排除某个元素

  • Set.forEach(callback, thisArg) 循环这个set里面的元素进行callback操作

  • Set.pop() 移出set里面的最后一个元素 并且 返回这个元素

  • Set.push() 增加一个元素到set里面

  • Set.splice(index, count, [insertion…]) 移出某个元素

eve 对事件的操作

  • eve.off(name, f) 解除事件

  • eve.on(name, f) 绑定事件
    这里不做过多介绍因为我也不懂这个

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容