为侧边栏添加面板开关功能
作者:笨花 日期:2008-04-28
具体修改如下(在IE 6、IE 7、FF 2、Opera中均测试通过):
common\common.js
修改函数initJS:
JavaScript代码
- //初始化JS代码
- function initJS(){
- ReImgSize() //自动缩放代码
- initAccessKey() //转换AccessKey For IE
- addPanelOnClick(); // 添加面板标题鼠标点击处理函数
- }
在后面添加两个函数:
JavaScript代码
- // 添加面板标题鼠标点击处理函数
- function addPanelOnClick(){
- var sideBar, panel;
- sideBar = document.getElementById("innersidebar");
- if (isIE()){// 是IE
- for(i = 1; i<sideBar.childNodes.length - 1; i++){
- panel = sideBar.childNodes[i];
- panel.childNodes[0].onclick = panelOnOff;
- }
- }
- else{// 不是IE,是Netscape, FireFox, Opera
- for(i = 3; i<sideBar.childNodes.length - 3; i++){
- panel = sideBar.childNodes[i];
- panel.childNodes[0].onclick = panelOnOff;
- }
- }
- }
- // 面板开关函数
- function panelOnOff(){
- var node;
- node = this.parentNode.childNodes[1];
- node.style.display = (node.style.display == "") ? "none" : "";
- }
==================== 华丽的分割线 ====================
看到有朋友发了一个示例代码,受到启发又修改了,增加动态效果
还是修改common\common.js,将上面新增的函数替换下面的代码~
JavaScript代码
- // 面板高度数组
- var maxHeight;
- // 获得面板索引
- function getPanelIndex(obj){
- var sideBar, panel, start;
- sideBar = document.getElementById("innersidebar");
- start = isIE() ? 1 : 3;
- for(i = start; i < sideBar.childNodes.length - start; i++){
- panel = sideBar.childNodes[i];
- if (obj == panel.childNodes[1]){
- return i - start;
- }
- }
- return -1;
- }
- // 面板开关动态效果
- function panleOpenClose(obj, action){
- var index, curHeight, delat;
- var funcOpen, funcClose, intervalID;
- index = getPanelIndex(obj);
- delta = 1;
- if (action == "Open"){
- curHeight = 0;
- obj.style.display = "";
- funcOpen = function(){
- delta *= 2.5;
- curHeight += delta;
- if (curHeight > maxHeight[index]){
- obj.style.height = maxHeight[index] + "px";
- clearInterval(intervalID);
- }else{
- obj.style.height = curHeight + "px";
- }
- }
- intervalID = setInterval(funcOpen, 10);
- }
- if (action == "Close"){
- curHeight = maxHeight[index];
- obj.style.overflow = "hidden";
- funcClose = function(){
- delta *= 2.5;
- curHeight -= delta;
- if (curHeight < 10){
- obj.style.height = "0px";
- obj.style.display = "none";
- clearInterval(intervalID);
- }else{
- obj.style.height = curHeight + "px";
- }
- }
- intervalID = setInterval(funcClose, 10);
- }
- }
- // 面板开关函数
- function panelOnClick(){
- var node, index;
- node = this.parentNode.childNodes[1];
- index = getPanelIndex(node);
- if (index == -1){
- return;
- }
- if (node.style.display == ""){
- panleOpenClose(node, "Close");
- }else{
- panleOpenClose(node, "Open");
- }
- }
- // 添加面板标题鼠标点击处理函数
- function addPanelOnClick(){
- var sideBar, panel, start, tmpPT, tmpPB;
- sideBar = document.getElementById("innersidebar");
- start = isIE() ? 1 : 3;
- maxHeight = new Array(sideBar.childNodes.length - 2 * start);
- for(i = start; i<sideBar.childNodes.length - start; i++){
- panel = sideBar.childNodes[i];
- panel.childNodes[0].onclick = panelOnClick;
- panel.childNodes[0].title = "点击我试试看"; // 标题栏提示框,大家自己发挥创意改
- tmpPT = panel.childNodes[1].style.paddingTop;
- tmpPB = panel.childNodes[1].style.paddingBottom
- panel.childNodes[1].style.paddingTop = "0px";
- panel.childNodes[1].style.paddingBottom = "0px";
- maxHeight[i - start] = panel.childNodes[1].offsetHeight;
- panel.childNodes[1].style.paddingTop = tmpPT;
- panel.childNodes[1].style.paddingBottom = tmpPB;
- }
- }
不过唯一的不足在于,需要等页面完全载入以后功能才能开启。
评论: 0 | 引用: 0 | 查看次数: -
发表评论
上一篇
下一篇

文章来自:
Tags:
相关日志: