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 相关文章推荐
JavaScript传递变量: 值传递?引用传递?
Feb 22 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
Dec 06 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
May 07 Javascript
将HTML格式的String转化为HTMLElement的实现方法
Aug 07 Javascript
js获得当前系统日期时间的方法
May 06 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
JS实现的简易拖放效果示例
Dec 29 Javascript
微信小程序自定义底部导航带跳转功能
Nov 27 Javascript
JS开发常用工具函数(小结)
Jul 04 Javascript
微信js-sdk 录音功能的示例代码
Nov 01 Javascript
Javascript异步流程控制之串行执行详解
Sep 27 Javascript
JavaScript声明变量和数据类型的转换
Apr 12 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
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
Python学习笔记(二)基础语法
2014/06/06 Python
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python实现FTP文件传输的实例
2019/07/07 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
python如何使用代码运行助手
2020/07/03 Python
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
小学岗位竞聘方案
2014/01/22 职场文书
骨干教师考核方案
2014/05/09 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript