“返回顶部”的应用相当广泛,在典型的超长页面里,它几乎是必须的。比如新浪微博里,页面的长度因数据的加载而长达数千像素,它的“返回顶部”并没有太多特别之处,唯一有趣的是那个向上箭头是有两个字符组合而成而并非图片。正是这种细微之处,体现了前端的创想力以及对页面性能的进益求精。
虽然我的题目是插件,但其实内容多半和插件没半毛钱关系…
“返回顶部”的应用相当广泛,在典型的超长页面里,它几乎是必须的。比如新浪微博里,页面的长度因数据的加载而长达数千像素,它的“返回顶部”并没有太多特别之处,唯一有趣的是那个向上箭头是有两个字符组合而成而并非图片。正是这种细微之处,体现了前端的创想力以及对页面性能的进益求精。
虽然我的题目是插件,但其实内容多半和插件没半毛钱关系…
最近有空可以让我静下心来看看各种代码,function与感叹号的频繁出现,让我回想起2个月前我回杭州最后参加团队会议的时候,@西子剑影抛出的一样的问题:如果在function之前加上感叹号 (!) 会怎么样?比如下面的代码:
!function(){alert('iifksp')}() // true
在控制台运行后得到的值时true,为什么是true这很容易理解,因为这个匿名函数没有返回值,默认返回的就是undefined,求反的结果很自然的就是true。所以问题并不在于结果值,而是在于,为什么求反操作能够让一个匿名函数的自调变的合法?
起初今天碰到的字符串拼接的性能问题并不是关于JavaScript的,而是有关PHP的,名为PHP中的高性能字符串连接( High-Performance String Concatenation in PHP )。众所周知,PHP是用“点”来连接字符串的:
$str = 'a' . 'b'; $str .= 'c';
并且和JavaScript类似,PHP也可以通过Array来拼接字符串:
$str = implode(array('a', 'b', 'c'));
问题就是,当拼接达到上万的数量级之后,哪一种性能更好呢?
译自同名IEBlog:IE9, Opacity, and Alpha,关于IE9和透明度兼容CSS和JS代码。日期是昨晚(8/17)6:15。
以下为我的译文:
IE9引入了 CSS3 Color Module 的支持,包括其中已普遍使用的透明度( opacity )属性。如同我们已经完成的其他基于标准的特性,为了在其他浏览其中的相同的标记能工作在IE9的标准模式下,IE9实现了透明度。
IE8以及其之前的版本实现了另一种替代的机制,使用IE特定的滤镜( filter )属性中的 alpha filter 来应用透明度。这就形成了一个兼容性的挑战,因为IE9标准模式只支持 opacity,而不支持 alpha filter ( IE9的兼容即怪异模式,7和8仍然支持 alpha filter 但不支持实现opacity )。
对于使用最佳实践特性检测法的站点,兼容性不是问题。它们会检测 opacity 在IE9中是否被支持并使用 opacity 替代滤镜。问题在于那些使用了浏览器检测的站点以及那些错误的假设了IE总是使用透明度滤镜而不是opacity并在脚本中只使用滤镜的站点。那些站点里的web页面,在IE9默认的9的文档模式下,透明度效果会失效。解决方法是先检测基于标准的 opacity 特性,然后是浏览器特定滤镜,就如同我们之前文章里描述的那样。
整理行装的时候,瞥见这张一年半前的照片,然后在柜子了浏览了一下这些见证过往的书籍。原来也曾这么这么地努力过:)。现在,书更多了一些,有几本书借出去了,所以合影似乎没多大的意义。所以仍旧用这张照片,怀念下阳光里,一本书,一首曲子的时光。
以前总是看别人的书评。当然在不看书评前,自己总是乱买书,结果总是有几本书比较糟糕。但好在数量不是很多。在即将重新启程的当前,自己也该写个书评总结回顾下。题外话,书看多了,也没啥好的囧。
这段时间,怿飞的博客上有一篇用 JavaScript 解数学题,代码很简练优雅。于是突然想用C写写看,因为很久没写,就权当是练习也挺不错啊:)
题目是这样的:一个六位数,分别用2,3,4,5,6乘它,得到的五个新数仍是由原数中的六个数字组成,只是位置不同,则此六位数是多少?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include <stdio.h> #include <string.h> #define DIGIT 6 #define MULTI 5 void swap( char *a, char *b ){ int tmp; tmp = *a; *a = *b; *b = tmp; } void bubbleSort( char arr[] ) { int i,j; for(i = 0; i < DIGIT; i++){ for(j = 0; j < DIGIT-1; j++){ if ( arr[j] > arr[j+1] ){ swap( arr+j, arr+j+1 ); } } } } int main(){ int num, numCopy, i, j, ind; int mul[MULTI] = {2,3,4,5,6}; char indStr[DIGIT+1]; char StrToCmp[DIGIT+1]; for( num = 1000000/6; num >= 100000; num-- ){ numCopy = num; for( i = 0; i < DIGIT; i++ ){ StrToCmp[i] = numCopy%10+48; numCopy /= 10; } StrToCmp[DIGIT] = '\0'; bubbleSort( StrToCmp ); for( i = 0; i < MULTI; i++ ){ ind = num * mul[i]; for( j = 0; j < DIGIT; j++){ indStr[j] = ind%10 + 48; ind /= 10; } indStr[DIGIT] = '\0'; bubbleSort( indStr ); if( strcmp( StrToCmp, indStr )){ j = 0; break; } } if(j){ printf( "This number is %d\n", num ); } } getchar(); return 0; } |
这段短短50行的JS滑动窗效果,算是我的第二次JS编写(2009-04-06)。最后作为了毕业论文网站的一个小插曲。
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | <script type="text/javascript"> var currentTab = "tab_1"; var widthUnit = 670; var maxTab = 7; function srollArrow(direction,scrollSection){ if(direction=="left"){ if(currentTab.split("_")[1]=="1"){ nextTab = "tab_"+maxTab; }else{ var nextTabNum = parseInt(currentTab.split("_")[1])-1; nextTab = "tab_"+nextTabNum; } scrollTab(nextTab,scrollSection); }else{ if(currentTab.split("_")[1]==maxTab){ nextTab = "tab_1"; }else{ var nextTabNum = parseInt(currentTab.split("_")[1])+1; nextTab = "tab_"+nextTabNum; } scrollTab(nextTab,scrollSection); } } var moveManager = {begin:0, end:0, change:0 ,finalPos:0 , time:18.0, limit:8.0}; function scrollTab(tabName,scrollContent){ if(currentTab == tabName){ return; } lastTab = currentTab; currentTab = tabName; document.getElementById(currentTab).className = "active"; document.getElementById(lastTab).className = "inactive"; moveManager.begin = parseInt(lastTab.split("_")[1]); moveManager.end = parseInt(currentTab.split("_")[1]); moveManager.change = (moveManager.begin - moveManager.end)*widthUnit; moveManager.finalPos = -(moveManager.end-1)*widthUnit; oScrollContent = document.getElementById(scrollContent); nowLeft = parseInt(oScrollContent.style.left); move(); } function move(){ if(moveManager.time<=moveManager.limit){ oScrollContent.style.left = moveManager.finalPos + "px"; moveManager.time = 18.0; return; } nowLeft += parseInt(moveManager.change*1/moveManager.time); moveManager.time-=0.9; oScrollContent.style.left = nowLeft + "px"; setTimeout("move()",15); } </script> |
挖出了一些很怀念的代码。
这是一段我最早写的JS代码,大概时间是一年半以前的事了,实现的是一个菜单抖动的效果。看看这些代码,总是能回想起刚开始写JS时的兴奋之情。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <script type="text/javascript"> var currunt=0 function dis(menu_number){ currunt=menu_number; width=30; speed=5; positionX=0; preSpeed=0; flag=1; document.getElementById("content"+menu_number).style.display="block"; hidRest(menu_number); } function hidRest(menu_clicked){ var MENU_LENGTH=6; for(i=1;i<=MENU_LENGTH;i++){ if(i!=menu_clicked){ document.getElementById("content"+i).style.display="none"; } } } function shake(){ if(flag==1){ speed=1-speed*0.8 positionX+=speed; positionX-=preSpeed; document.getElementById("d"+currunt).style.left=positionX if(Math.abs(speed)<1.0){ document.getElementById("d"+currunt).style.left=0; flag=0; } preSpeed=speed; setTimeout("shake()",50) } } </script> |
第一篇文章总是要有些来龙去脉,就如同第一个程序总是要来个Hello world!一样。
以前不止一次搭建过wordpress,但最终都宣告失败。原因多种多样,忙碌者有之,兴尽者有之,或者,无墨者亦有之。但终究是不想放弃的。
过去的几年,学了很多,但都疏于梳理,以至荒废。
VB C C++ Java C# XHTML+CSS JavaScript PHP ActionScript Ruby Perl
Photoshop Flash Fireworks Illustrator CorelDRAW AutoCAD 3DsMax Maya
渐行渐远的内容,以及愈发冗长的行径线路,都充斥着迷惑。当再次回首时忽然有一种冲动,摘记、梳理、铭记,一路走来,挺有趣的。
1 2 3 4 5 6 7 | /*C programming language*/ #include <stdio.h> int main() { printf("Hello,world!\n"); return 0; } |