冷静的思考是解决问题的最佳途径……
今天终于出了一整天的大太阳,热水器里有水了,晚上回家洗了个澡,衣服一脱,发现怀孕了,起码3个月大,要打胎了。
时间过的真快,已经回家一个多月了,这么长的假期并不是个好事情,很多坏习惯都开始养成了。
In: javascript
16 二 2010曾经有次在一个jQuery交流群里,有人问,能不能自定义事件,然后监听事件,比如监听一个变量的变化,当时我屁颠屁颠的给别人说,这个不大可能。现在正是为我当时的无知和逞能感到羞耻,以后再也不轻易的否定一个事情,除非我有完全的理由否定,自己不知道,不是否定的理由.
标准浏览器(firefox,chrome,safari,opera等)的实现非常简单,自然,有一个document.createEvent()的函数来专门创建自定义事件,使用起来也很简单,等会儿看代码一看就明白了。
var event = document.createEvent(type);
简单的说来,自定义事件到激发这个事件,需要document.createEvent(),event.initEvent(),element.dispatchEvent()这三部,分别是创建事件对象,初始化事件对象,触发事件。先给个简单的例子。
function foo1(){
console.log("foo1 is execute");
}
function foo2(){
console.log("foo2 is execute");
}
var ev=document.createEvent('HTMLEvents');
ev.initEvent('fakeEvent',false,false);
document.addEventListener("fakeEvent",foo1,false);
document.addEventListener("fakeEvent",foo2,false);
在标准浏览器里的console里执行 document.dispatchEvent(ev); 就可以看到console里显示出来了 foo1 is execute和 foo2 is execute
自定义事件已经实现了,那么怎么实现监听某个变量的变化呢?我们可以使用一个特定的函数来给变量赋值,在这个函数中,除了执行给变量赋值的操作外,还激发事件。为了约束程序员直接对变量复制,使用下面的代码来强制程序员不能直接对该变量赋值
var idChange=function(){
var id=1;
return {getId:function(){return id;},
setId:function(a){id=a;
document.dispatchEvent(ev);
}}
}();
这样就只能通过idChange.setId()的方法对id赋值,通过 idChange.getId()来获得id的值,并且在赋值的过程中激发事件。
在标准浏览器里,现在已经实现了目标,遗憾的是IE并不支持document.createEvent()的方法,在JavaScript权威指南第五版中,作者给出IE支持的 document.createEventObject()和event.fireEvent()方法,但是经过测试,fireEvent并不能用于自定义事件,传给它的参数只能是在IE已经定义了的事件(MSDN文档写的不明不白的,看的很恼火)。在Dean Edwards的博客中看到了一个方法这里就直接拿来用了,性能方面值得考虑,请阅读这篇博客下面的评论部分,就会知道怎么改进这个方法的性能,为了方便,我这里直接用他博客中给的方法了,为了更直观,也添加了一个addLog()函数,来直接在页面中记录事件的发生, 为了配合addLog函数,页面中要有一个id为 log 的div ,具体代码如下:
function foo1(){
addLog("foo1 is excute");
}
function foo2(){
addLog("the id is "+idChange.getId()+" now!");
}
if(document.createEvent){ //This is for the stand browser.
var ev=document.createEvent('HTMLEvents');
ev.initEvent('fakeEvent',false,false);
document.addEventListener("fakeEvent",foo1,false);
document.addEventListener("fakeEvent",foo2,false);
}else if(document.attachEvent){ //This is for the damn IE
document.documentElement.fakeEvents = 0; // an expando property
document.documentElement.attachEvent("onpropertychange", function(event) {
if (event.propertyName == "fakeEvents") {
foo1();
}
});
document.documentElement.attachEvent("onpropertychange",function(event){
if(event.propertyName == "fakeEvents"){
foo2();
}
});
}
function addLog(log){
var logDiv=document.getElementById('log');
var p=document.createElement("p");
p.appendChild(document.createTextNode(log));
logDiv.appendChild(p);
}
var idChange=function(){
var id=1;
return {getId:function(){return id;},
setId:function(a){
id=a;
if(document.dispatchEvent) document.dispatchEvent(ev);
else if(document.attachEvent) document.documentElement.fakeEvents++; //This for IE
}}
}();
现在我们就已经实现了文章开头想要达到的需求,在浏览器地址栏里执行javascript:idChange.setId(8)就可以看见效果了。监听某个变量的变化了,你可能会想到,干嘛不直接在idChange.setId()中直接执行 foo1(),foo2(),是的,这样也可以实现,但是这样不是真正的事件,如果你在代码中多处需要注册监听器到这个自定义事件,并且随时需要取消注册,显然这种事件的方法更容易管理一些,另外事件还有另外的好处,代码更稳定,请参看上面给出的Dean Edwards的那篇博客Callbacks vs Events
In: javascript
11 二 2010相信写js的,都知道window.onload吧,但是并不是每个人都知道DOMContentLoaded,其实即使你不知道,很有可能你也经常使用了这个东西。
一般情况下,DOMContentLoaded事件要在window.onload之前执行,当DOM树构建完成的时候就会执行DOMContentLoaded事件,而window.onload是在页面载入完成的时候,才执行,这其中包括图片等元素。大多数时候我们只是想在DOM树构建完成后,绑定事件到元素,我们并不需要图片元素,加上有时候加载外域图片的速度非常缓慢。
我们可以写代码来简单测试一下这两种事件:
if(document.addEventListener){
function DOMContentLoaded(){
$("#status").text("DOM is ready now!");
}
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
}
window.onload=function(){
$("#status").text("DOM is ready AND wondow.onload is excute!");
}
<h1> DOM READY's TEST </h1> <img src="./delay.php" alt="delay image" /> <p id="status"> DOM is not ready </p>
为了清楚的看到效果,特意写个简单的php文件,提供图片延时加载,代码如下:
sleep(5);
header('Location:./delay.png');
在firefox和chrome以及opera中都可以清楚的看到,在图片未载入之前,id为status的段落已经显示了“DOM is ready now!”,然后等5秒钟后,图片加载完成后,此段落显示”DOM is ready AND wondow.onload is excute!”
此代码并不能在IE中工作,一方面是因为我使用的是addEventListener,开始前做了个判断,不存在此方法则不添加此事件。这样做的原因是IE确实是不支持DOMContentLoaded这个事件的,为了代码的简单,就没为IE写了。虽然IE没有此事件,但是我们却可以来模拟这个事件,常见的方法是判断element的doScroll如果成功则说明DOM载入完成。
常见的库中都提供了此事件的兼容各个浏览器的封装,如果你是个jQuery使用者,你可能会经常使用$(document).ready();或者$(function(){}) 这都是使用了DOMContentLoaded事件
合理使用DOMContentLoaded可以使页面更早的响应用户操作,希望IE早日原生实现这个事件,或者希望IE灭亡
In: 生活
28 一 2010现在寒假在家,我家在偏远乡村,无法安装宽带,于是我很寂寞,在寂寞了大概10天后,终于忍不住拿笔记本连接我的手机,通过GPRS cmwap 接入点上网,因为我的卡是cmwap不限流量的。
这篇文章是测试一下,在这种网络环境下是不是能发出博客。目前发博客的这个页面,除了富文本编辑器不能显示外,其他的都正常。
另外在尝试使用cmwap上网的过程中,发现了一个很好用的东西。我以前假期也用这种方式上过网,一般是通过MPT+动感大挪移来实现的,这次,我的电脑里面没动感大挪移,通过简单的随着移动的代理:10.0.0.172:80 的方式,只可以上QQ,却不可以打开网页,opera显示的大概意思是:WAP网关未授权。在QQ上找人,传给我一个动感大挪移,试了好几次,都失败了,于是我就在QQ上找人说说话消磨时间。突然想到,动感大挪移也就是在本机上建立了一个代理服务器,我平时爬功夫网用的GAppProxy也是在本地建立了一个代理服务器,于是我把GAppProxy的配置文件里local_proxy设置为:10.0.0.172:80,然后尝试了一下,opera和firefox通过GAppProxy都可以打开网页了,但是chrome不知道为什么不可以。
至于为什么会这个样子,目前本人知识储备不足,望有人来解释一下。如果你也在使用这种方式上网,不能打开网页的话,不妨尝试一下,GAppProxy,不知道这是个什么东西的人,自己去google。这种方式我觉得比我以前用的动感大挪移,虽然数据到美国去跑了一趟,但是这个代理服务器只为你一个人服务的,所以处理速度会快多了。现在我除了不能打开视频,大部分网页,我都可以正常访问,看网易新闻,上豆瓣,上cnbeta都没问题了,遗憾的GReader怎么也打不开。
In: 生活
5 一 2010今天打算在我的Q5 运行一个 Hello Android 程序了,一大早起来,拿出好久没用的Q5,打开,发现Android Market报错,很多地方报错,于是决定重新刷机,在论坛发现有12月28日最新更新的固件,就拿来刷了,结果刷机后Android Market 无法登陆,连不上google的服务器,不知道为什么。于是打算折腾91助手来装程序。
在91助手官方网站上下载了最新的91助手,装好驱动,但是怎么折腾都连接不上,每次刚显示连接成功后两秒就要断掉。然后在论坛看到有这样一个帖子,不用USB连接,通过WIFI连接。我以为那个CMD窗口要hold住,但是每次运行完后就马上就关掉了,试了好几次,91助手也没什么反应。
于是打算刷回11月30的版本试试看。(这里下载固件).重新装驱动,连接91助手,还是未果,又在网上看到有说新版91助手不行,要用V1.0.0.60版本的才行,于是又在网上找到这个版本的下载,试了一下,还是不行,还是连上马上就断掉,就在这个时候,试论一下,那个论坛帖子给的不用USB的连接方法,成功了。
于是,我的智器Q5 Android 连接91助手的方案是:
打开91助手,然后在双击那个adb.bat 等一会儿就可以了。有了91助手,安装本地APK文件就很简单了,前提是,在Android设置里面打开允许未知源,看一下就会了,这里就不用说了。
如果你也遇到了相同的困难,不妨试试我这个方法,但并不一定能解决。我的操作系统是WIN7
另外如果只是为了安装本地APK软件的的话,只要能进Market的话,不用91助手也是可以的。可以在Market里面搜索AppsInstaller 这个软件,然后安装,再把 APK 文件放在SD卡的根目录里面,打开这个软件,就可以在Android 上安装本地的APK 软件了。同样前提也是在Android中打开允许未知源。
In: 生活
31 十二 200909年到头了,再过几个小时,就跨入10年的门槛了。
09年对于我来说是奋斗的一年,也是收获的一年。
这一年,我明白了很多东西;这一年,我付出了很多努力;这一年,我懂得了如何去奋斗;
这一年,我找到了非常满意的工作;这一年,我第一次让自己开发的应用真正在网上运行;这一年,我选择了未来的路。
去人人网,翻了我上一年这个时候写的日志,发现全TM的是感情,好吧,上一年为这个事情纠结着,这一年也纠结过,但是现在已经不再纠结,过去就过去了,我喜欢我现在的这种生活状态。
这一年,我开始真正的开始WEB开发,开始使用PHP,JavaScript,css这些玩意。
最开始只会PHP。写出一些没有一行js的网页,还异想天开的想靠这种用户体验极差的网页开发校内应用。不过这个想法也并不是全部垃圾,毕竟有了这个想法,才买了虚拟主机,才有了现在的这个blog。
然后暑假快开始的时候,接触了jQuery,发现这个写前端真方便,于是又萌发了写校内应用的想法(我怎么这么爱校内啊。。。),这次是想开发RIA体验的应用,结果做出来自我感觉良好,不过因为没看清校内的条例,还是没通过。而且拿给别人一看,就爆出一堆BUG,好吧,凭这点能力是开发不出好用户体验的东西的。
于是开始慢慢关注用户体验,开始关注国内几个有名的UED团队的blog。
上学期参加了腾讯的实习生面试,没想到一面面试官喜欢我,加了我的QQ,他是做前端的,而那个时候,我的前端技术差不多等于0,很汗吧。也是这个时候,我才意识到大公司是专门有团队做前端的,我才意识到用户体验其实是非常非常的重要。
然后就下半年参加了腾讯的面试,那个面试官内部推荐的,一面挂了,然后网易游戏的,一面挂了,lightinbox,一面挂了。然后阿里巴巴,拿到offer。也就是幸运了一把,好吧,我非常满意。
后半年,我喜欢上了一个姑娘,但是未果,对,又是未果,发生在我身上太正常了。
我走上了WEB前端这个路了,现在正在为未来的工作做准备。
好吧,09回顾差不多就这些了,下面是10年展望。
10年对于我来说,肯定是个变革的一年,我的身份将发生变化,从学生变成码农。
长期计划不适合我,我还是适合TO DO LIST上的短期计划和calendar上的事件提醒。所以我不会写具体计划。
大概讲来,10年,我要努力非常快的适应工作环境,适应这个职位。在技术上,我要努力,成为一名称职的前端工程师,即使是做码农也要敬业嘛。
10年,我要读尽量多的书,WEB是个快餐,同时我们也需要纸质的书,这是09年我的一些感悟。而且涉猎面要光,多读一些人文社科类的,而不仅仅是技术类的。我想自己挣了钱后,买书就不要心疼了吧。当然读书要读好书,书中并不都有黄金屋的。
10年,我要学习烹饪技术,虽然现在我什么都不会,但是我要学习,好吧,也许讲烹饪有点大了,应该说,学习做饭的。不管怎么样,反正我会去尝试。
10年,要拿自己挣的钱,给爸妈,姐姐,外甥女买礼物。
————————————————————————-
10年注定会有伤感的季节,就让他伤感吧,人生能有几次这样的时候。刚才一个朋友问我决定什么时候回去了没,我说还没有。她说,你可以再多呆几天,反正明天来这里的时间也少了。想想也是,在这里的时间不多了,已经有点小伤感了。
好吧,到此为止,祝所有看这篇blog的人,Happy New Year!新的一年,万事如意,心想事成!
特别的,祝普特英语听力10年快速发展,成为中国最好的英语学习网站,没有之一。这是一个我必须感谢的公司。
In: WEB| javascript
31 十二 2009刚刚读完了《高性能网站建设指南》,作者给出了网站前端优化的14条建议,第一次系统的了解到了前端性能优化需要做的事情。
简单说来,这14条建议是下面这些:
作为前端开发人员,应该具有前端优化的技能,这些优化花不了多少成本,却相当有效,比改进后台代码的某个算法带来的性能增强性价比要高多了。
网站打开速度快才是王道,速度是用户接触到这个网站的第一体验!!!
上面这些指导原则在实际生产的时候都是需要好好分析的,看自己的网站适合怎么样。
昨天,胡老师以八周年的名义拉大家聚在了一起,看电影,吃火锅,K歌,玩的很开心。
先去看了《十月围城》,在王府井影城,我发现王府井影城就是地段好而已,影院硬件条件没这边SM广场的万达好,还要比这边贵。十月围城是我今年看过最好的华语电影了,无论是动作场面,细节,还是故事情节,都是我今年看到的最好的华语电影,当然还有几个真热播的电影我还没看到,在等DVDrip,因为本人穷,看电影基本靠emule。 只有特别好看的电影我才会去影院看,但是看网上的评论看来,那几个电影是无法超越十月围城了。
然后在重庆刘一手火锅店吃了火锅,最幸运的是,我们总共吃了350,然后拿发票刮奖,竟然中了500块,第一次看到这么大的餐饮发票奖。话说上次我们去崇州玩,我也刮中了个5块的。这预示着普特来年会好运连连吧。希望我们大家都沾点这个好运,来年都开开心心的,实现自己的梦想。
最后在ATT K歌,不得不说,这位童鞋的歌唱的是专业级别的,太棒了,实在是佩服佩服。在他面前,我都不敢唱了,但是出来玩,总要唱的,我也唱了几首,童鞋们还是给了掌声,不知道是不是安慰我- -!
在普特呆了两个月左右,学到了很多很多东西,结实了胡老师这样很有思想的人,还有一群聪明,优秀的同事们。在普特的这段日子里,有段时间因为一些与普特无关的事情,我过的不开心,大部分时间还是很开心,第一次写了个可以发布到网上,给很多人用的应用,自己还是蛮开心的,虽然知道还有很多东西可以改进的,自己做的远远不够。
在这里,因为要写供很多人用的东西,所以开始真正的关注用户体验,然后就写了很多JS,这也是我走上前端这个路的垫脚石吧。
这个学期和普特这个团体一起,去青城山爬山,去崇州文景江泡温泉 爬山,还有昨天的看电影,K歌,回想起来是都是甜的。
马上10年就要到了,在这里祝普特英语听力越办越好吧,希望这个网站能成为国内最好的英语学习网站,没有之一,因为现在就是之一。
09年马上就结束了,也该好好想想,写个总结,还有对10年的展望,这些都在未来的几天来完成吧。
In: 生活
27 十二 2009是的,圣诞节的时候我是在西岭雪山上的,有部分童鞋收到了我在西岭雪山发出的短信,山上信号确实太差,发不出短信,只发出了有限的几条。
熊猫金卡就去过一次熊猫基地,10年就要过期了,所以和两个舍友商量去西岭雪山玩,加上前段时间西岭雪山的滑雪场在维修,网上挂的通知是25号试运营,于是决定24号过去,25号准备去滑雪,但是事实上,25号并没有开放滑雪场,但是西岭雪山的景色还是很漂亮的,弥补了没能滑雪的遗憾。
下面讲讲我们的行程,希望对想去西岭的人有点帮助。
24号早上,8点多点到金沙车站,9点有车直达西岭雪山,滑雪场山脚下(滑雪场在后山,想爬山在前山),当然也可以在前山就下车。不巧的是,成温邛高速因大雾,限行,等了好久,9点半车终于到了,进高速的时候又排队,等到了西岭镇,已经12点了,因为我们第一天是要爬山的,所以就在西岭镇就下车了,准备去前山。
在西岭镇上吃了午饭,4个人吃了60多块钱,不算贵,可以接受。然后坐那红面包车,10块钱一个人到前山上去,也就是地图上茶地坪的地方,海拔1260.上一张前山地图吧。
大约1点半的时候,开始爬山,海拔1700以下的地方基本上见不到雪,不过山水也很漂亮,水很清很清,很久没见过这样清的水了。还有很多不大的瀑布,都很漂亮。
超过1700以后,就有不少的冰雪了,这个时候最好穿上冰抓,就是一个铁东西,穿在鞋子上,下面有两个大尖尖,插进冰里面,防滑,在山下可以买到,一般10元一对,租的话5块,后来听说还价,5块一对也可以买到。
下午4点多的时候,我们到达了桂花林,我们上山前,问送我们去山上是司机我们应该怎么安排时间,司机给我们说,比较理想的是当天下午到达大山门,但是到了桂花林,接待站的老板告诉我们,上面的大山门没开,那个也是他们家开的,现在是淡季,那个店子就没营业,要是不想再往上爬了,晚上就只能住在这里了。要说的是,那个地图上实心远点才有住宿的地方,空心的地方不能住宿。看来我们也就只能这样了,只好开始脱下冰抓开始休息了,不巧的是,后面来了我们学校大三的一个班的人,他们的目标也是大山门,他们不想在桂花林休息,就拖着老板和他们一起上去开那个店子,我们说我们一起上去,老板不干,让我们帮她看店子,她喊人上来给我们做饭,发电(从桂花林开始,就没电了,晚上需要发电)。结果等到天黑了,老板娘叫的老板才上来。另外又来了三个大二的我们学校的男生和其他学校的两个女生。然后大家就一起开始玩杀人,等到10点半左右才吃到饭。由于我们帮老板看店子,烧水,老板送了一个菜。
第二天一大早就出发继续爬山,本来打算是7点出发的,但是7点,光线还是很暗的,加上大家都还没准备好,等到快8点的时候才出发。爬到大山门的时候,遇到那个班的人也准备出发。在大山门,我们又吃了点自己带的干粮,因为我早上起来没怎么吃东西,所以还是饿的很难受的。
然后继续向上,我们的目标是到阴阳界,想去看看那儿的奇观。这段路比较痛苦,路上的那些空心圆点的地方都没注意到,经过了很长时间,到了金猴峰,总算感觉到快看到希望了,由于爬到速度一直都不快,所以也不算太累。具体爬了多久我记不得了,手机没信号就没开机。
在金猴峰休息了差不多15分钟后,继续前进,阶段目标:红石堡,在那里有两个路可以到阴阳界,一个比较陡,一个比较缓,我们打算到那里后看体力情况选择路。
差不多12点的时候到了红室堡,在那里把已经空的水杯装满,这里的太阳很好,晒晒太阳,很舒服。这里休息后,感觉体力还行,就选择了那个陡的路段了。这个爬到还真是辛苦啊。不过既然选择了,就要走下去,咬咬牙,坚持坚持,在1点左右的时候终于到达了阴阳界,阴阳界的景观真是漂亮啊,一边艳阳高照,一边云雾缭绕。上张照片吧。
好吧,剩下的就是到日月坪去坐索道了,从山上坐到山脚要分两段,共90块钱,第一段下去是滑雪场,因为滑雪场没开放,所以就直接去坐第二段下山了。然后晚上9点半回到了学校。
爬西岭雪山需要注意到地方是,最好自己带个大点的水杯,住宿的时候,开水是免费供应的,可以装满,因为海拔比较高的地方,是没水的,只有接待站才有水,很多是要收钱的。另外最好带点可以快速补充能量的东西,确实累。
另外,可以准备点膏药,那种缓解劳累酸痛的,第一天晚上睡觉的时候贴在膝盖上,膝盖就会舒服点,我就是这个样子的,也是参考了前人的意见。
照片我会上传一部分到我的豆瓣相册,等过段时间大家可以来围观。
In: 生活
21 十二 2009阿里巴巴前几天在成都举行了第三届网商会,我们作为即将加入阿里巴巴的人,去做了志愿者,这几天来,虽然很累很累,但是还是有很多感受的。
我们主要是给游客讲解怎么使用阿里巴巴这个平台,和帮助游客找展区内的商品的供货商。
我遇到了一些马云的粉丝,其中一个给我说,今天起的不够早,没看到开幕式,没有见到马云,很遗憾。我告诉她,你不用遗憾了,马云今天没来这个地方,开幕式也不在这个地方。另外,展区里的大屏幕播放马云以前网商会的时候演讲的片段的时候,总是会吸引很多很多人驻足围观,不管重复放多少次。
我也遇到了有实体店铺,想在网上找货源,网上开店的人。看的出来他对网上交易的担心,同时又非常想尝试一下这种方式,觉得这个是有利润可图的,是很时髦的。我耐心的给她讲解了这么个操作过程,阿里巴巴的平台优势,以及支付宝这个交易担保方式。希望他能勇敢的尝试网上交易。
我还遇到了已经开的有网店,已经很熟悉阿里巴巴和淘宝的操作方式,来网商会找优质供货商的,看的出来他们对阿里巴巴的信任。
还有高级卖家,从广西飞到成都,就为了来参加网商会,结果给我们说,没找到他想要的供货商,没有和他胃口的,然后还像我们咨询怎么才能参展,他想作为参展商参加下次的网商会。
也有进货商像我们抱怨在阿里巴巴上遇到的不讲诚信的供货商,我觉得这种情况是没法避免的,那么多供货商,很难保证都是优质的。
我觉得我最大的感受是,感觉到了,还是有很多很多卖家信任阿里巴巴,很多很多卖家都是在这个平台的帮助下做生意。以前在网上看到过阿里巴巴的负面新闻,现在我认为这个也没什么,不管怎么做,一个产品都不可能兼顾所有人的胃口,只要能够真正的帮助到很多商家,我觉得就足够了。
我感到羞愧的是,我自己还不熟悉阿里巴巴的几个产品,有时候无法良好的给游客讲解,有可能我已经误导了一些人了吧…
另外干这种活确实很累,一站一整天,脚很疼。
Hi! 我是一名电子科大的学生,这个blog用来分享WEB相关技术的博文,我还是一只菜鸟,但是我相信随着不断的知识积累,我会成长为一只大鸟。同时这个blog也会记录下我生活的点滴,为我留下美好的回忆。