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 Ajax方法调用 Asp.Net WebService 的详细实例代码
Apr 27 Javascript
用JavaScript仿PS里的羽化效果代码
Dec 20 Javascript
JQuery设置和去除disabled属性的5种方法总结
May 16 Javascript
火狐下table中创建form导致两个table之间出现空白
Sep 02 Javascript
简介JavaScript中的setDate()方法的使用
Jun 11 Javascript
跟我学习javascript的异步脚本加载
Nov 20 Javascript
js获取图片宽高的方法
Nov 25 Javascript
BootStrap 超链接变按钮的实现方法
Sep 25 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
Jan 10 Javascript
Vue2实时监听表单变化的示例讲解
Aug 30 Javascript
教你搭建按需加载的Vue组件库(小结)
Jul 29 Javascript
聊聊vue 中的v-on参数问题
Jan 29 Vue.js
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
drupal 代码实现URL重写
2011/05/04 PHP
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
Python变量作用范围实例分析
2015/07/07 Python
Python实现完整的事务操作示例
2017/06/20 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
css3media响应式布局实例
2016/07/08 HTML / CSS
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
工伤赔偿协议书
2014/04/15 职场文书
供货协议书范本
2014/04/22 职场文书
舞蹈专业求职信
2014/06/13 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python
MySQL数据库查询之多表查询总结
2022/08/05 MySQL