Raphael的Braille例子
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例子的更多相关文章
- Raphael Js矢量库API简介:
Raphael Js矢量库API简介:Raphael Javascript 是一个 Javascript的矢量库. 2010年6月15日,著名的JavaScript库ExtJS与触摸屏代码库项目jQT ...
- 对Raphael画图标的一个jquery简单封装
公司要做一个项目的demo,要求地图上可以插红旗,所以就用到了Raphael. 因为是个demo,所以地图就用了一张图片,效果如下: 所以为了更好的封装一下这个功能,就写了一个简单的插件:jquery ...
- 学习RaphaelJS矢量图形包--Learning Raphael JS Vector Graphics中文翻译(一)
(原文地址:http://www.cnblogs.com/idealer3d/p/LearningRaphaelJSVectorGraphics.html) 前面3篇博文里面,我们讲解了一本叫做< ...
- svg―Raphael.js Library(一)
Raphael是一个用于在网页中绘制矢量图形的Javascript库,它使用SVG W3C推荐标准和VML作为创建图形的基础,可以通过JavaScript操作DOM来轻松创建出各种复杂的柱状图.饼图. ...
- svg―Raphael.js Library
Raphael是一个用于在网页中绘制矢量图形的Javascript库,它使用SVG W3C推荐标准和VML作为创建图形的基础,可以通过JavaScript操作DOM来轻松创建出各种复杂的柱状图.饼图. ...
- 使用Raphael 画图(二) 扩展的图形 (javascript)
看这文章前,建议先看第一编文章<使用Raphael 画图(一) 基本图形 (javascript)>. 在Raphael基础上扩展的图形: 要运行该例子要引入附件的2个js包.(g.rap ...
- Raphael入门实例:绘图
raphael 实例 开始 创建画布参数说明 创建一个画布对象. 下面每个例子都会创建一个320*200大小的画布. ? 1 2 // 1.在视口的 (10,50) 坐标位置上创建画布 var pap ...
- Raphael.js--基础1
Raphael.js 特点: 1.兼容VML和SVG 2.扩展功能——动画 用法: //1.创建画布 let paper=Raphael(x,y,width,height); //2.创建形状 let ...
- Raphael path 拖动实现
让 Raphael 的 Path 动起来 Raphaël 是一个很实用的线上矢量图操作 Javascript 库.使用简单,一个值得一提的卖点是通过抽象出共同的接口屏蔽了 SVG 和 VML 之间的差 ...
随机推荐
- Python大神成长之路: 第一次学习记录
一.Python发展史 二.Python2 or 3 博主选择了Python3. 从官网下载Python www.python.org Windows安装python3.5.python2.7.安装 ...
- jQuery判断当前元素是第几个元素&获取第N个元素
假设有下面这样一段HTML代码: <ul> <li>jQuery判断当前元素是第几个元素示例</li> <li>jQuery获取第N个元素示例</ ...
- IMCP网际控制协议
IP协议是TCP/IP协议使用的在网络层传输机制,它是一种不可靠的无连接的数据报协议,但是IP协议假定了底层是不可靠的,因此,要尽最大的努力传输到目的地,但正因为如此,IP协议则没有了保证,也就是说, ...
- gcd timer
//0.创建队列 dispatch_queue_t queue = dispatch_get_global_queue(, ); NSLog(@"%s",__func__); // ...
- [算法] aov图拓扑算法
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <queue> ...
- ARC下需要注意的内存管理
ARC下需要注意的内存管理 2016/04/03 · iOS开发 · 内存管理 分享到:1 原文出处: 一不(@luoyibu) 之前发了一篇关于图片加载优化的文章,还是引起很多人关注的,不过也 ...
- MySQL 批量导入 csv 文件
注意编码一致性,如:我的数据库是utf-8编码,csv文档的编码也是utf-8. 导入使用 LOAD DATA LOCAL INFILE 详细用法请参看文档或者书籍. mysql user表结构: ...
- (简单) POJ 2251 Dungeon Master,BFS。
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- kafka第五篇
架构设计:http://www.linuxeden.com/html/news/20130309/136716_2.html 代码实现consumer 和producer
- getElementsByTagName("div")和$("div")区别
作者:zccst <body> <div class="selected">1</div> <div class="select ...