基于canvas将视频转化成字符动画

video2txt
在上篇文章/img2txt-canvas,主要介绍了如何将一张图片转成字符画的办法,经过同事吕哥文韬的提醒和修改。在此基础上,可以实现视频转字符动画的效果哦。原理都是通过getContext(‘2d’)对象的drawImage方法引入视频或图像到canvas中,再进行转换,转换方法上篇已经介绍,不通的是视频的话要通过回调函数,不停回调转换函数,实现动画功能:

demo:
/img2txt/video2txt.html
http://www.jsbug.com/lab/samples/ascii-video/

vim备忘

虽然平时写代码的时候都是用Intellij IDEA,但也偶尔通过ssh+vim远程修改文件,特此记录,以备时需。

标签命令

:tabe fn     在一个新的标签页中编辑文件fn
gt           切换到下一个标签页
gT           切换到上一个标签页
:tabr        切换到第一个标签页
:tabl        切换到最后一个标签页
:tabm [N]    把当前tab移动到第N个tab之后

窗口命令

ctrl+w s     水平分割窗口
ctrl+w w     切换窗口
ctrl+w q     退出当前窗口(由于同时有多个文件,此命令不会影响其他窗口)
ctrl+w v     垂直分割窗口
:sp fn       分割窗口,并将fn加载到新的窗口中

Read More

在Intellij IDEA中使用Ant

Ant最初是为Java量身定做的工程构建工具,但因为其简单的XML语法和内置的任务,作为前端领域的构建工具也不失为一个明智的选择。关于Ant与前端,明河的教程有更详细的介绍:http://book.36ria.com/ant/index.html,对于Ant的常规使用方法,新手请直接学习明河的教程。下面来说说Intellij IDEA,它内置了Ant,如果你不喜欢命令行,那么在Intellij IDEA中使用Ant是非常方便的,本文主要介绍windows下在Intellij IDEA中使用Ant进行前端构建的方法,如果你使用其他操作系统,也可以参考。

1、首先,确保你的系统已经安装了Java运行环境,如果你的机子已经安装jdk,那么请跳过这一步,如果没有,请移步至http://willerce.com/post/jdk。参照此教程安装好jdk。

2、配置project structure。点击File>Project Structure(快捷键ctrl+alt+shift+s),在Project SDK这一项中,如果显示的是“No SDK”,说明还木有设置运行环境,我们点击New,选择你的jdk安装目录,比如我的是C:\Program Files (x86)\Java\jdk1.6.0_10。设置好以后,会显示jdk的版本信息,如下图。

Intellij IDEA Project Structure

Read More

Days with my father.

半夜里,在拜读阮一峰老师的网志的时候,看到一个美国摄影师的作品。母亲去世后,他就拍他的父亲,还写下自己的感想。

我被这组作品深深地感动了。儿子对父亲的爱与不舍、以及父亲在年老之际的孤独,都在其中得到了细腻的体现,非常感人,有时候,我们需要安静下来,给生命一个思考的时间。

=============================================

与父亲在一起的日子
作者:Phillip Toledano
译者:阮一峰
原文网址:http://www.dayswithmyfather.com

1.

这是一份日记,记录我的父亲。

Read More

jQuery.viewport插件实现不同场景的数据异步加载

viewport是我同事@吕哥写的实现不同场景的图片异步加载的jq插件。想象一下,当服务器返回列表的数据项(或图片)非常多,而其数据项不用在页面回应时全部加载给浏览器,可以按需加载。那么通过将列表 viewport化,你就可以设置并知道知道哪些数据项被显示出来的时机,完成数据异步加载的操作。

