Javascript实现div的toggle效果实例分析


Posted in Javascript onJune 09, 2015

本文实例讲述了Javascript实现div的toggle效果。分享给大家供大家参考。具体分析如下:

<script type="text/javascript" language="javascript">
  function $(obj)
  {
  return document.getElementById(obj);
  }
  function ToggleDiv()
  {
  this.ToggleId='silder'; //被伸缩的对象ID
  this.ParentId='container'; //被伸缩的对象的父ID
  this.minHeight=1; //最小高度
  this.maxHeight=200; //最大高度
  this.speed=1; //伸缩速度
  this.offset=0.15; //偏移量
  this.load=function()
  {
   if($(this.ToggleId).style.display=='none') //如果是隐藏的就打开
   {
    StartToggle('open',this.ToggleId,this.ParentId,this.minHeight,this.maxHeight,this.speed,this.offset);
   }
   else //如果是打开的就隐藏
   {
     StartToggle('close',this.ToggleId,this.ParentId,this.minHeight,this.maxHeight,this.speed,this.offset);
   }
  }
  }
  function StartToggle(method,toggleid,parentid,minheight,maxheight,speed,offset)
  {
  if(typeof(method)!='string' || method.toLowerCase()=='')
  {
   method='open';
  }
  if(method.toLowerCase()=='open')
  {
   var addspeed=speed+offset;
   var openfun=function()
   {
    var originheight=$(toggleid).offsetHeight==0?1:$(toggleid).offsetHeight;
    var newheight=originheight+addspeed;
    addspeed=addspeed+offset;
    if(parseInt(newheight)<parseInt(maxheight))
    {    
     $(toggleid).style.height=newheight+'px';
     $(toggleid).style.display='block';
    }
    else if(parseInt(newheight)>=parseInt(maxheight))
    {
     $(toggleid).style.height=maxheight+'px';
     $(toggleid).style.display='block';
     $(parentid).innerHTML='收缩';
     window.clearInterval(addtimer);
    }
   }
   var addtimer=window.setInterval(openfun,100);
  }
  else if(method.toLowerCase()=='close')
  {
   var addspeed=speed+offset;
   var reducefunction=function()
   {
    var originheight=$(toggleid).offsetHeight;
    var newheight=originheight-addspeed;
    addspeed=addspeed+offset;
    if(parseInt(newheight)>parseInt(minheight))
    {
     $(toggleid).style.height=newheight+'px';
     $(toggleid).style.display='block';
    }
    else
    {
     $(toggleid).style.display='none';
     $(toggleid).style.height='1px';
     $(parentid).innerHTML='展开';
     window.clearInterval(reducetimer);
    }
   }
   var reducetimer=window.setInterval(reducefunction,100);
  }
  }
  function DoToggle(obj1,obj2)
  {
  var tog=new ToggleDiv();
  tog.ToggleId=obj1;
  tog.ParentId=obj2;
  tog.minHeight=5;
  tog.maxHeight=110;
  tog.speed=10;
  tog.offset=3;
  tog.load();
  }
</script>

用法示例如下:

<div style="border:1px dashed blue;width:200px;">
  <h2 id="container" onclick="javascript:DoToggle('silder',this.id);" onmouseover="this.style.cursor='pointer';">展开</h2>
  <div id="silder" style="display:none">
  伸缩效果<br />
  伸缩效果<br />
  伸缩效果<br />
  伸缩效果<br />伸缩效果<br />
  伸缩效果<br />
  </div>
</div>

代码中有些东东是多余的或者是重复的。本想精简单一下,但是一想,思路有了就行了。

以下是本次练习中的一些经验小结:

1、在style.display='none'与style.visibility='hidden'时读取对象的offsetHeight值将会有所不同。
style.display='none'读出来的,将是 0 ,而style.visibility='hidden'时读取的是对象加载时的offsetHeight,比如 108等。

2、style.height的值并不是整型或number型的,别忘了它是有单位的哦:如 "108px"而不是"108",而offsetHeight的值是 108.

3、setTimeout和setInterval

它们都有两种使用方法,以setTimeout为例:

方法一:setTimeout(function,interval,args) 参数一为函数名或匿名函数,参数2为时间间隔,参数3到N是所调用函数的参数,如下例:

setTimeout(function(){alert('1');},1000) setTimeout(GetStr,1000,'McJeremy')

方法二:setTimeout(object,function,interval) 参数一为调用的对象,参数2为对象中的方法,参数3为时间间隔。

有个有趣的东东:

function a()
{
 setTimeout(function(){alert('1');},0);
 alert('2');
}

猜输出结果是什么?

答案: 21 ,而不是12哦。这是因为,JS函数执行也像其它编程语言一样有堆栈的。alert('1')因为有setTimeout,所以最后执行。。。不知道我这样理解对不对。

完成收功!

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
基于jquery的文章中所有图片width大小批量设置方法
Aug 01 Javascript
Javascript实现简单的富文本编辑器附演示
Jun 16 Javascript
javascript编写实用的省市选择器
Feb 12 Javascript
JS绘制生成花瓣效果的方法
Aug 05 Javascript
超漂亮的jQuery图片轮播特效
Nov 24 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
Apr 28 Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 Javascript
详解vue slot插槽的使用方法
Jun 13 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
Jan 24 Javascript
JavaScript实现学生在线做题计时器功能
Dec 05 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
Sep 25 Javascript
JavaScript实现显示和隐藏图片
Apr 29 Javascript
js获取字符串字节数方法小结
Jun 09 #Javascript
Javascript对象Clone实例分析
Jun 09 #Javascript
JS动态创建DOM元素的方法
Jun 09 #Javascript
JavaScript获取数组最小值和最大值的方法
Jun 09 #Javascript
JavaScript获取两个数组交集的方法
Jun 09 #Javascript
JavaScript实现函数返回多个值的方法
Jun 09 #Javascript
JavaScript中的getDay()方法使用详解
Jun 09 #Javascript
You might like
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
Python快速排序算法实例分析
2017/11/29 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
幼儿园春游活动方案
2014/01/19 职场文书
大专毕业自我鉴定
2014/02/04 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
保护地球的标语
2014/06/17 职场文书
五一活动标语
2014/06/30 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python