手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表全部文章

湿疹2。。。

说起湿疹,实在是让我感觉很烦心,小朋友到现在还是有症状存在着,葯也配过也吃过只是觉得好象还没有恢复好。
这两天正在尝试吃中葯,还好,小朋友居然肯吃中葯,而且没有过多的抗拒,要知道中葯可是很苦的,虽然放了一点糖,但苦是必然的。吃过中葯的都清楚这一点,没吃过的,闻过那个味道也会清楚吧。
小朋友也知道要吃葯才会身体好,虽然吃起来苦一点,但还是肯吃的,好感动。也很伤心,只是现在也不知道他的过敏源到底是什么 ,以后估计还会吃苦头。
希望他早日恢复吧。

jQuery inViewport

做前端的用户都会想过如何做lazyLoad,其实很多时候都有很多想法,比如占位图片,TEXTAREA后处理,根据滚动条的位置显示图片等。
介绍介绍上面的说法,因为这些名词是我自己想出来的。。。和一些标准的前端讲法可能是不一致的。
1、占位图片,这个用的比较多一点,即在页面还没有全部加载完的时候,涉及到图片的地方,先用占位图片(1X1大小的图片进行放大)占好,不影响整个DOM的加载,等全部加载完后,再慢慢加载图片。这样的方式优点在于,不影响DOM加载,代码修改量也最小,缺点是,其实还是加载了所有的图片。。。
2、teatarea后处理,这个,被用的比较明显的应该算是淘宝的trademark的页面上,当时在抢购活动的时候就用上了这个技巧,trademark这个页面全是图片,如果全部读出来并显示,很可能一下子就下载大约3M左右的图片,如果用第一种办法,那么占用的流量就非常夸张。于是淘宝当时的页面源码里就很明显的内容就是第一屏是正常的HTML代码,第二屏开始,把每一层的内容都放在textarea容器里。当滚动条滚动的时候,即当textarea开始出现在页面中时,就把textarea中的HTML代码转化成DOM,显示在页面上。它的优点是,textarea中的内容在初次加载时,不会被当成DOM被页面所加载。因此事实上首次加载的时候,只有第一屏的内容。缺点是需要写很多JS。(和第三点也有关)
3、根据滚动条的位置显示图片,这个其实是现在很多网站采用的技巧了,即滚动条滚动到哪里,图片就开始加载到哪里。和第二点其实有点象,只是处理的结构不一样而已。
介绍完这个,那就好好介绍一下第三点的技术了,原文从这里来:http://www.zhangjingwei.com/archives/jquery-inviewport/。

晚上在微博上“拔赤”写了个lazyload插件,发现其中用到一个很有意思的方法”div.inViewportRegion()”,字面意思就是在可视区域内。

在网上找了找,发现这是YUI提供的一个组件,觉得很有意思。
http://gillserver.com/yui/api/dom-region.js.html

如果jQ里面也包含类似的方法,可以做很多事,于是GG了一下,发现国外的同学写过这种选择器,代码表现上更直观。

代码如下:

JavaScript代码
  1. (function($) {  
  2.    
  3.     $.belowthefold = function(element, settings) {  
  4.         var fold = $(window).height() + $(window).scrollTop();  
  5.         return fold < = $(element).offset().top - settings.threshold;  
  6.     };  
  7.    
  8.     $.abovethetop = function(element, settings) {  
  9.         var top = $(window).scrollTop();  
  10.         return top >= $(element).offset().top + $(element).height() - settings.threshold;  
  11.     };  
  12.    
  13.     $.rightofscreen = function(element, settings) {  
  14.         var fold = $(window).width() + $(window).scrollLeft();  
  15.         return fold < = $(element).offset().left - settings.threshold;  
  16.     };  
  17.    
  18.     $.leftofscreen = function(element, settings) {  
  19.         var left = $(window).scrollLeft();  
  20.         return left >= $(element).offset().left + $(element).width() - settings.threshold;  
  21.     };  
  22.    
  23.     $.inviewport = function(element, settings) {  
  24.         return !$.rightofscreen(element, settings) && !$.leftofscreen(element, settings) && !$.belowthefold(element, settings) && !$.abovethetop(element, settings);  
  25.     };  
  26.    
  27.     $.extend($.expr[':'], {  
  28.         "below-the-fold"function(a, i, m) {  
  29.             return $.belowthefold(a, {threshold : 0});  
  30.         },  
  31.         "above-the-top"function(a, i, m) {  
  32.             return $.abovethetop(a, {threshold : 0});  
  33.         },  
  34.         "left-of-screen"function(a, i, m) {  
  35.             return $.leftofscreen(a, {threshold : 0});  
  36.         },  
  37.         "right-of-screen"function(a, i, m) {  
  38.             return $.rightofscreen(a, {threshold : 0});  
  39.         },  
  40.         "in-viewport"function(a, i, m) {  
  41.             return $.inviewport(a, {threshold : 0});  
  42.         }  
  43.     });  
  44.    
  45. })(jQuery);  

来源:http://www.appelsiini.net/projects/viewport

