博客 - 存档:五月, 2008

匆忙的生活着

2008-05-28 下午 - 生活点滴 -

  最近过得很匆忙,感觉好像在跟时间赛跑。既赢不了,又不想输,所以每天都绷得很紧。一个小时,两个小时,很快…

  几乎另我害怕,我知道我在拼,我的确需要拼。自己目前状况也许还离奋斗的目的地还有相当长的一段距离。这里指的只是近两年的目标,也许两年后的我又会觉得这有些不够了。人生注定就是一次又一次的奋斗吧!

  窗外的天空很幽暗,乌云飘得很快,压得很低,仿佛就在头顶!大家都感觉怪,跑到窗边来看天空。今天是天气确实有点怪。半个月前,四川地震。近些天又传深圳有大量的蟾蜍移动。哎,其实有啥好说的啊!日子还是要过啊!

No Comments »

利用js实现静态分页

2008-05-25 下午 - JS/Ajax/AS -

  由于工作上的需要,做了个用js分页的效果。不牵涉到服务器端的语言,所以只有用js来分页。

  把demo提供给大家,原本调xml文档的部分,这里就不提供了。

下载: code1.html
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>js实现静态分页</title>
  6. <style type="text/css">
  7. table.dynamic tbody tr{ display:none;}
  8. table.dynamic tbody tr.show{display:block;}
  9. html>body table.dynamic tbody tr.show{ display:table-row;}
  10. th,td{ padding:5px;}
  11. th{ background:#eef;}
  12. table.pagelist{ border:1px solid #ccc; border-bottom:none; border-right:none; width:500px;}
  13. table.pagelist td,table.pagelist th{ font-size:12px; border:1px solid #ccc; border-top:none; border-left:none;}
  14. p.paginatedNav{ font-size:12px; width:480px; margin-top:8px; text-align:right;}
  15. p.paginatedNav a{ color:#ccc;}
  16. p.paginatedNav a:link,p.paginatedNav a:visited{ color:#369;}
  17. </style>
  18. <script type="text/javascript" src="http://www.11gz.com/DOMhelp.js"></script>
  19. <script type="text/javascript"><!--
  20. pn = {
  21. //css class
  22. paginationClass:'pagelist',
  23. dynamicClass:'dynamic',
  24. showClass:'show',
  25. paginationNavClass:'paginatedNav',
  26.  
  27. //设置每页显示数据条数
  28. increase : 5,
  29. //分页导航的替换文本
  30. counter:'&#160;&#160;_x_到_y_条&#160;&#160;共_z_条&#160;&#160;',
  31. nextLabel:'下一页',
  32. previousLabel:'上一页',
  33.  
  34. init:function(){
  35.      var tablebody;
  36.   if(!document.getElementById || !document.createTextNode){return;}
  37.   var ts=document.getElementsByTagName('table');
  38.   for(var i=0;i<ts.length;i++){
  39.    if(!DOMhelp.cssjs('check',ts[i],pn.paginationClass)){continue;}
  40.    if(ts[i].getElementsByTagName('tr').length<pn.increase+1){continue;}
  41.    tablebody=ts[i].getElementsByTagName('tbody')[0];
  42.    ts[i].datarows=tablebody.getElementsByTagName('tr');
  43.    ts[i].datarowsize=ts[i].datarows.length;
  44.    ts[i].current=null;
  45.    DOMhelp.cssjs('add',ts[i],pn.dynamicClass);
  46.    pn.createPaginationNav(ts[i]);
  47.    pn.showSection(ts[i],0);
  48.   }
  49. },
  50. createPaginationNav:function(table){
  51.   var navBefore,navAfter;
  52.   navBefore=document.createElement('p');
  53.   DOMhelp.cssjs('add',navBefore,pn.paginationNavClass);
  54.   navBefore.appendChild(DOMhelp.createLink('#',pn.previousLabel));
  55.   navBefore.appendChild(document.createElement('span'));
  56.   counter=pn.counter.replace('_x_',1);
  57.   counter=counter.replace('_y_',pn.increase);
  58.   counter=counter.replace('_z_',table.datarowsize-1);
  59.   navBefore.getElementsByTagName('span')[0].innerHTML=counter;
  60.   navBefore.appendChild(DOMhelp.createLink('#',pn.nextLabel));
  61.   table.parentNode.insertBefore(navBefore,table);
  62.   navAfter=navBefore.cloneNode(true);
  63.   table.parentNode.insertBefore(navAfter,table.nextSibling);
  64.   table.topPrev=navBefore.getElementsByTagName('a')[0];
  65.   table.topNext=navBefore.getElementsByTagName('a')[1];
  66.   table.bottomPrev=navAfter.getElementsByTagName('a')[0];
  67.   table.bottomNext=navAfter.getElementsByTagName('a')[1];
  68.   DOMhelp.addEvent(table.topPrev,'click',pn.navigate,false); 
  69.   DOMhelp.addEvent(table.bottomPrev,'click',pn.navigate,false); 
  70.   DOMhelp.addEvent(table.topNext,'click',pn.navigate,false); 
  71.   DOMhelp.addEvent(table.bottomNext,'click',pn.navigate,false); 
  72.   table.bottomNext.onclick=DOMhelp.safariClickFix;
  73.   table.topPrev.onclick=DOMhelp.safariClickFix;
  74.   table.bottomPrev.onclick=DOMhelp.safariClickFix;
  75.   table.topNext.onclick=DOMhelp.safariClickFix;
  76.   table.topCounter=navBefore.getElementsByTagName('span')[0];
  77.   table.bottomCounter=navAfter.getElementsByTagName('span')[0];
  78. },
  79. navigate:function(e){
  80.   var start, table;
  81.   var t=DOMhelp.getTarget(e);
  82.   while(t.nodeName.toLowerCase()!='a'){t=t.parentNode;}
  83.   if(t.getAttribute('href') == null || t.getAttribute('href') == ''){return;}
  84.   if(t.parentNode.previousSibling.nodeName.toLowerCase() == 'table'){
  85.    table=t.parentNode.previousSibling;
  86.   }else{
  87.    table=t.parentNode.nextSibling;
  88.   }
  89.   if(t==table.topNext || t==table.bottomNext){
  90.    start=table.current+pn.increase;
  91.   }else if(t==table.topPrev || t==table.bottomPrev){
  92.    start=table.current-pn.increase;
  93.   }
  94.   pn.showSection(table,start)
  95. },
  96. showSection:function(table,start){
  97.   var i;
  98.   pn.changePaginationNav(table,start);
  99.   if(table.current!=null){
  100.    for(i=table.current;i<table.current+pn.increase;i++){
  101.     if(table.datarows[i]){
  102.      DOMhelp.cssjs('remove',table.datarows[i],pn.showClass);
  103.     }
  104.    }
  105.   }
  106.   for(i=start;i<start+pn.increase;i++){
  107.    if(table.datarows[i]){
  108.     DOMhelp.cssjs('add',table.datarows[i],pn.showClass);
  109.    }
  110.   }
  111.   table.current=start;
  112. },
  113. changePaginationNav:function(table,start){
  114.   if(start-pn.increase<0){
  115.    table.bottomPrev.removeAttribute('href');
  116.    table.topPrev.removeAttribute('href');
  117.   }else{
  118.    table.bottomPrev.setAttribute('href','#');
  119.    table.topPrev.setAttribute('href','#');
  120.   }
  121.   if(start+pn.increase>table.datarowsize-2){
  122.    table.bottomNext.removeAttribute('href');
  123.    table.topNext.removeAttribute('href');
  124.   }else{
  125.    table.bottomNext.setAttribute('href','#');
  126.    table.topNext.setAttribute('href','#');
  127.   }
  128.   var counter=pn.counter.replace('_x_',start+1);
  129.   var last=start+pn.increase;
  130.   if(last>table.datarowsize){last=table.datarowsize;}
  131.   counter=counter.replace('_y_',last);
  132.   counter=counter.replace('_z_',table.datarowsize);
  133.   table.topCounter.innerHTML=counter;
  134.   table.bottomCounter.innerHTML=counter;
  135. }
  136. }
  137. DOMhelp.addEvent(window,'load',pn.init,false);
  138. -->
  139. </script>
  140. </head>
  141. <body>
  142.  
  143. <table class="pagelist" cellspacing="0" cellpadding="0">
  144. <thead>
  145.  <tr><th scope="col">ID</th><th scope="col">作者</th><th scope="col">标题</th><th scope="col">介绍</th></tr>
  146. </thead>
  147. <tbody>
  148.  <tr><th>1</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  149.  <tr><th>2</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  150.  <tr><th>3</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  151.  <tr><th>4</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  152.  <tr><th>5</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  153.  <tr><th>6</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  154.  <tr><th>7</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  155.  <tr><th>8</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  156.  <tr><th>9</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  157.  <tr><th>10</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  158.  <tr><th>11</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  159.  <tr><th>12</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  160.  <tr><th>13</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  161.  <tr><th>14</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  162.  <tr><th>15</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  163.  <tr><th>16</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  164.  <tr><th>17</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  165.  <tr><th>18</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  166.  <tr><th>19</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  167.  <tr><th>20</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  168.  <tr><th>21</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  169.  <tr><th>22</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  170. </tbody>
  171. </table>
  172. </body>
  173. </html>

  你可以下载代码测试效果。

1 Comment »

利用css将文本替换为图片(图片替换)

2008-05-23 上午 - html/css/xml/xsl -

  某些时候,为了文字具有独特的字体,而不得不使用图片来做这些事情。这样一来,就不利于搜索引擎索引你的网站,而且,如果你是将图片嵌入背景的话,在css不可用的情况下将会是一片空白。那么我们就要想个办法来完善这个问题了。不过,还是尽可能的避免使用图像图换。

  方法有多种:

1.最简单的一种,直接隐藏包含该文本的父标签:

  1. <h2><SPAN>我的世界</span></h2> 
  2.  
  3. h2 { background:url(my_world.gif) no-repeat; width:150px; height:35px;}
  4. h2 span { display:none;}

  这种发法虽然简单明了,但可能会造成一些问题。屏幕阅读器会忽略掉display值设置为none或hidden的元素。因此,最好还是不要使用这种技术。

2.利用负值文本缩进:

  1. h2 { text-indent:-5000px; background:url(my_world.gif) no-repeat; width:150px; height:35px;}

  有一点需要说明的,就是:当用户打开css,但是关闭了图片下载,用户将什么也看不到。所以我们再看下一个方法吧!

3.利用一个元素完全盖住文字:

  它需要在替换的元素中加一个额外的标签:

  1. <h2><span><span>我的世界</h2>
  2.  
  3. h2 { width:150px; height:30px; position:relative;}
  4. h2 span { background:url(my_world.gif) no-repeat; width:100%; height:100%; position:absolute;}

  记住背景图像一定要是实底的,否则下面的文字可能露出来哦!

4.利用flash

  个人感觉不是很实用,有了上面三种方法来,这个就没什么必要了。这里简单的说下原理吧!

  由于flash是可以保留字体的,所以这将有一定的意义。这个技术上利用flash与javascript交互,as调用js传给它的文本。所以只需一个flash,就可以重复的使用该技术,而并不是单独为某一处文字做一个swf。还有一个好处,即flash中的文本是可以搜索的,这意味着可以轻松的复制它。

  具体细节和源码可以去www.mikeindustries.com/sifr找找。

  告一段落了!

No Comments »

JQuery 是什么

2008-05-22 上午 - JS/Ajax/AS -

  jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加入其team,包括来自德国的Jörn Zaefferer,罗马尼亚的Stefan Petre等等。

  jQuery是继prototype之后又一个优秀的Javascrīpt框架。其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。

  它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。

  jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互。

  jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。

  jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。

  Jquery是继prototype之后又一个优秀的Javascrīpt框架。对prototype我使用不多,简单了解过。但使用上jquery之后,马上被她的优雅吸引住了。有人使用这样的一比喻来比较prototype和jquery:prototype就像Java,而jquery就像ruby.实际上我比较喜欢java(少接触Ruby 罢了)但是jquery的简单的实用的确有相当大的吸引力啊!在项目里我把jquery作为自己唯一的框架类包。使用其间也有一点点心得,其实这些心得,在jquery的文档上面也可能有讲,不过还是记下来,以备忘罢。

  一,找到你了!

  还记得$()这个东西吧?prototype还是DWR都使用了这个函数代替document.getElementById()。没错,jquery也跟风了。为达到document.getElementById()的目的,jquery是这样写的:

  代码

  1. var someElement = $(”#myId);

  看起来比其他两个框架的要多了一个#,好,看看下面的用法:

  代码

  1. $(div p);(1)
  2. $(div.container)(2)
  3. $(div #msg);(3)
  4. $(table a”,context);(4)

  在prototype里看过这样的写法吗?第一行代码得到所有<div>标签下的<p>元素。第二行代码得到class 为container的<div>元素,第三行代码得到<div>标签下面id为msg的元素。第四行代码得到context为上下文的table里面所有的连接元素。

  如果你熟悉CSS,你会觉得这些写法很眼熟!对了。正是。看出奥妙了吧。jquery就是通过这样的方式来找到Dom对象里面的元素。跟CSS的选择器相类似。

  二,Jquery对象?

  jquery提供了很多便利的函数,如each(fn),但是使用这些函数的前提是:你使用的对象是Jquer对象。使一个Dom对象成为一个Jquery对象很简单,通过下面一些方式(只是一部分):

  代码

  1. var a = $(”#cid);(1)
  2. var b = $(”<p>hello</p>”);(2)
  3. var c = document.createElement(”table”); var tb = $&copy;

  三,代替body标签的onload

  这个惯例,也许是除了$()之外,用得最多的地方了。下面一段代码:

  代码

  1. $(document).ready(function(){
  2. alert(hello);
  3. });(1)
  1. <body onload=”alert(hello);”>(2

  上面两段代码是等价的。但代码1的好处是做到表现和逻辑分离。并且可以在不同的js文件中做相同的操作,即$(document).ready (fn)可以在一个页面中重复出现,而不会冲突。基本上Jqeury的很多plugin都是利用这个特性,正因为这个特性,多个plugin共同使用起来,在初始化时不会发生冲突。

  不管怎么说,这个惯例可以分离javascrīpt与HTML。推荐使用。

  四,事件机制

  我大量使用的事件可能就是button的onclick了。以前习惯在input 元素上写onclick = “fn()”,使用jquery可以使javascrīpt代码与html代码分离,保持HTML的清洁,还可以很轻松地绑定事件,甚至你可以不知道“事件”这个名词。

  代码

  1. $(document).ready(function(){
  2. $(”#clear).click(function(){
  3. alert(i am about to clear the table);
  4. });
  5. $(form[0]).submit(validate);
  6. });
  7. function validate(){
  8. //do some form validation
  9. }

  五,同一函数实现set

  代码

  1. $(”#msg).html();
  2. $(”#msg).html(hello);

  上面两行代码,调用了同样的函数。但结果却差别很大。

  第一行是返回指定元素的HTML值,第二行则是将hello这串字符设置到指定元素中。jquery的函数大部分有这样的特性。

  六,ajax

  这是一个ajax横行的时代。多少人,了不了解ajax的都跟着用上一把。呵。使用jquery实现ajax同样简单异常

  代码

  1. $.get(search.do”,{id:1},rend);
  2. function rend(xml){
  3. alert(xml);
  4. } (1)
  5. $.post(search.do”,{id:1},rend);
  6. function rend(xml){
  7. alert(xml);
  8. } (2)
  9. $(”#msg).ajaxStart(function(){
  10. this.html(”正在加载。。。。”);
  11. });(3)
  12. $(”#msg).ajaxSuccess(function(){
  13. this.html(”加载完成!”);
  14. });(4)

  这些都是较常用的方法,get和post用法一样。第一个参数是异步请求的url,第二个为参数,第三个回调方法。

  3,4的方法会在指定的Dom对象上绑定响应ajax执行的事件。当然,jquery的AJAX相关的函数不仅是这些,有兴趣可以去研究再多。

  七,渐入淡出

  代码

  1. $(”#msg).fadeIn(fast);
  2. $(”#msg).fadeOut(slow);

  没错,上面两行代码已经分别实现了一个id为Msg的jquery对象的渐入和淡出。做一个像Gmail一样的动态加载通知条,用jquery就那么简单。两个函数接受的参数除了快慢等,还可以接收整型,作为渐入或淡出的完成时间,单位为MS。

  八,plugin

  这也是一个插件的时代。

  jquery插件给我的感觉清一色的清洁,简单。如Jtip,要使用它的功能,只需要在你的元素的class上加上Jtip,并引入jtip.js及其样式即可以了。其他事情插件全包。我喜欢jquery的一个重要原因是发现她已经有了很多很好,很精彩的插件。

  写得很烂。可能大家看不出jquery的好处。嗯,光听是没用的,试用一下吧。你会发觉很有趣。

  暂时告一段落吧。待有新的发现再来分享。

  加一些Jquery的资源:

  • http://www.visualjquery.com/index.xml 很好的API查询站点
  • http://jquery.com/demo/thickbox/ 知道lightBox吧,看看Jquery是怎样实现相同的东西
  • http://www.codylindley.com/blogstuff/js/jtip/ Jtip,实用的提示工具
  • http://jquery.com/plugins/ 很多牛的插件。
  • http://15daysofjquery.com/jquery 的15天教程
  • http://jquery.org.cn/visual/cn/index.xml //不错的JQUERY 中文学习 推荐

  jquery来源

  jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加入其team,包括来自德国的J&ouml;rn Zaefferer,罗马尼亚的Stefan Petre等等。

  jQuery是继prototype之后又一个优秀的Javascrīpt框架。其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。

  它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。

  jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互。

  jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。

  jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。

  jQuery的最新release版本是1.2.3。

No Comments »

人肉搜索的厉害

2008-05-21 下午 - thinking -

  今年愚人节的时候,google出了个人肉搜索(其实两年前就有听说)。自己当初不怎么理解其含义,所以就并没放在心上,今天,我懂了。

  可不能小看了它,能通过广大的网友第一时间就得到你需要的结果。这就是它的厉害之处吧!

今天辽宁沈阳出了个“脑残者”,关于这个“脑残者”就不多说了!就是人肉搜索帮助沈阳警方在最短的时间内将其抓获。

  从这里可以看出,人肉搜索可是功不可没的!它能做的事还多着了,随着它的发展,必将又是互联网一大亮点,也是所有网民们手中的一大利器!

  其实这一刻更说明一个很简单,简单得不行的道理—人多力量大!

No Comments »

让网页变灰色,一句css就搞定

2008-05-20 上午 - html/css/xml/xsl -

  让网页变灰色,对5.12地震中遇难的同胞们表示哀悼!

  CSS

  1. * { filter: Gray(); }

No Comments »

Google的统计代码好像出了点问题

2008-05-16 下午 - 纯属扯淡 -

  晚上回家,打开自己的小站,突然发觉有js错误,不解,换火狐测试了一下。没错啊!这就郁闷了!

  而且发觉仅IE7会有此问题。迅速的查了一下,最后把元凶定制了google的统计代码。将其去掉后,不会再有错误。我也不解,突然就出现这样的情况,而且是大家一直以来都很信任的Google。具体原因还在查证之中。若有朋友的站也出现这样的情况,请不必惊慌,咱们就先将这个元凶去掉一下吧!

No Comments »

吉他,我差点忘了你的存在

2008-05-16 上午 - 生活点滴 -

  今天,无意看到了我的吉他,包上面有层薄薄的灰了。才想起好久没有去关照它了。曾经我的最爱,也是当初自认为美好的理想。

  擦掉上面的灰尘,感觉好陌生了!这段时间以来,一直都很忙,一直都是。晚上回到家里,守着电脑又要学习,又要搞自己个人的一些东西(博客什么之类的)。哪里来的时间啊!

  现在已经想不起什么很熟悉的旋律了,只能一顿乱弹,任由手指的发挥,它按到哪,就弹到哪,好自由啊!无拘无束是多么的舒坦啊!只是手指似乎不受自己的控制,显得那么的笨拙!看来要多花点时间陪陪它了,再过久一点,似乎就完全陌生了!突然想到以前很多点点滴滴!

  才发现,铉有锈迹了。曲终人散!睡吧!

No Comments »