Raphael

作者: 半夕蝶 | 来源:发表于2015-05-29 18:34 被阅读1499次

    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) 绑定事件
      这里不做过多介绍因为我也不懂这个

    相关文章

      网友评论

          本文标题:Raphael

          本文链接:https://www.haomeiwen.com/subject/gtgrqttx.html