关键字‘选项卡’的相关文章

基于ajax异步请求的选项卡

关于ajax异步请求的tab技术很常见,在很多门户网站上都可以看到他的身影,特别是在频道首页,这样做的目的是显而易见的,分步请求数据,减缓服务器的压力,带来更为流畅的用户体验。如下图:

ajaxtab

设计起来当然不是什么问题,就是一个特殊的和服务器有通信的tab而已,在首轮tab切换过程中,发送一个XHR,然后再把Server响应的数据(基本上是html字串)塞到相应的容器中即可。这个过程中有个问题需要注意,在每个选项点击第一次之后,已经把所需要的数据加载到客户端,那么再次切换的时候就没有必要重新请求服务器了,这样做的依据就是判断内容容器中的innerHTML是否为空。

诚然,你如果真的反其道而行之,也并无过错,并不会影响网页功能的展现,但却是徒劳无益,反而加重服务器的负担,并且会影响到用户体验,这也就有被于使用ajax tab的初衷了。

同样的,详情请登录 :Demo

封装选项卡

选项卡技术很常见,即使刚踏入前端开发的同学都会使用它去完成一些基本的任务。有一种情况值的考虑,假如在一个页面中多处出现同样的功能模块的应用,那么我们很自然的会想到,把这个功能写成一个function,然后用一个事件来驱动这个function,这个的思路看上去一切都没什么问题了,既体现的代码的重用和模块化,又可以很快的完成繁琐的工作任务。

事实上,这样处理确实带来很多的便利性,但是美中不足的地方在于,在每个操作对象上都要加上事件属性(onclick=”",onmouseover=”"等等),否则一经写好的function就无法奏效,在推尚结构和表现向分离(实际上是xhtml+css技术,用在此处颇有不妥)的今天,这样的结构是遭人唾弃的(起码我很BS), 问题的出现总会有完美的解决方案。

顺水推舟,如果创建一个构造类,把一切操作对象的属性作为参数传入这个类,并赋给这个类的一个私有属性,那么在这个类的实例对象中,执行初始化方法时,利用定位运算符(.)能很轻松的访问到操作对象的属性,从而进行一些必要的操作。这个Tab类的结构如下:

  1. function Tab(obj){
  2.     this.obj = obj;
  3. }
  4. Tab.prototype.init = function(){
  5.     var $para = this.obj;
  6.     var t1 = document.getElementById($para.id).getElementsByTagName($para.tag1);
  7.     var t2 = document.getElementById($para.id).getElementsByTagName($para.tag2);
  8.     this.$event = "on" + $para.eventType;
  9.     t1[0].className = "current";
  10.     t2[0].style.display = "block";
  11.     for(var i=0;i<t1.length;i++){
  12.         t1[i][this.$event] = (function(index){
  13.             return function(){
  14.                 for(var j=0;j<t1.length;j++){
  15.                     t1[j].className = "";
  16.                     t2[j].style.display = "";
  17.                 }
  18.                 this.className = "current";
  19.                 t2[index].style.display = "block";
  20.             }
  21.         })(i);
  22.     }
  23. }

利用这个Tab类,可以帮助我们很快捷的完成任务,而且仅仅需要二行代码,其中一行用来创建一个实例化的对象,之后进行初始化操作,这一切看上去都是那么的优雅(自己的看法 -.-)。

点击查看应用