简单测了下,不错,呵呵~

Demo:http://www.zhangjingwei.com/inviewport.zip

------EOF--
事后测试了一下,加载了这段的JS后,剩下对代码的处理就其实不多了,只需要BIND一个in-viewport就OK了,也算是比较方便。值得推荐,不知道啥时候类似功能可以直接进jQuery类库

Tags: jquery, inviewport, lazyload

杂谈吧

或许很多人在看到我博客的上面微勃图片的时候肯定很吃惊:求财付通0.5元支付宝返还。

事实上,在发出这条消息的时候,虫少侠(http://www.enjoyphp.com/)就在财付通上给我了,当然,我立马从支付宝返还了,还的当然不止0.5元。

这是上周日我在测试财付通支付的时候因为没钱也不愿意绑定号码的时候遇到的问题,所幸还是有朋友愿意提供了钱,而不是让别人误会我在诈骗。。。

------------------------------------------------------------------

第二个就是http://codeany.com/,这是一个基于PHPRPC的内容分析的接口,用网站上的介绍来说就是:在Codeany在线接口的帮助下,引入站内检索,正文提取,热词提取和SEO优化,智能垃圾评论判定等服务,就跟在饮料机上接一杯饮料一样简单.立即可用,无需开发!

当然我不能这样见解,准备好好看看htmlSQL这个玩意,感觉这个东西有点象YQL,但又不太一样,毕竟YQL是属于在线版本而且调用是有次数限制的,htmlSQL已经比较老了,现在不更新了,用laoliu.me站长来说,如果和phpQuery配合使用那是相当的HIGH呀,准备抽空看看。

-----------------------------------------------------------------

又在看读取excel文件的class了,确实需要这样的工具,所幸现在已经成型的Class非常多,很方便就能解决问题。比如phpexcel,黑黑。当然也有非常小的工具,只有几十行,但照样能够读取,只是功能差一点而已。不过,对于我只需要读取sheet内容的人来说就非常适合了。

----------------------------------------------------------------

听说DZX2快出来了,内置整合QQ Connect,这让很多站长很兴奋认为这样是会简化用户注册会带来大量的流量。我是觉得这玩意没什么大用处。。。。

Javascript1.6数组新特性和jquery的几个工具方法

前两天看的文章里刚刚说ECMA 262中的一些String特性,又正好看到一篇博客介绍一些其他操作的实现,比如foreach,这个对于PHP用户来说就太常用了,而以前在javascript中只能用for(i in arr)来实现,虽然都没有问题,但毕竟看起来怪怪的。

上次的文章在这里:Javascript中各种trim的实现,这次的文章引用自Javascript1.6数组新特性和jquery的几个工具方法

原文如下,其中会插入自己的内容,会特别标记

JavaScript 1.6 引入了几个新的Array 方法,具体的介绍见:New in JavaScript 1.6 。这些方法已经被写进了ECMA262 V5。现代浏览器(IE9/Firefox/Safari/Chrome/Opera)都已经支持,但IE6/7/8不支持。jquery的工具方法中提供了类似的功能。【膘叔:上次在讲trim的时候自己也测试过,确实IE8不支持,低于IE8的就更不用想了】

1、Array.forEach()和jquery的$().each()。在数组中的每个项上运行一个函数。类似java5 增强的for循环

JavaScript代码
  1. var ary = [2,4,6,8];  
  2.   
  3. // js1.6 Array.forEach方法  
  4. ary.forEach(function(i){alert(i);});  
  5.   
  6. // jquery的写法  
  7. $(ary).each(function(){alert(this);});  
  8. //还可以写成这样  
  9. $(ary).each(function(index,item){alert(item);});//index是元素的索引,item是该元素 
  10. //膘叔:这个相当于PHP中如下代码。。
  11. while (list($key, $val) = each($fruit)) {
        echo
    "$key => $val\n";
    }

 

2、Array.filter()和jquery的$.grep()。在数组中的每个项上运行一个函数,并将函数返回真值的项作为数组返回。简单的说就是用一个条件过滤掉不符合的数组元素,剩下的符合条件的元素组合成新的数组返回。

JavaScript代码
  1. var ary = [2,4,6,8];  
  2.   
  3. // js1.6 Array.filter()方法  
  4. var otherAry1 = ary.filter(function(item){return item>4;});  
  5. alert(otherAry1);//输出6,8  
  6.   
  7. // jquery写法(注意和$.each的区别)  
  8. // 此处你们函数中第一个参数是数组元素自身,第二个参数是数组元素索引  
  9. // 而$().each方法刚好相反,作者应该统一下。  
  10. var otherAry2 = $.grep(ary,function(item,index){return item>4;});  
  11. alert(otherAry2);//输出6,8 
  12. //膘叔:PHP中有类似函数,比如array_filter,也是可以通过callback来处理

 

3、Array.map()和jquery的$.map()。在数组中的每个项上运行一个函数,并将全部结果作为数组返回。这个方法非常强大,尤其是作用于DOM数组时(在abcc项目上用过,对每个查询模块DOM生成查询字符串)。简单说就是把每个数组元素运算的结果作为新数组元素(还是很拗口)【膘叔:php中有array_map,array_walk等】

JavaScript代码
  1. var ary = [2,4,6,8];  
  2.   
  3. // js1.6 Array.map()方法  
  4. var newAry1 = ary.map(function(item){return item+1;});//每个元素加1  
  5. alert(newAry1);//输出3,5,7,9  
  6.   
  7. // jquery写法  
  8. var newAry2 = $.map(ary,function(item,index){return item+1;});  
  9. alert(newAry2);//输出3,5,7,9  

4、Array.every()方法。检查数组元素是否都符合某个条件,只要有一个不符合返回false,否则返回true

JavaScript代码
  1. var ary = [2,4,6,8,10];  
  2.   
  3. alert(ary.every(function(item){return item>1}));//true  
  4. alert(ary.every(function(item){return item>2}));//false  

 

5、Array.some()方法。检查数组中元素是否符合某个条件,只要有一个符合返回true,否则返回false

JavaScript代码
  1. var ary = [2,4,,6,8,10];  
  2.   
  3. alert(ary.some(function(item){return item>9;}));//true  
  4. alert(ary.some(function(item){return item>10;}));//false  

 

最后给出 IE6/7/8的解决方案,让这些浏览器完美支持JS1.6的Array新方法。

JavaScript代码
  1. -function(){  
  2.       
  3. function applyIf(o, c) {  
  4.     if(o) {  
  5.         for(var p in c) {  
  6.             if(o[p]===undefined) {  
  7.                 o[p] = c[p];  
  8.             }  
  9.         }  
  10.     }  
  11.     return o;  
  12. }  
  13. applyIf(Array.prototype, {  
  14.     indexOf : function(obj, idx) {  
  15.         var from = idx == null ? 0 : (idx < 0 ? Math.max(0, arr.length + idx) : idx);  
  16.         for(var i = from, l = this.length; i < l; i++) {  
  17.             if(i in this && this[i] === obj) {  
  18.                 return i;  
  19.             }  
  20.         }  
  21.         return -1;  
  22.     },  
  23.     lastIndexOf : function(obj, idx) {  
  24.         var len = this.length, from = idx == null ? len - 1 : idx;  
  25.         if(from < 0) {  
  26.             from = Math.max(0, len + from);  
  27.         }  
  28.         for(var i = from; i >= 0; i--) {  
  29.             if (i in this && this[i] === obj) {  
  30.                 return i;  
  31.             }  
  32.         }  
  33.         return -1;  
  34.     },  
  35.     every : function(fn, thisObj) {  
  36.         var l = this.length;  
  37.         for(var i = 0; i < l; i++) {  
  38.             if(i in this && !fn.call(thisObj, this[i], i, this)) {  
  39.                 return false;  
  40.             }  
  41.         }  
  42.         return true;  
  43.     },  
  44.     some : function(fn, thisObj) {  
  45.         var l = this.length;  
  46.         for(var i = 0; i < l; i++) {  
  47.             if(i in this && fn.call(thisObj, this[i], i, this)) {  
  48.                 return true;  
  49.             }  
  50.         }  
  51.         return false;  
  52.     },  
  53.     filter : function(fn, thisObj) {  
  54.         var l = this.length, res = [], resLength = 0;  
  55.         for(var i = 0; i < l; i++) {  
  56.             if(i in this) {  
  57.                 var val = this[i];  
  58.                 if(fn.call(thisObj, val, i, this)) {  
  59.                     res[resLength++] = val;  
  60.                 }  
  61.             }  
  62.         }  
  63.         return res;  
  64.     },  
  65.     map : function(fn, thisObj) {  
  66.         var l = this.length, res = [];  
  67.         for(var i = 0; i < l; i++) {  
  68.             if(i in this) {  
  69.                 res[i] = fn.call(thisObj, this[i], i, this);  
  70.             }  
  71.         }  
  72.         return res;  
  73.     },  
  74.     forEach : function(fn, thisObj) {  
  75.         var l = this.length;  
  76.         for(var i = 0; i < l; i++) {  
  77.             if(i in this) {  
  78.                 fn.call(thisObj, this[i], i, this);  
  79.             }  
  80.         }  
  81.     }  
  82. });   
  83. }();  

------EOF----

 

最后这一段有事没事可以参考一下哦,毕竟这些都是可以拿来做参考的,比如象最后一个foreach,可以好好学学这些代码哦。

最后,var evens = [i for each (i in numbers) if (i % 2 == 0)];,看到这个,有没有感觉很象python的写法???这个是javascript 1.7中的写法了,看看这里的介绍:https://developer.mozilla.org/en/JavaScript/Guide/Predefined_Core_Objects#Working_with_Array-like_objects

Tags: jquery

表弟结婚

时间果然是无情的,过去了就永远过去了。表弟比我小六岁,如今也成家了。祝福他永远幸福。愿天下有情人都不是同父异母的兄妹,还是终成眷属吧

自 WAP 发表