www.gusucode.com > SiteEngine(建站引擎) 7.0 个人免费版源码程序 > data/js/panel.js
/************************************************************************************************************ (C) www.dhtmlgoodies.com, October 2005 This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website. Terms of use: You are free to use this script as long as the copyright message is kept intact. However, you may not redistribute, sell or repost it without our permission. Updated: February, 22nd 2006 - Instead of skipping onclick events when slide is in progress, start sliding in the other direction if mouse is clicked the second time. April, 23rd 2006 - Added support for having only one pane expanded simultaneously( xpPanel_onlyOneExpandedPane) Thank you! www.dhtmlgoodies.com Alf Magne Kalleland ************************************************************************************************************/ /* Update LOG January, 28th - Fixed problem when double clicking on a pane(i.e. expanding and collapsing). */ var xpPanel_slideActive = true; // Slide down/up active? var xpPanel_slideSpeed = 20; // Speed of slide var xpPanel_onlyOneExpandedPane = false; // Only one pane expanded at a time ? var dhtmlgoodies_xpPane; var dhtmlgoodies_paneIndex; var savedActivePane = false; var savedActiveSub = false; var xpPanel_currentDirection = new Array(); var cookieNames = new Array(); var currentlyExpandedPane = false; /* These cookie functions are downloaded from http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm */ function Get_Cookie(name) { var start = document.cookie.indexOf(name+"="); var len = start+name.length+1; if ((!start) && (name != document.cookie.substring(0,name.length))) return null; if (start == -1) return null; var end = document.cookie.indexOf(";",len); if (end == -1) end = document.cookie.length; return unescape(document.cookie.substring(len,end)); } // This function has been slightly modified function Set_Cookie(name,value,expires,path,domain,secure) { expires = expires * 60*60*24*1000; var today = new Date(); var expires_date = new Date( today.getTime() + (expires) ); var cookieString = name + "=" +escape(value) + ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + ( (path) ? ";path=" + path : "") + ( (domain) ? ";domain=" + domain : "") + ( (secure) ? ";secure" : ""); document.cookie = cookieString; } function cancelXpWidgetEvent() { return false; } function showHidePaneContent(e,inputObj) { if(!inputObj)inputObj = this; var img = inputObj.getElementsByTagName('IMG')[0]; var numericId = img.id.replace(/[^0-9]/g,''); var obj = document.getElementById('paneContent' + numericId); if(img.src.toLowerCase().indexOf('up')>=0){ currentlyExpandedPane = false; img.src = img.src.replace('up','down'); if(xpPanel_slideActive){ obj.style.display='block'; xpPanel_currentDirection[obj.id] = (xpPanel_slideSpeed*-1); slidePane((xpPanel_slideSpeed*-1), obj.id); }else{ obj.style.display='none'; } if(cookieNames[numericId])Set_Cookie(cookieNames[numericId],'0',100000); }else{ if(this){ if(currentlyExpandedPane && xpPanel_onlyOneExpandedPane)showHidePaneContent(false,currentlyExpandedPane); currentlyExpandedPane = this; }else{ currentlyExpandedPane = false; } img.src = img.src.replace('down','up'); if(xpPanel_slideActive){ if(document.all){ obj.style.display='block'; //obj.style.height = '1px'; } xpPanel_currentDirection[obj.id] = xpPanel_slideSpeed; slidePane(xpPanel_slideSpeed,obj.id); }else{ obj.style.display='block'; subDiv = obj.getElementsByTagName('DIV')[0]; obj.style.height = subDiv.offsetHeight + 'px'; } if(cookieNames[numericId])Set_Cookie(cookieNames[numericId],'1',100000); } return true; } function slidePane(slideValue,id) { if(slideValue!=xpPanel_currentDirection[id]){ return false; } var activePane = document.getElementById(id); if(activePane==savedActivePane){ var subDiv = savedActiveSub; }else{ var subDiv = activePane.getElementsByTagName('DIV')[0]; } savedActivePane = activePane; savedActiveSub = subDiv; var height = activePane.offsetHeight; var innerHeight = subDiv.offsetHeight; height+=slideValue; if(height<0)height=0; if(height>innerHeight)height = innerHeight; if(document.all){ activePane.style.filter = 'alpha(opacity=' + Math.round((height / subDiv.offsetHeight)*100) + ')'; }else{ var opacity = (height / subDiv.offsetHeight); if(opacity==0)opacity=0.01; if(opacity==1)opacity = 0.99; activePane.style.opacity = opacity; } if(slideValue<0){ activePane.style.height = height + 'px'; subDiv.style.top = height - subDiv.offsetHeight + 'px'; if(height>0){ setTimeout('slidePane(' + slideValue + ',"' + id + '")',10); }else{ if(document.all)activePane.style.display='none'; } }else{ subDiv.style.top = height - subDiv.offsetHeight + 'px'; activePane.style.height = height + 'px'; if(height<innerHeight){ setTimeout('slidePane(' + slideValue + ',"' + id + '")',10); } } } function mouseoverTopbar() { var img = this.getElementsByTagName('IMG')[0]; var src = img.src; img.src = img.src.replace('.gif','_over.gif'); var span = this.getElementsByTagName('SPAN')[0]; span.style.color='#428EFF'; } function mouseoutTopbar() { var img = this.getElementsByTagName('IMG')[0]; var src = img.src; img.src = img.src.replace('_over.gif','.gif'); var span = this.getElementsByTagName('SPAN')[0]; span.style.color=''; } function initDhtmlgoodies_xpPane(panelTitles,panelDisplayed,cookieArray) { dhtmlgoodies_xpPane = document.getElementById('dhtmlgoodies_xpPane'); var divs = dhtmlgoodies_xpPane.getElementsByTagName('DIV'); dhtmlgoodies_paneIndex=0; cookieNames = cookieArray; for(var no=0;no<divs.length;no++){ if(divs[no].className=='dhtmlgoodies_panel'){ var outerContentDiv = document.createElement('DIV'); var contentDiv = divs[no].getElementsByTagName('DIV')[0]; outerContentDiv.appendChild(contentDiv); outerContentDiv.id = 'paneContent' + dhtmlgoodies_paneIndex; outerContentDiv.className = 'panelContent'; var topBar = document.createElement('DIV'); topBar.onselectstart = cancelXpWidgetEvent; var span = document.createElement('SPAN'); span.innerHTML = panelTitles[dhtmlgoodies_paneIndex]; topBar.appendChild(span); topBar.onclick = showHidePaneContent; if(document.all)topBar.ondblclick = showHidePaneContent; topBar.onmouseover = mouseoverTopbar; topBar.onmouseout = mouseoutTopbar; topBar.style.position = 'relative'; var img = document.createElement('IMG'); img.id = 'showHideButton' + dhtmlgoodies_paneIndex; img.src = 'images/arrow_up.gif'; topBar.appendChild(img); if(cookieArray[dhtmlgoodies_paneIndex]){ cookieValue = Get_Cookie(cookieArray[dhtmlgoodies_paneIndex]); if(cookieValue)panelDisplayed[dhtmlgoodies_paneIndex] = cookieValue==1?true:false; } if(!panelDisplayed[dhtmlgoodies_paneIndex]){ outerContentDiv.style.height = '0px'; contentDiv.style.top = 0 - contentDiv.offsetHeight + 'px'; if(document.all)outerContentDiv.style.display='none'; img.src = 'images/arrow_down.gif'; } topBar.className='topBar'; divs[no].appendChild(topBar); divs[no].appendChild(outerContentDiv); dhtmlgoodies_paneIndex++; } } } function panel(objname) { obj = findobj(objname); img = findobj(objname+"_img"); collapsed = getcookie("siteengine_panel"); cookie_start = collapsed ? collapsed.indexOf(objname) : -1; cookie_end = cookie_start + objname.length + 1; if(obj.style.display == "none") { obj.style.display = ""; img_re = new RegExp("_yes\\.gif$"); img.src = img.src.replace(img_re, '_no.gif'); if(cookie_start != -1) collapsed = collapsed.substring(0, cookie_start) + collapsed.substring(cookie_end, collapsed.length); } else { obj.style.display = "none"; img_re = new RegExp("_no\\.gif$"); img.src = img.src.replace(img_re, '_yes.gif'); if(cookie_start == -1) collapsed = collapsed + objname + " "; } expires = new Date(); expires.setTime(expires.getTime() + (collapsed ? 86400 * 30 : -(86400 * 30 * 1000))); document.cookie = "siteengine_panel=" + escape(collapsed) + "; expires=" + expires.toGMTString() + "; path=/"; } function imgzoom(o) { if(event.ctrlKey) { var zoom = parseInt(o.style.zoom, 10) || 100; zoom -= event.wheelDelta / 12; if(zoom > 0) { o.style.zoom = zoom + '%'; } return false; } else { return true; } }