Raphael的Braille例子:

注意里面的split(' ')方法,竟然会split出来空元素;

<%@ 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/index009.js"></script>
</head>
<body>
<input id='message' style='width:200px' value='Raphael is great' />
<input id='clickme' type='button' value='braille-ify' />
<div id="container"></div>
</body>
</html>
$(function() {
initRaphael();
});
function initRaphael(e) {
/**
* braille盲文
* 1 4
* 2 5
* 3 6
*/
var braille = {
'A' : '1',
'B' : '1-2',
'C' : '1-4',
'D' : '1-4-5',
'E' : '1-5',
'F' : '1-2-4',
'G' : '1-2-4-5',
'H' : '1-2-5',
'I' : '2-4',
'J' : '2-4-5',
'K' : '1-3',
'L' : '1-2-3',
'M' : '1-3-4',
'N' : '1-3-4-5',
'O' : '1-3-5',
'P' : '1-2-3-4',
'Q' : '1-2-3-4-5',
'R' : '1-2-3-5',
'S' : '2-3-4',
'T' : '2-3-4-5',
'U' : '1-3-6',
'V' : '1-2-3-6',
'W' : '2-4-5-6',
'X' : '1-3-4-6',
'Y' : '1-3-4-5-6',
'Z' : '1-3-5-6'
};
var paper = Raphael('container', 500, 500);
var SPACING = 14, RADIUS = 2;
// 根据数字进行布莱叶文字转换
function make_dot(number) {
number -= 1;
if (number < 0 || number > 5) {
console.log('Invalid number.');
return null;
}
var x = Math.floor(number / 3);
var y = number % 3;
var dot = paper.circle(x * SPACING, y * SPACING, RADIUS).attr('fill', 'black');
return dot;
}
// 根据数字字符串进行布莱叶转换
function make_cell(dots) {
if (typeof dots === 'string') {
dots = dots.split('-');
}
var cell = paper.set();
for (var c = 0; c < dots.length; c++) {
cell.push(make_dot(dots[c]));
}
return cell;
}
// paper.text(10, 25, "V:");
// make_cell('1-2-3-6').transform('T30,10');
// 根据一个单词进行布莱叶转换
function make_word(word, pos) {
pos = pos || {
x : 10,
y : 10
};
word = word.toUpperCase();
var myword = paper.set();
for (var c = 0; c < word.length; c++) {
// 如果在布莱叶对象中,就进行转换
if (braille[word[c]]) {
var letter = make_cell(braille[word[c]]);
myword.push(letter);
letter.transform('T' + pos.x + ',' + pos.y);
// 绘制一个就进行x坐标的增加
pos.x += SPACING * 3;
}
}
return myword;
}
// make_word('Raphael', {x:10,y:50});
function make_words(message) {
var pos = {
x : 10,
y : 10
};
// a b(中间有两个空格)会split出来的长度是4;空字符串split出来的内容的确会增加新的元素;
// 'a b'.split(' ') -> ["a", "", "", "b"]
// 'abcbd'.split('b') -> ["a", "c", "d"]
var words = message.toUpperCase().split(' ');
var myset = paper.set();
for (var c = 0; c < words.length; c++) {
myset.push(make_word(words[c], pos));
// 如果计算之后的x坐标大于paper.width,就换行;
if (pos.x > 10 && (pos.x + SPACING * 3 * words[c].length) > paper.width) {
pos.x = 10;
pos.y += SPACING * 5;
} else {
// 如果是空字符串也会增加一下x坐标;
pos.x += SPACING * 3;
}
}
return myset;
}
var braille_words = paper.set();
function make() {
// 进行已有集合的清空
braille_words.remove();
braille_words = make_words($('#message').val());
}
$('#clickme').click(make);
make();
}

Raphael的Braille例子的更多相关文章

  1. Raphael Js矢量库API简介:

    Raphael Js矢量库API简介:Raphael Javascript 是一个 Javascript的矢量库. 2010年6月15日,著名的JavaScript库ExtJS与触摸屏代码库项目jQT ...

  2. 对Raphael画图标的一个jquery简单封装

    公司要做一个项目的demo,要求地图上可以插红旗,所以就用到了Raphael. 因为是个demo,所以地图就用了一张图片,效果如下: 所以为了更好的封装一下这个功能,就写了一个简单的插件:jquery ...

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

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

  4. svg―Raphael.js Library(一)

    Raphael是一个用于在网页中绘制矢量图形的Javascript库,它使用SVG W3C推荐标准和VML作为创建图形的基础,可以通过JavaScript操作DOM来轻松创建出各种复杂的柱状图.饼图. ...

  5. svg―Raphael.js Library

    Raphael是一个用于在网页中绘制矢量图形的Javascript库,它使用SVG W3C推荐标准和VML作为创建图形的基础,可以通过JavaScript操作DOM来轻松创建出各种复杂的柱状图.饼图. ...

  6. 使用Raphael 画图(二) 扩展的图形 (javascript)

    看这文章前,建议先看第一编文章<使用Raphael 画图(一) 基本图形 (javascript)>. 在Raphael基础上扩展的图形: 要运行该例子要引入附件的2个js包.(g.rap ...

  7. Raphael入门实例:绘图

    raphael 实例 开始 创建画布参数说明 创建一个画布对象. 下面每个例子都会创建一个320*200大小的画布. ? 1 2 // 1.在视口的 (10,50) 坐标位置上创建画布 var pap ...

  8. Raphael.js--基础1

    Raphael.js 特点: 1.兼容VML和SVG 2.扩展功能——动画 用法: //1.创建画布 let paper=Raphael(x,y,width,height); //2.创建形状 let ...

  9. Raphael path 拖动实现

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

随机推荐

  1. PAT (Advanced Level) 1068. Find More Coins (30)

    01背包路径输出. 保证字典序最小:从大到小做背包. #include<cstdio> #include<cstring> #include<cmath> #inc ...

  2. Dubbo阿里Alibaba开源的分布式服务框架

    [获奖公布]"我的2016"主题征文活动    程序猿全指南,让[移动开发]更简单!      [观点]移动原生App开发和HTML 5开发,你更看好哪个?   博客的神秘功能 D ...

  3. win7 安装 vagrant + centos + virtualbox

    Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史. 我的是在win7系 ...

  4. 杀死进程kill和fuser

    1 kill -9 id 2   不行的话使用    fuser -k -SIGHUP /opt/bre/cookiemapping/wsapi/123 fuser有一个特别的用法在于它可以一次杀死那 ...

  5. Spring 笔记1

    1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书<Expert one-on-one J2EE Design and Deve ...

  6. word加载项打包发布注意事项总结

    最近在做一个word加载项,发布的时候还是有很多坑的现在总结一下:发布工具为Advanced Installer 11.0 网盘地址:http://pan.baidu.com/s/1i4GK3g5 1 ...

  7. 将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)

    - (NSArray *)testa:(NSDictionary *)dic { NSMutableArray *arr_M = [NSMutableArray array]; // 1.遍历每一个元 ...

  8. cakephp 2.0 源码解读(一)

    lib - Cake -basic.php -bootstrap.php -Cache -Config -Configure -Controller -Core -Error -Event -I18n ...

  9. ibatis参数传递小技巧 - 疯狂的菠菜 - ITeye技术网站

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  10. ZOJ 3941 Kpop Music Party

    先把能合并的区间都合并起来. 考虑最裸的贪心策略,从左到右一段一段的取. 但是,这样会有错,错在没有考虑每段区间选取最后一个点. 因为N只有10,所以枚举一下哪些区间最后一个点会被选择,然后按照最裸的 ...