非常不错的一个javascript 类

非常不错的一个javascript 类


代码如下:

/*  
 *  Author:aoao
 *    Homepage:http://www.loaoao.com
 *  Email:loaoao@gmail.com / QQ:2222342
 *  Copyright (c) 2006 aoao
 *  Licensed under a Creative Commons Attribution 2.5 License (http://creativecommons.org/licenses/by/2.5/) 
 */

var jscc = new Object();
var loaoao = new Object();//^_^//
jscc = {    
    init:function(){/*_*/},
    path:"/scripts/jscc/",
    include:function (file){
        var j=document.createElement("script");
        j.setAttribute('type','text/javascript');
        j.setAttribute('src',jscc.path+file+'.js');
        document.getElementsByTagName("head")[0].appendChild(j);
    }
};

jscc.addEvent = function( obj, type, fn ) {
    if ( obj.attachEvent ) {        
      obj['e'+type+fn] = fn;
      obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
      obj.attachEvent( 'on'+type, obj[type+fn] );
    } else {
      obj.addEventListener( type, fn, false );
    }
};
// Cookies
jscc.cookie = {
    create:function (name,value,days) {
      if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
      }
      else expires = "";
      document.cookie = name+"="+value+expires+"; path=/";
    },
    read:function(name) {
      var nameEQ = name + "=";
      var ca = document.cookie.split(';');
      for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
      }
      return null;
    }
};

jscc.getPageSize=function(){
    // reference lightbox (http://www.huddletogether.com/projects/lightbox/lightbox.js)
     var theWidth,theHeight;
    if (window.innerHeight&&window.scrollMaxY) {
        theWidth = window.innerWidth;
        theHeight = window.innerHeight+ window.scrollMaxY;
     } 
    else if (document.body){
        theWidth=((document.body.scrollWidth > document.body.offsetWidth)?document.body.scrollWidth : document.body.offsetWidth );
        theHeight=((document.body.scrollHeight > document.body.offsetHeight)?document.body.scrollHeight  : document.body.offsetHeight );
    }
    var winWidth ,winHeight; 
    if (self.innerHeight) {    
        winWidth = self.innerWidth;
        winHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
        winWidth = document.documentElement.clientWidth;
        winHeight = document.documentElement.clientHeight;
    } else if (document.body) {
        winWidth = document.body.clientWidth;
        winHeight = document.body.clientHeight;
    }
    var pWidth=(theWidth>winWidth?theWidth:winWidth)
    var pHeight=(theHeight>winHeight?theHeight:winHeight)

var yScroll;
    if (self.pageYOffset) {
        yScroll = self.pageYOffset;
    } else if (document.documentElement && document.documentElement.scrollTop){     // Explorer 6 Strict
        yScroll = document.documentElement.scrollTop;
    } else if (document.body) {// all other Explorers
        yScroll = document.body.scrollTop;
    }
    var getPageSize = new Array(pWidth,pHeight,winWidth,winHeight,yScroll) 
    return getPageSize;
}

jscc.widgets = {/**/};
jscc.widgets.fixedsidebar = {
    fixedHeight:0,
    oldScrolltop:0,
    init: function(){
        if (!document.getElementById("sidebar")) return;
        jscc.addEvent(window,"scroll",function(e){jscc.widgets.fixedsidebar.setFixed()});
        jscc.addEvent(window,"resize",function(e){jscc.widgets.fixedsidebar.setFixed()});
        this.fixedHeight=document.getElementById("sidebar").offsetTop;
        this.setFixed();
    },
    setFixed:function(){
        var sidebar=document.getElementById("sidebar");
        var ref=document.getElementById("main");
        var s_t=sidebar.offsetTop;
        var s_h=sidebar.offsetHeight;
        var s_th=s_t+s_h;
        var r_th=ref.offsetTop+ref.offsetHeight;
        var d_st;
        if(document.documentElement.scrollTop){
            d_st=document.documentElement.scrollTop;
        }
        else{
            d_st=document.body.scrollTop
            }
        if(r_th>(s_t+s_h)){
            var seHeight=0; 
            if (self.innerHeight) {    seHeight = self.innerHeight;} else if (document.documentElement && document.documentElement.clientHeight) {    seHeight = document.documentElement.clientHeight;} else if (document.body) {seHeight = document.body.clientHeight;}
            try{
                if(seHeight>s_h){
                    var newtop=(d_st<this.fixedHeight?0:d_st-this.fixedHeight-42);
                }
                else{
                // Thank you dron (http://www.ucren.com/)
                switch (d_st-this.oldScrolltop>0)
                    {
                    case true:
                        if (d_st-this.fixedHeight > s_t -seHeight){
                        var    newtop= d_st -this.fixedHeight - (s_h-seHeight)-68;
                        }
                    break;
                    case false:
                        if (d_st-this.fixedHeight<parseInt(sidebar.style.marginTop,10)){
                        var newtop= d_st-this.fixedHeight;
                        }
                    break;
                    }
                }
                this.oldScrolltop = d_st;
                if(newtop==undefined){ return;};
                newtop=(newtop<0?0:newtop);
                sidebar.style.marginTop= newtop+"px";
            }
            catch(e){
              //alert(e.description);
            }
        }
        else{
            sidebar.style.marginTop="0px";
        }
    }    
};
//jscc.addEvent(window,"load",function(e){jscc.widgets.fixedsidebar.init()});

jscc.widgets.wraphandler = {
    //jscc.widgets.wraphandler reference http://www.collylogic.com/includes/resizer.js (http://www.collylogic.com/?/comments/redesign-notes-1-width-based-layout/)
    init: function() {    
        //if (!document.getElementById) return;
            if( document.getElementById('wrapper').className=="col3"){    
            jscc.wraphandler.setWrapper();
            jscc.addEvent(window,"resize",jscc.wraphandler.setWrapper);
            }
            else{return}
      },
      setWrapper: function() {
       var getPS=jscc.getPageSize();
       var _width=getPS[2];
          if (_width < 940) {
            document.getElementById('wrapper').className = 'col2';
          } else {
            document.getElementById('wrapper').className = 'col3';
          }
          if(document.all) {
            if (_width < 780) {
            document.getElementById('wrapper').style.width="750px"
              } else {
                document.getElementById('wrapper').style.width="auto"
              }              
          }
      }
};
//jscc.addEvent(window,"load",function(e){jscc.widgets.wraphandler.init()});

jscc.widgets.styleSwitcher = {
    // jscc.widgets.styleSwitcher  reference StyleSwitcher functions( written by Paul Sowden http://www.idontsmoke.co.uk/ss/ . For the details, visit ALA: http://www.alistapart.com/stories/alternate/)
    init:function(e) {
        var cookie = jscc.cookie.read("style");
        var title = cookie ? cookie : this.getPreferred();
        title = (title==null?"left":title);
        this.setActive(title);
        var operactioner = document.getElementById("themes").getElementsByTagName("A");
    operactioner[0].onclick=function() {
        jscc.widgets.styleSwitcher.setActive("left");
        return false;
    };
    operactioner[1].onclick=function() {
        jscc.widgets.styleSwitcher.setActive("right");
        return false;
    };
    this.switcher(title);
    },
    setActive:function(title){
        var i, a, main;
          for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
        if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
                a.disabled = true;
                if(a.getAttribute("title") == title) a.disabled = false;
            }
        }
        this.switcher(title);
        //jscc.cookie.create("style", title,"365");    
    },
    getActive:function(){
    var i, a;
    for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");}
      return null;
    },
    getPreferred:function (){
      var i, a;
      for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
        if(a.getAttribute("rel").indexOf("style") != -1
           && a.getAttribute("rel").indexOf("alt") == -1
           && a.getAttribute("title")
           ) return a.getAttribute("title");
      }
      return null;
    },
    switcher:function(theme){
        if(!document.getElementById(["theme_"+theme])) { return;}
        var notheme=(theme=="left"?"right":"left");
        document.getElementById(["theme_"+notheme]).style.display="inline";
        document.getElementById(["theme_"+theme]).style.display="none";
    },
    end:function(e){
      var title = this.getActive();
      jscc.cookie.create("style", title,"365");
    }
};
//jscc.addEvent(window,"load",function(e){jscc.widgets.styleSwitcher.init()});
jscc.addEvent(window,"unload",function(e){jscc.widgets.styleSwitcher.end()});

jscc.widgets.toTop = {
    init:function(){
        document.getElementById("toTop").onclick=function(e){
            jscc.widgets.toTop.set();
            return false;
        }        
    },
    waitTimer:null,
    set:function(){
        var d_st=document.documentElement.scrollTop;
        if(window.navigator.userAgent.indexOf("MSIE")>=1){
            for (var i=d_st; i>10; i-=Math.floor(i/6)){
            window.scrollTo(0,i);
            }
            window.scrollTo(0,10);
        }
        else{
        window.scrollTo(0,Math.floor(d_st / 2));

if(d_st>10){
                 waitTimer=setTimeout("jscc.widgets.toTop.set()",20);
          }
            else{
                  clearTimeout(waitTimer);
            }
        }
    }
}
jscc.api={
    google:{
        init:function(){
        try{
            var searchControl = new GSearchControl();
        }
            catch(e){
             return;
            }

var options = new GdrawOptions();
        options.setSearchFormRoot(document.getElementById("googleSearchForm"));
        options.setDrawMode(GSearchControl.DRAW_MODE_TABBED);
         searchControl.setLinkTarget(GSearch.LINK_TARGET_SELF);
        searchControl.setResultSetSize(GSearch.LARGE_RESULTSET);

var siteSearch = new GwebSearch();
        siteSearch.setUserDefinedLabel("站内搜索");
        siteSearch.setUserDefinedClassSuffix("siteSearch");
        siteSearch.setSiteRestriction("www.loaoao.com");
        searchControl.addSearcher(siteSearch);
        var labSearch = new GwebSearch();
        labSearch.setUserDefinedLabel("嗷嗷的实验室搜索");
        labSearch.setUserDefinedClassSuffix("labSearch");
        labSearch.setSiteRestriction("lab.loaoao.com");
        searchControl.addSearcher(labSearch);
        var wwwSearch = new GwebSearch();
        wwwSearch.setUserDefinedLabel("Google搜索");
        labSearch.setUserDefinedClassSuffix("wwwSearch");
        searchControl.addSearcher(wwwSearch);

searchControl.draw(document.getElementById("googleSearchResults"), options);
        //    searchControl.execute("css");
        }
    }
}
loaoao.com = function(){
    if (!document.getElementById) return;
    jscc.widgets.styleSwitcher.init();
    jscc.widgets.fixedsidebar.init();
    jscc.widgets.toTop.init();    
    jscc.api.google.init();

};
jscc.addEvent(window,"load",loaoao.com);

(0)

相关推荐

  • 非常不错的一个javascript 类

    非常不错的一个javascript 类 复制代码 代码如下: /*    *  Author:aoao  *    Homepage:http://www.loaoao.com  *  Email:loaoao@gmail.com / QQ:2222342  *  Copyright (c) 2006 aoao  *  Licensed under a Creative Commons Attribution 2.5 License (http://creativecommons.org/lic

  • 一个简单的javascript类定义例子

    复制代码 代码如下: <script> //定义一个javascript类 function JsClass(privateParam/* */,publicParam){//构造函数 var priMember = privateParam; //私有变量 this.pubMember = publicParam; //公共变量 //定义私有方法 function priMethod(){ return "priMethod()"; } //定义特权方法 //特权方法可以

  • 介绍一个简单的JavaScript类框架

    在写work-in-progress JavaScript book一书时,对于javascript继承体系,我花费了相当的时间,并在该过程中研究了各种不同的模拟经典类继承的方案.这些技术方案中,我最为推崇的是base2与Prototype的实现. 从这些方案中,应该能提炼出一个具有其思想内涵的框架,该框架须具有简单.可重用.易于理解并无依赖等特点,其中简单性与可用性是重点.以下是使用示例: var Person = Class. extend ( { init: function (isDan

  • 一个比较不错的PHP日历类分享

    说到对时期和时间的处理,就一定要介绍一下日历程序的编写.但一提起编写日历,大多数人都会认为日历的作用只是为了在页上显示当前的日期,其实日历在我们的开发中有更重要的作用.例如我们开发一个"记事本"就需要通过日历设定日期,还有一些系统中需要按日期去排任务,也需要日历,等等.本例涉及的日期和时间函数并不是很多,都是前面介绍的内容,主要是通过一个日历类的编写,巩固一下前面介绍过的面向对象的语法知识,以及时间函数应用,最主要的是可以提升初学者的思维逻辑和程序设计能力.将日历类Calendar声明

  • javascript 面向对象的JavaScript类

    在上一节面 JavaScript 面向对象之命名空间 中说了怎么定义JavaScript命名空间,这一节来说下紧接着的一个概念--类.虽然JavaScript中没有class关键字,但作为开发人员我们一定要有这个思想.在C#中类可以分为实例类和静态类,JavaScript亦然. 一,定义实例类: 在上节中我定义了一个cnblogs.news的命名空间,现在就在此命名空间下定义一个名为Article类: 复制代码 代码如下: cnblogs.news.Article=function(){ var

  • javascript类继承机制的原理分析

    目前 javascript的实现继承方式并不是通过"extend"关键字来实现的,而是通过 constructor function和prototype属性来实现继承.首先我们创建一个animal 类 js 代码 复制代码 代码如下: var animal = function (){ //这就是constructor function 了 this .name = 'pipi'; this .age = 10; this .height = 0; } //建立一个动物的实例 var

  • JavaScript类和继承 prototype属性

    我们已经在第一章中使用prototype属性模拟类和继承的实现. prototype属性本质上还是一个JavaScript对象. 并且每个函数都有一个默认的prototype属性. 如果这个函数被用在创建自定义对象的场景中,我们称这个函数为构造函数. 比如下面一个简单的场景: 复制代码 代码如下: // 构造函数 function Person(name) { this.name = name; } // 定义Person的原型,原型中的属性可以被自定义对象引用 Person.prototype

  • 比较不错的函数式JavaScript编程指南教程

    你是否知道JavaScript其实也是一个函数式编程语言呢?本指南将教你如何利用JavaScript的函数式特性. 要求:你应当已经对JavaScript和DOM有了一个基本的了解. 写这篇指南的目的是因为关于JavaScript编程的资料太多了但是极少的资料提到了JavaScript的函数式特性.在本指南中,我只会讲解这些基本知识而不会深入其它的函数式语言或这是Lambda算子. 你可以点击所有的例子然后你所看到的代码就会被执行,这样就可以令指南变得具有交互性.你也可以使用这个沙箱来尝试. 第

  • 在Javascript类中使用setTimeout第1/2页

    最近遇到了一道 Javascript 考题,内容如下: 尝试实现注释部分的 Javascript 代码,可在其他任何地方添加更多 代码(如不能实现,说明一下不能实现的原因): var Obj = function(msg){    this.msg = msg;    this.shout = function(){       alert(this.msg);    } this.waitAndShout = function(){       // 隔五秒钟后执行上面的 shout 方法  

  • 一个JavaScript操作元素定位元素的实例

    操作元素定位元素,用js来实现是个不错的选择,下面有个示例,需要的朋友可以看看 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-操作元素定位元素</title> <style> div#

随机推荐