Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何计算slideToggle()的速度_Javascript_Jquery_Slidetoggle_Jquery Easing - Fatal编程技术网

Javascript 如何计算slideToggle()的速度

Javascript 如何计算slideToggle()的速度,javascript,jquery,slidetoggle,jquery-easing,Javascript,Jquery,Slidetoggle,Jquery Easing,我有一个导航菜单和几个手风琴风格的项目。一些“父”链接的子链接比其他链接的子链接多。我想改变slideToggle()的速度,这样孩子越多的孩子到slideDown()的时间就越长。这是我试过的,但出于某种原因,它会跳来跳去。正如你所看到的,根本没有缓和 //获取每个列表的高度并将其保存在数据高度属性中 $('.main nav>ul>li>ul')。每个(函数(){ $(此).slideDown(0); $(this.data('height',$(this.height()); $(此).

我有一个导航菜单和几个手风琴风格的项目。一些“父”链接的子链接比其他链接的子链接多。我想改变
slideToggle()
的速度,这样孩子越多的孩子到
slideDown()
的时间就越长。这是我试过的,但出于某种原因,它会跳来跳去。正如你所看到的,根本没有缓和

//获取每个列表的高度并将其保存在数据高度属性中
$('.main nav>ul>li>ul')。每个(函数(){
$(此).slideDown(0);
$(this.data('height',$(this.height());
$(此).slideUp(0);
});
$('.main nav>ul>li')。单击(函数(){
//将元件的高度乘以所需的速度
$(this).children().slideToggle($(this).data('height')*1000,'easeInOutExpo');
});
.main导航{
位置:固定;
排名:0;
左:0;
}
.主导航ul{
列表样式类型:无;
填充:0;
保证金:0;
字号:18px;
}
.主导航ul li{
填充:22px0;
光标:指针;
}
.主导航>ul{
填充:0 22px;
}
.主导航>ul>li>ul{
显示:无;
}
*,
*:之前,
*:之后{
框大小:边框框;
}

  • 全球的
    • 印刷术
    • 颜色
    • 图标
  • 元素
    • 正文
    • 钮扣
    • 列表
    • 桌子
    • 媒体
  • 控制
    • 下拉列表
    • 警报
    • 徽章
    • 情态动词
  • 布局
    • 动态行
    • 弯曲
  • 组成部分
    • 纸牌
    • 横幅
    • 项目编辑器
    • 项目索引
    • jQueryUI
    • 登录
    • 主要
    • 详图(和详图视图)
    • 深入调查
    • 大菜单
    • 航行
    • 搜寻
    • 厚物品
    • 小部件

$(this).data('height')
似乎未定义,因此您似乎最终将
NaN
作为第一个参数传递给
slideToggle()
函数,我不确定修复方法是什么,但希望它能将您指向正确的方向,而不是基于高度,我建议根据
ul
中有多少
li
元素来计算(如果1000对您来说太慢,您可能需要修改乘数)

//获取每个列表的高度并将其保存在数据高度属性中
$('.main nav>ul>li>ul')。每个(函数(){
$(此).slideUp(0);
});
$('.main nav>ul>li')。单击(函数(){
//将元件的高度乘以所需的速度
$(this).children().slideToggle($(this).find(“li”).length*1000,“easeInOutExpo”);
});
.main导航{
位置:固定;
排名:0;
左:0;
}
.主导航ul{
列表样式类型:无;
填充:0;
保证金:0;
字号:18px;
}
.主导航ul li{
填充:22px0;
光标:指针;
}
.主导航>ul{
填充:0 22px;
}
.主导航>ul>li>ul{
显示:无;
}
*,
*:之前,
*:之后{
框大小:边框框;
}

  • 全球的
    • 印刷术
    • 颜色
    • 图标
  • 元素
    • 正文
    • 钮扣
    • 列表
    • 桌子
    • 媒体
  • 控制
    • 下拉列表
    • 警报
    • 徽章
    • 情态动词
  • 布局
    • 动态行
    • 弯曲
  • 组成部分
    • 纸牌
    • 横幅
    • 项目编辑器
    • 项目索引
    • jQueryUI
    • 登录
    • 主要
    • 详图(和详图视图)
    • 深入调查
    • 大菜单
    • 航行
    • 搜寻
    • 厚物品
    • 小部件

像这样的
$(this.children().length*1000
而不是
$(this.data('height')*1000
?这是个好主意,@imtheman!非常感谢@imtheman嗯,那是返回“1”。啊,是的,我没有意识到点击的是父
li
。我已经添加了一个正确方法的答案(至少用这种方法)。