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 相关文章推荐
jQueryUI如何自定义组件实现代码
Nov 14 Javascript
JavaScript异步回调的Promise模式封装实例
Jun 07 Javascript
基于jquery的手风琴图片展示效果实现方法
Dec 16 Javascript
详解JavaScript中getFullYear()方法的使用
Jun 10 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
Sep 01 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
Aug 23 Javascript
JavaScript实现多栏目切换效果
Dec 12 Javascript
解析Vue2 dist 目录下各个文件的区别
Nov 22 Javascript
vue 实现剪裁图片并上传服务器功能
Mar 01 Javascript
详解基于mpvue的小程序markdown适配解决方案
May 08 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 Javascript
深入理解es6块级作用域的使用
Mar 28 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
Symfony学习十分钟入门经典教程
2016/02/03 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
异步加载script的代码
2011/01/12 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
Python获取远程文件大小的函数代码分享
2014/05/13 Python
Python实现的矩阵类实例
2017/08/22 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
Python pycharm 同时加载多个项目的方法
2019/01/17 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
Python3中的最大整数和最大浮点数实例
2019/07/09 Python
深入理解Python 多线程
2020/06/16 Python
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
大学生水果店创业计划书
2014/01/28 职场文书
保安岗位职责
2014/02/21 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle