雨夜带刀's Blog

JavaScript算法题之–随机数的生成

需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现。

先来生成一个有序的数组:

var arr = [],
	length = 100,
	i = 0;

for( ; i < length; i++ ){
	arr.push( i );
}

从一个长度为 100 的有序数组中随机拿出 10 个随机的数,并且不能有重复。

指尖上的事件-touch事件的封装

在触屏设备上,一些比较基础的手势都需要通过对 touch 事件进行二次封装才能实现。

zepto 是移动端上使用率比较高的一个类库,但是其 touch 模块模拟出来的一些事件存在一些兼容性问题,如 tap 事件在某些安卓设备上存在事件穿透的 bug,其他类型的事件也或多或少的存在一些兼容性问题。

于是乎,干脆自己动手对这些常用的手势事件进行了封装,由于没有太多真实的设备来进行测试,可能存在一些兼容性问题,下面的代码也只是在 iOS 7、Andorid 4 上的一些比较常见的浏览器中测试通过。

tap事件

tap 事件相当于 pc 浏览器中的 click 效果,虽然在触屏设备上 click 事件仍然可用,但是在很多设备上,click 会存在一些延迟,如果想要快速响应的 “click” 事件,需要借助 touch 事件来实现。

再谈等高瀑布流布局的算法

之前有写过一篇非等宽图片列表的布局的博文,那只是这种布局之前的叫法,为了和常规的等宽瀑布流布局做区分,根据这种布局的特性(整行是等高的),那么就叫等高瀑布流布局吧。

怎么又拿这种布局出来说事?最近几天在对以前开发的360图片搜索结果列表页的图片尺寸和交互效果做一些细节上的调整。同时也对布局的算法做了优化,之前采用的是以宽度裁切为主和夹杂着一些等比缩放的算法,当时是为了让每一行看起来高度都一致。由于宽度裁切的效果会让图片左右边缘部分有损失,而且当时也有图片 hover 时的放大效果在一定程度上弥补了这种损失。这次放弃了宽度裁切,也去掉了 hover 时放大图片的效果,全部采用了等比缩放的算法。

在上一篇博文中谈到的等比缩放的算法其实并不是最优的,还是会有一定的上下或者左右的裁切。研究了一下 Google+ 的相册使用的等高瀑布流布局的缩放,发觉还有一种更优的缩放计算的算法,于是花了两个小时将这种算法推演了出来。这里先检讨下,由于智商上的缺陷,数学绝对是我的弱项,这种算法比之前的要简单得多,之前是走了弯路了。

Node.js复制文件

Node.js 本身并没有提供直接复制文件的 API,如果想用 Node.js 复制文件或目录,需要借助其他的 API 来实现。复制单个的文件可以直接用 readFile、writeFile,这样比较简便。如果是复制一个目录下的所有文件,目录下可能还包含了子目录,那么此时就需要用到更高级点的 API 了。

流是 Node.js 移动数据的方式,Node.js 中的流是可读/可写的,HTTP 和文件系统模块都有用到流。在文件系统中,使用流来读取文件的时候,对于一个大文件可能并不会一次性读取完,而是会分好几次读取完,读取的时候会响应数据事件,在文件没读取完的时候就可以对读取的数据进行操作。同理,在写入流的时候也和读取时一样,大文件并不会一次性写入。这种移动数据的方式是非常高效的,尤其是对于大文件而言,使用流比等待将大文件全部读取完再来操作文件要快得多。

2013年度总结

忙碌的一年过去了,马上又要迎来同样忙碌的新年。在北京,加入了新的团队,认识了新的人,接触到新的事物,工作节奏比在上海明显要快,挺怀念上海的。

1.

展望马上过去的2013年,专业技术上正如前几天开团队总结会说的那样,并没有什么突飞猛进,一直在忙于实际项目的开发和打磨,纯技术性的研究反倒少了。不过眼界确实更开阔了,能更多的去思考产品本身,而不是局限于技术,期间有段时间还逢人便说自己是啥都干的打杂的。

刚加入360搜索团队时,图片搜索还刚刚起步,项目还显得有点简陋和粗糙。经过一年的努力,360的图片搜索与主要的竞品–百度图片搜索在功能上已是处于同一个量级了,在体验上,有些地方超越百度毫无压力。从最开始我们向百度学习,到现在百度在有些方面要反过来向我们学习。这期间,有人离开,也有人加入,大部分时间内,只有我一个前端,而百度的图片搜索前端团队有十来号人,对比下来,还是略有点成就感的。但我心里清楚,这其实还远远不够的,虽说人往往会否定掉自己的努力,但也正因为不满于现状,才能有继续前进的动力。

头像

雨夜带刀

前端开发工程师,技术宅,现居北京。

QQ群:202604349

雨夜带刀的开源项目

easy.js
一个简洁的 JavaScript 类库,集成了模块加载器,同时也有包含了常见的的组件库,可访问项目网站
seed
符合 AMD 规范的 JavaScript 模块加载器。
ecope
从 easy.js 组件库中移值过来的基于 jQuery 的组件库,简单实用,API 风格统一。
第 1 页,共 13 页12345...10...最旧 »