canvas教程

html5使用canvas绘制时钟示例(2)

字号+ 作者:H5之家 来源:H5之家 2017-04-14 15:06 我要评论( )

var ptxContext = clockPointers.getContext(2d); 由于画指针的操作每隔一秒都要执行一次,所以这里就写成一个函数,方便传给setInterval调用: functionupdatePointers(){ptCtx.clearRect(0,0,width,height); //清

var ptxContext = clockPointers.getContext('2d');
由于画指针的操作每隔一秒都要执行一次,所以这里就写成一个函数,方便传给setInterval调用:

function updatePointers() {     ptCtx.clearRect(0, 0, width, height);  // 清掉原来的指针     // 获取当前时间     var now = new Date();     var h = now.getHours();     var m = now.getMinutes();     var s = now.getSeconds();     // 算出时分秒指针现在应指向圆的几分之几处     h = h > 12 ? h - 12 : h;     h = h + m / 60;     h = h / 12;     m = m / 60;     s = s / 60;     drawPointers(s, 2, 92); // 画秒针     drawPointers(m, 4, 82); // 画分针     drawPointers(h, 6, 65); // 画时针 } drawPointers函数的实现是: // angle是角度,lineWidth是指针宽度,length是指针长度 function drawPointers(angle, lineWidth, length) {     angle = angle * Math.PI * 2 - Math.PI / 2;     ptCtx.beginPath();     ptCtx.lineWidth = lineWidth;     ptCtx.strokeStyle = "#000";     ptCtx.moveTo(dot.x, dot.y);     ptCtx.lineTo(dot.x + length * Math.cos(angle), dot.y + length * Math.sin(angle));     ptCtx.stroke();     ptCtx.closePath(); }

这里主要也是用到三角函数,就不??铝耍??且?⒁?ngel的计算。由于传入的angel是一个百分数,所以要乘以一个圆周,也就是2π,才知道对应的弧度,算出来以后还要减去π/2,因为从上面的坐标图就可以看到,0是位于x轴而不是y轴除,刚好比正常的时钟多了π/2。

最后别忘了调用updatePointers实时更新指针:

setInterval(updatePointers, 1000); updatePointers();

这下时钟完全出来了,除了初步熟悉<canvas>绘图API外,还顺便复习了一次三角函数。

 

中文乱码的问题一直出现在编码设置上,现在在linux中pypyodbc 1.3.3读取GB编码mdb又出现中文字符乱码的问题了,下面来看如何解决。

当前1.3.3版本的pypyodbc在linux系统上面已经可以读取有中文字符的mdb文件,不再出现异常,但是读取的中文字符却全是乱码。

下面是根据一些现象的合理推论:

mdb文件来自于windows系统,其中的中文字符使用GB编码无疑,但linux系统上mdbtools提供的odbc驱动底层已经执行了编码转换,将GB码转换为unicode码,pypyodbc再一次进行转换所以出现了问题。

pypyodbc.connect函数有一个参数unicode_results,在python3版本上默认为True,也就是返回unicode编码的结果集。

odbc底层驱动转换一次编码,pypyodbc再转换一次,悲剧不可避免的出现了。

因此设定connect函数的unicode_results为False,也就是原样返回结果集,然后结果集中的字段名和字段值都需要解码为unicode字符串:

$ python3
>>> conn=pypyodbc.connect('Driver=MDBTools;DBQ=/path/to/Record.mdb', unicode_results=False)
>>> conn.cursor().execute('SELECT * FROM Build').fetchone()[0].decode('UTF-8')

decode(‘UTF-8′)解码成功,说明mdbtools的odbc驱动返回的结果集已经是unicode编码格式。

html表单中的label分显式label和隐式labe,表现上没什么区别,但是对屏幕阅读器的盲人用户来说,就有问题了。

label元素平淡无奇,就是为表单输入元素贴上标签,方便辨识。label有个很重要的属性是for,可以将label与其标识的输入元素绑定在一起,提供更好的操作体验。

显式label

<label for="foo"></label><input type="text" id="foo">

重置和提交按钮,图片按钮以及button元素按钮不用使用显式label,因为它们已经有了隐式标签,如value 和 alt 属性值,button元素的内容。

显式的label对Accessibility是最友好的。

隐式label

将输入元素直接包裹在label标签之内,for属性也可以省略了,甚至输入元素的id也可以省略了。

<label>sometext<input type="text"></label>

IE6不支持隐式label

混合式label

即使用label的for特性,又将输入元素包裹在label之内
   
<label for="foo"><input type="text" id="foo"></label>


表单显式label和隐式label对屏幕阅读器用户的影响

显式label

    也就是说为label元素添加for属性,其属性值与表单控件的id属性值一致。
    重置和提交按钮(<input type="reset"/> 、<input type="submit"/>), 图片按钮(<input type="img"/>)以及脚本按钮 (<button></button>)不用使用显式label,因为它们已经有了隐式标签,如value 和 alt 属性值,button元素的内容。

<label for="firstname">First name:</label><input type="text" name="firstname" id="firstname" tabindex="1" />

隐式label

    根据HTML 4.01 规范, 通过label 元素包裹 表单控件和label文本可创建”隐式label”。
    由于一些浏览器(IE6)不支持隐式label,WCAG2.0不建议使用。

<label>First name: <input type="text" name="firstname" /></label>

另外一种写法,即上面两种方法的结合:

<label for="firstname">First name:
<input type="text" name="firstname" id="firstname" tabindex="1" /></label>

两者的区别

使用屏幕阅读器NVDA和IE9测试发现,屏幕阅读器用户听到的提示内容是不同的:

    显式label写法:“fFirst name: 编辑框 空白(或内容)”
    隐式label写法:“First name: 文本 First name: 编辑框 空白(或内容)”–两种方法一致,不过最后一种写法在所有浏览器下点击label都无法激活表单控件(笔者demo手误,已更改),强烈不推荐这种写法。

可以看出,nvda会重复label文本内容,屏幕阅读器用户更容易理解显式label写法的提示。

更新:今日看到 HTML5 Accessibility Cho

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 可创建gooey效果抖动窗口的jquery插件

    可创建gooey效果抖动窗口的jquery插件

    2017-04-15 10:00

  • [Html5]html5视频播放器播放视频截图功能的实例

    [Html5]html5视频播放器播放视频截图功能的实例

    2017-04-14 12:00

  • html5使用canvas实现跟随光标跳动的火焰效果

    html5使用canvas实现跟随光标跳动的火焰效果

    2017-04-14 11:02

  • html5调用手机摄像头,实现拍照上传功能

    html5调用手机摄像头,实现拍照上传功能

    2017-04-14 10:07

网友点评