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图片自动或手动切换示例附演示源码
Sep 04 Javascript
JavaScript实现生成GUID(全局统一标识符)
Sep 05 Javascript
js跨域问题浅析及解决方法优缺点对比
Nov 08 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
May 18 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
Sep 14 Javascript
谈一谈jQuery核心架构设计
Mar 28 Javascript
Angular2  NgModule 模块详解
Oct 19 Javascript
bootstrapValidator.min.js表单验证插件
Feb 09 Javascript
angularjs 页面自适应高度的方法
Jan 17 Javascript
JS简单添加元素新节点的方法示例
Feb 10 Javascript
Vue axios设置访问基础路径方法
Sep 19 Javascript
IE8中jQuery.load()加载页面不显示的原因
Nov 15 jQuery
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 水平的题目
2007/05/30 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
vue登录注册实例详解
2019/09/14 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
使用python实现个性化词云的方法
2017/06/16 Python
Python批量发送post请求的实现代码
2018/05/05 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
Django中的ajax请求
2018/10/19 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
优秀的毕业生的自我评价
2013/12/12 职场文书
致跳远、跳高运动员广播稿
2014/01/09 职场文书
高中地理教学反思
2014/01/29 职场文书
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
写得不错的求职信范文
2014/07/11 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis