Javascriptオブジェクト指向プログラミングTab切り替えコンポーネント
25189 ワード
今日は対象向けプログラミングでtab切替部品も書きました.コンストラクターモードとプロトタイプモードを一つ包装しました.もともとこのような非常に簡単なものを書いていますが、書いているうちに一つの問題に遭遇しました.次の時間を使って、このtabコンポーネントは自動切り替えに対応していません. それを直接に呼び出すだけでいいです.コードの中にコールされたコメントコードがあります.HTMlコードは以下の通りです
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title> </title>
- <style>
- .tabnav{width:500px;height:25px;margin-left:100px; overflow:hidden;}
- .tabnav li{background:#baf;color:#fff;line-height:25px;display:block;float:left;margin:0 10px;padding:0 5px;cursor:pointer}
- .tabnav li.hover{background:#047}
- .tabbox{width:500px;border:2px solid #047; overflow:hidden;}
- .tabbox div{margin:10px;line-height:20px}
- .tabbox .hide{ display:none;}
-
- .tabnav2{width:500px;height:25px;margin-left:100px; overflow:hidden;}
- .tabnav2 li{background:#baf;color:#fff;line-height:25px;display:block;float:left;margin:0 10px;padding:0 5px;cursor:pointer}
- .tabnav2 li.hover{background:#047}
- .tabbox2{width:500px;border:2px solid #047; overflow:hidden;}
- .tabbox2 div{margin:10px;line-height:20px}
- .tabbox2 .hide{ display:none;}
- </style>
- <script src="base.js"></script>
- </head>
-
- <body>
- <ul class="tabnav">
- <li class="list1">jQuery </li>
- <li class="list1">CSS </li>
- <li class="list1">xhtml </li>
- </ul>
- <div class="tabbox">
- <div class="c1"><img src="http://img.ffffound.com/static-data/assets/6/644432cc1eac546463ff2a9ebefc2e81cc861961_m.jpg" /></div>
- <div class="c1 hide"><img src="http://img.ffffound.com/static-data/assets/6/8bd0ae01d96d6caad52ac97044e526edb6bf52f7_m.jpg" /></div>
- <div class="c1 hide"><img src="http://img.ffffound.com/static-data/assets/6/34aff353e8a0c93b1826170035fb8ed6d9de9933_m.png" /></div>
- </div>
-
- <script type="text/javascript" src="Tab.js"></script>
- <script type="text/javascript">
- var listMenu = getElementsByClassName("list1");
- var contents = getElementsByClassName("c1");
- var test = new Tab(listMenu,contents);
- test.Mouseover();
- </script>
- </body>
- </html>
base.jsはいくつかの基本的な関数の方法をカプセル化したのです.
- function getElementsByClassName(className,context){
- context = context || document;
- if(context.getElementsByClassName){
- return context.getElementsByClassName(className);
- }
- var nodes = context.getElementsByTagName("*"),ret=[];//
- for(var i=0;i<nodes.length;i++){ //
- if(hasClass(nodes[i],className)) ret.push(nodes[i]);
- }
- return ret;
- }
-
- //
- function hasClass(node,className){
- var names = node.className.split(/\s+/);//
- //
- for(var i=0;i<names.length;i++){
- if(names[i]==className)
- return true;
- }
- return false;
- }
-
- /**
-
- curTime 0
- start :
- dur :
- alter :
- */
- function animate(o,start,alter,dur,fx){
- var curTime=0;
- var t = setInterval(function(){
- if(curTime>=dur) clearInterval(t);
- for(var i in start){
- o.style[i] = fx(start[i],alter[i],curTime,dur) + "px";
- }
- curTime+=50;
- },50)
- return function(){
- clearInterval(t);
- };
- }
-
- function Linear(start,alter,curTime,dur){
- return start + curTime/dur * alter;
- //
- }
- //
- function Quad(start,alter,curTime,dur){
- return start + Math.pow(curTime/dur,2)*alter;
- }
- function addClass(obj,className){
- obj.className+=" " +className;
- return obj;
- }
- function delClass(obj,className){
- var s = obj.className.split(/\s+/);//
- for(var i=0;i<s.length;i++){
- if(s[i]==className){
- delete s[i];
- }
- }
- obj.className = s.join(" ");
- return obj;
- }
Tab.jsコードは以下の通りです.
- /**
- * @author tugenhua
- * version V1.0
- * Tab
- * Tab tabMenu li tabContent currentClass hover
- * base.js js javascript
- * js onclick onmouseover js
- * <script type="text/javascript">
- * var listMenu = getElementsByClassName("list1");
- * var contents = getElementsByClassName("c1");
- * var test = new Tab(listMenu,contents);
- * test.Mouseover() test.Click();
- × js Click Mouseover
- × !
- × javascript ! this that this !
- * </script>
- ×
- */
- function Tab(tabMenu, tabContent, currentClass, time){
- this.tabMenu = tabMenu;
- this.tabContent = tabContent;
- this.currentClass = currentClass || "hover";
- this.time = time || 3000;
- this.tabMenu[0].className +=" " +this.currentClass;
- }
- Tab.prototype = {
- Click : function(){
- for(var j=0;j<this.tabMenu.length;j++){
- var that = this;
- (function(_j){
- that.tabMenu[_j].onclick = function(){
- for(var c=0;c<that.tabContent.length;c++){
- that.tabContent[c].style.display = "none";
- }
- that.clearClass();
- addClass(this,that.currentClass);
- that.tabContent[_j].style.display = "block";
-
- }
- })(j)
- }
- },
- clearClass : function(){
- for(var k=0;k<this.tabMenu.length;k++){
- if(hasClass(this.tabMenu[k],this.currentClass)){
- delClass(this.tabMenu[k],this.currentClass);
- }
- }
- },
- Mouseover : function(){
- for(var j=0;j<this.tabMenu.length;j++){
- var that = this;
- (function(_j){
- that.tabMenu[_j].onmouseover = function(){
- that.item = _j;
- for(var c=0;c<that.tabContent.length;c++){
- that.tabContent[c].style.display = "none";
- }
- that.clearClass();
- addClass(this,that.currentClass);
- that.tabContent[_j].style.display = "block";
-
- }
- })(j)
- }
- }
-
- }
Tab.jsコードには相応のjs注釈とこのjsの長所と短所があります.およびjs呼び出し方法!興味がある人は見てもいいです.もちろん以下は該当のダウンロードを提供します.不明なところはメッセージを残してもいいです.