viewport非常适合应用于海量图片的查看器(神马轮播图,相册之类的),或者瀑布流的布局当中,此插件可以被绑定到 window 对象或任意以 block 方式显示的对象上,如:$(window).viewport() 或 $(“#container”).viewport()。

两个demo:
http://www.jsbug.com/lab/samples/viewport/index.html#sample1
http://www.jsbug.com/tools/wall/

参数说明

  1. id:可选,字符串类型。每个容器都可以执行 viewport 方法多次,也就是说,任何容器都可以被视口化多次,且同一容器的各视口间互不影响。
  1. targets:可选,在“视口”中查找的目标元素。
  1. includeHiddens:可选,当提供 targets 时才有效。用来控制是否查找视口内的隐藏目标元素,默认为 true。
  1. threshold:可选,当提供 targets 时才有效。通过此值你可以增大或减小视口检测的阈值范围。
  1. delay:可选,此参数用来控制 onViewChange 的触发频率,默认为 500 毫秒。
  1. onViewChange:可选,用户定义的回调事件,当“视口”被滚动或缩放后触发。
  1. thresholdBorderReaching:可选,此参数主要用来影响 onViewChange 回调中的 detail 参数,默认为 0。

更详细的用法以及demo详见:http://www.jsbug.com/lab/samples/viewport/index.html

利用函数的惰性载入提高javascript代码性能

在javascript代码中,因为各浏览器之间的行为的差异,我们经常会在函数中包含了大量的if语句,以检查浏览器特性,解决不同浏览器的兼容问题。例如,我们最常见的为dom节点添加事件的函数:

function addEvent (type, element, fun) {
    if (element.addEventListener) {
        element.addEventListener(type, fun, false);
    }
    else if(element.attachEvent){
        element.attachEvent('on' + type, fun);
    }
    else{
        element['on' + type] = fun;
    }
}

每次调用addEvent函数的时候,它都要对浏览器所支持的能力进行检查,首先检查是否支持addEventListener方法,如果不支持,再检查是否支持attachEvent方法,如果还不支持,就用dom 0级的方法添加事件。这个过程,在addEvent函数每次调用的时候都要走一遍,其实,如果浏览器支持其中的一种方法,那么他就会一直支持了,就没有必要再进行其他分支的检测了,也就是说,if语句不必每次都执行,代码可以运行的更快一些。解决的方案就是称之为惰性载入的技巧。

Read More

javascript连连看。

之前看到一位朋友说她妈妈喜爱连连看,就想着不如把身边的朋友头像拿来做个连连看游戏吧。次连连看的特点就是不但本人头像可以连,家属,情侣之间也可以联通。寻路径算法是传统的枚举算法,原理如下,每次建立四个点,分别检查是否两两联通,如果两两联通,就说明头尾可以连。首先横向扫描,然后纵向,详细可以看注释。
DEMO:/wp-content/uploads/linkgame/linkgame.html

Read More

jQuery1.9中被删除的API

jQuery1.9删除了一些在1.8中已经过时的api,想要把那些不够安全的、缺乏效率的、用处不大的,以及带有误导的特性统统去掉。如果你想升级你的jquery版本,但又使用了如下被删除的api的话,可以引入Migrate迁移插件,被删除的api可以在Migrate插件中修复。

.toggle(function, function, … )
toggle()方法可实现点击一个元素来执行指定函数。此方法被删除以减少混乱和提高潜在的模块化程度。

jQuery.browser()
jQuery.browser()通过UA信息来检测浏览器。此方法在1.3版本中已不赞成使用,并在1.9版本中被删除,jquery团队更建议通过特性检测来时您的代码兼容浏览器。

.live()
live()方法可以为未来生成的元素添加事件,此方法在1.7版本中已不赞成使用,并在1.9版本中被删除,您可以使用on()方法来代替。

.die()
die()方法可以移除live()添加的事件,此方法在1.7版本中已不赞成使用,并在1.9版本中被删除,您可以使用off()方法来代替。

.sub()
sub()方法可以可创建一个新的jQuery副本,不影响原有的jQuery对像,但用例的数量已经不足以证明它存在的价值。

通过onhashchange优化“锚链接”

锚链接是大家再熟悉不过的了,它允许用户通过一个链接跳转到当前页面的指定内容。一般创建一个锚链接的方法就像下面这样,用户点击a标签,浏览器将跳转的id为content的div来显示其内容。。

<a href="#content">跳到id为content的标签</a>



<div id="content">

</div>

存在的问题:
当用户没有鼠标,而是使用tab键+回车键的方式触发锚链接时,页面焦点仍然停留在a标签,并没有相应转到

上。这种情况带来的问题是:如果用户继续按tab键,焦点会转移到a标签的下一个可获取焦点的元素,这可能是挨着a标签的另一个链接,反正不是
的下一个可获取焦点的元素。而屏幕可视区域就有可能回滚回其他地方。按照常理,用户更希望按下tab键,焦点应该跳转到
的下一个可获取焦点的元素。

Read More