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 相关文章推荐
js兼容火狐显示上传图片预览效果的方法
May 21 Javascript
Javascript获取随机数的实现方法
Jun 22 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
jQuery Dialog 取消右上角删除按钮事件
Sep 07 Javascript
微信小程序 video详解及简单实例
Jan 16 Javascript
JS实现最简单的冒泡排序算法
Feb 15 Javascript
jQuery选择器之属性筛选选择器用法详解
Sep 19 jQuery
微信小程序wx.request实现后台数据交互功能分析
Nov 25 Javascript
vue-router+nginx 非根路径配置方法
Jun 30 Javascript
vue-cli3+typescript初体验小结
Feb 28 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
Oct 13 Javascript
详解 TypeScript 枚举类型
Nov 02 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
两个强悍的php 图像处理类1
2009/06/15 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
php获得url参数中具有&amp;的值的方法
2014/03/05 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
隐性调用php程序的方法
2015/06/13 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
python机器学习之神经网络(二)
2017/12/20 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
Django Form常用功能及代码示例
2020/10/13 Python
美国创意之家:BulbHead
2017/07/12 全球购物
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
银行存款证明样本
2014/01/17 职场文书
大学运动会通讯稿
2014/01/28 职场文书
办公室副主任职责范本
2014/03/08 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
Nginx的gzip相关介绍
2022/05/11 Servers