本人花了不少时间泡在google上查找Raphael js 的相关资料,先将如下信息分享给对raphael js感兴趣的同学
简单QQ秀的功能实现:
用户进入该php 页面,显示一个用户可以自定义肤色,发型,身材等特征的个性定制区域。当然这些特征多是由一些简单的Raphael js绘制的图形构成.
(关于Raphael js 绘图方面的资料,大家可以去其官方网站上找,比较简单,优快云上也有人发过教程,就不再介绍了。)
网上基本查找不到保存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 。
如果需要上文提到的所有工具代码,请留言,谢谢!!!
实现这个功能,花了我很长的时间去查阅资料,并经历了一个痛苦的调试过程,如有转载,请注明原文章地址并提及到博主的用户名,谢谢!!!
raphael js 实现一个具备保存功能的简单仿QQ秀。
最新推荐文章于 2021-06-04 04:53:19 发布