var timeclose;
var timeopen;
var nHeight;
function toggle(sDivId){
var oDiv=document.getElementById(sDivId);
if (getStyle(oDiv,'display' )=='block'){
nHeight=fullHeight(oDiv);
closediv(oDiv);
alert(getStyle(oDiv,'display'));//这里得到的结果总是 'block‘
}
else if(getStyle(oDiv,'display')=='none'){
opendiv(oDiv);
}
}
//收缩
function closediv(elem){
clearInterval(timeclose);
clearInterval(timeopen);
if (getStyle(elem,'display')=='block'){
timeclose=setInterval(function(){closepanel(elem);},10);
//alert(nHeight);
}
}
function closepanel(elem){
var cy=fullHeight(elem);
if (cy>0){
elem.style.height=(cy-Math.ceil(cy/5))+"px";
}
else{
clearInterval(timeclose);
elem.style.display="none";//在收缩动作完成后,设置display属性为none,但在上面检测总是为blok
}
}
//展开
function opendiv(elem){
clearInterval(timeclose);
clearInterval(timeopen);
elem.style.display="block";
elem.style.height="1px";
timeopen=setInterval(function(){openpanel(elem);},10);
}
function openpanel(elem){
var cy=fullHeight(elem);
if (cy<nHeight){
elem.style.height=(cy+Math.ceil((nHeight-cy)/5))+"px";
}
else{
clearInterval(timeopen);
}
}
-----------------------------------
自己做一个面板收缩、展开的动画效果,可是红字代码的设置办什么不起作用呢?
本人新手,求高手指教
var timeopen;
var nHeight;
function toggle(sDivId){
var oDiv=document.getElementById(sDivId);
if (getStyle(oDiv,'display' )=='block'){
nHeight=fullHeight(oDiv);
closediv(oDiv);
alert(getStyle(oDiv,'display'));//这里得到的结果总是 'block‘
}
else if(getStyle(oDiv,'display')=='none'){
opendiv(oDiv);
}
}
//收缩
function closediv(elem){
clearInterval(timeclose);
clearInterval(timeopen);
if (getStyle(elem,'display')=='block'){
timeclose=setInterval(function(){closepanel(elem);},10);
//alert(nHeight);
}
}
function closepanel(elem){
var cy=fullHeight(elem);
if (cy>0){
elem.style.height=(cy-Math.ceil(cy/5))+"px";
}
else{
clearInterval(timeclose);
elem.style.display="none";//在收缩动作完成后,设置display属性为none,但在上面检测总是为blok
}
}
//展开
function opendiv(elem){
clearInterval(timeclose);
clearInterval(timeopen);
elem.style.display="block";
elem.style.height="1px";
timeopen=setInterval(function(){openpanel(elem);},10);
}
function openpanel(elem){
var cy=fullHeight(elem);
if (cy<nHeight){
elem.style.height=(cy+Math.ceil((nHeight-cy)/5))+"px";
}
else{
clearInterval(timeopen);
}
}
-----------------------------------
自己做一个面板收缩、展开的动画效果,可是红字代码的设置办什么不起作用呢?
本人新手,求高手指教
if ( getStyle( elem,'display')!= 'none')
return elem.offsetHeight || getHeight( elem );
var old = resetCSS( elem, {
display:'',
visibility: 'hidden',
position: 'absolute'
});
var h = elem.clientHeight || getHeight( elem ); restoreCSS( elem, old ); return h;
}这是一个得到元素高度的函数。
var timeclose;
var timeopen;
var nHeight;//保存元素原始高度的参数
function toggle(sDivId){
var oDiv=document.getElementById(sDivId);
if (getStyle(oDiv,'display' )=='block'){
nHeight=fullHeight(oDiv);
closediv(oDiv);
alert(getStyle(oDiv,'display'));
}
else if(getStyle(oDiv,'display')=='none')
{
opendiv(oDiv);
}
}
//获取元素的样式属性
function getStyle( elem, name ) {
if (elem.style[name])
return elem.style[name];
else if (elem.currentStyle)
return elem.currentStyle[name];
else if (document.defaultView && document.defaultView.getComputedStyle) {
name = name.replace(/([A-Z])/g,"-$1");
name = name.toLowerCase();
var s = document.defaultView.getComputedStyle(elem,"");
return s && s.getPropertyValue(name);
} else
return null;
}function getHeight( elem ) {
return parseInt( getStyle( elem, 'height' ) );
function fullHeight( elem ) {
if ( getStyle( elem,'display')!= 'none')
return elem.offsetHeight || getHeight( elem );
var old = resetCSS( elem, {
display:'',
visibility: 'hidden',
position: 'absolute'
});
var h = elem.clientHeight || getHeight( elem );
restoreCSS( elem, old );
return h;
}function fullWidth( elem ) {
if ( getStyle( elem, 'display' ) != 'none' )
return elem.offsetWidth || getWidth( elem );
var old = resetCSS( elem, {
display: '',
visibility: 'hidden',
position: 'absolute'
}); var w = elem.clientWidth || getWidth( elem );
restoreCSS( elem, old );
return w;
}function resetCSS( elem, prop ) {
var old = {};
for ( var i in prop ) {
old[ i ] = elem.style[ i ];
elem.style[ i ] = prop[i];
}
return old;
}function restoreCSS( elem, prop ) {
for ( var i in prop )
elem.style[ i ] = prop[ i ];
}//收缩
function closediv(elem){
clearInterval(timeclose);
clearInterval(timeopen);
if (getStyle(elem,'display')=='block'){
timeclose=setInterval(function(){closepanel(elem);},10);
}
}
function closepanel(elem){
var cy=fullHeight(elem);
if (cy>0){
elem.style.height=(cy-Math.ceil(cy/5))+"px";
}
else{
clearInterval(timeclose);
elem.style.display="none";
//alert(getStyle(oDiv,'display'));
}
}
//展开
function opendiv(elem){
clearInterval(timeclose);
clearInterval(timeopen);
elem.style.display="block";
elem.style.height="1px";
timeopen=setInterval(function(){openpanel(elem);},10);
}
function openpanel(elem){
var cy=fullHeight(elem);
if (cy<nHeight){
elem.style.height=(cy+Math.ceil((nHeight-cy)/5))+"px";
}
else{
clearInterval(timeopen);
}
}
function closepanel(elem){
var cy=fullHeight(elem);
if (cy>0){ <-----------------------------------这里,cy总是大于0,所以不会执行else后面的语句,改为cy>10后搞定了。谢谢孟老大的提醒。
elem.style.height=(cy-Math.ceil(cy/5))+"px";
}
else{
clearInterval(timeclose);
elem.style.display="none";
//alert(getStyle(oDiv,'display'));
}
}