raphael js 实现一个具备保存功能的简单仿QQ秀。

来源:互联网 发布:虚拟地球仪软件 编辑:程序博客网 时间:2024/05/17 04:40
本人花了不少时间泡在google上查找Raphael js 的相关资料,先将如下信息分享给对raphael js感兴趣的同学简单QQ秀的功能实现: 用户进入该php 页面,显示一个用户可以自定义肤色,发型,身材等特征的个性定制区域。当然这些特征多是由一些简单的Raphael js绘制的图形构成.(关于Raphael js 绘图方面的资料,大家可以去其官方网站上找,比较简单,CSDN上也有人发过教程,就不再介绍了。)网上基本查找不到保存Raphael js的资料,通过在其官网找到一个图形例子页面,并查看其页面源码,发现Raphael js使用SVG 格式来实现对所绘制图形的保存。当然在国外的一些问答网站上有人提到了这一点。1.raphael js 转换成 json当用户完成简单QQ秀后点击保存按钮,则会将用户绘制的图形及填充色转换成JSON关于转换成JSON ,花费了我很多的时间。图形的一些基本属性都能够获取到并填写到JSON中,但是图形的显示或隐藏属性却怎么样都获取不到。baidu 了之后,发现style=“display:none” 属性是 computed style 。费了九牛二虎之类也没有将 style 中的display 属性获取到。google 了一把,发现很多老外也写了关于 将 Raphael js 转换成JSON 的资料,但都回避了 display 属性的获取。想了半天,最后想到其实可以用 opacity: 1/0 来使绘制对象显示或隐藏。虽然 在 firebug 和 chrome 中有看到图形有 style=“opacity :1” 的属性,但在绘制的时候使用 rect(...).attr("opacity","0") ;可以将opacity 设置为 0当然在 firebug 和chrome 中 图形的 属性为: style=“ opacity:0” opacity:0请注意: 在style 中 opacity 设置为0了, 浏览器又重新添加了一个属性值为0的opacity虽然增加了一相同的属性,但我们想要的效果已经达到:这个时候 可以获取到 opacity 的属性值,当然这个属性值是 opacity:0 而不是从style 中获取到的。2. JSON 转换成 SVG在JQuery 中将raphael js 图形转换成 JSON 对象后,通过 JQuery 的ajax 功能将JSON 对象传递到另外一个将JSON 转换成SVG 的php文件中请注意: 在 JQuery 的 $.post 中不要使用“json” 返回内容格式,也就是jQuery.post(url, [data] , [callback] , [type] ) 不需要设置【type】 的值3. SVG 回传给原始页面 SVG 转换成功后回传给原始页面,原始页面的获取到这些SVG 数据时,AJAX 的回调函数需要在在SVG 数据前添加 ‘’ .即 '......'形式,并将SVG 数据存储到数据库中4.下次用户登录时,可以选择加载已经完成的图形。至于如何使用Raphael js 将SVG 数据转换成图形,请自己google 。如果需要上文提到的所有工具代码,请留言,谢谢!!!实现这个功能,花了我很长的时间去查阅资料,并经历了一个痛苦的调试过程,如有转载,请注明原文章地址并提及到博主的用户名,谢谢!!!