校招:阿里前端笔试题
收到笔试通知后恶补了几天阿里前端历年笔试题,巧的是这道题今年有同学做过,而且发到了北邮人bbs上(看来临阵磨枪还是有用的),现在贴上当时提交的代码。
水平有限,有错误烦请指点。
题目:
有dom结构如上,请用原生代码(禁用jQuery作答)实现以下功能:
(a)计算鼠标在mod-spm区域内的停留时长,data-spm不同视为不同区域
(b)尽量减少性能损耗
(c)重复进入计时累加
思路:
1.在每个块上添加事件:
onmouseover:鼠标停留该区域,触发计时方法fun();
onmouseout:鼠标离开该区域,触发取消计时的方法funstop();
2.在方法fun()中使用了HTML5 Web Workers属性,w3school的解释是:
web worker 是运行在后台的 Javascript,独立于其他脚本,不会影响页面的性能。
您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。
3.我们利用web worker将参数:区域的id传给后台文件worker.js处理计时;
id=0时,表示计时结束;
id !=0时,开始开启与此id相应的计时器,开始计时;
4.思路不难,实现的代码如下:
*/
//worker.js 后台文件
var timers = new Array();
var i = 0;
var id = 0;
function timedCount()
{
if(id == 0) return;
if(timers[id] == undefined){
timers[id] = 0;
}
setTimeout(“timedCount()”,1000);//每隔一秒累加器+1;
timers[id] ++;
}
onmessage = function(spmid){
id = spmid.data;
}



