【发布时间】:2017-04-01 00:45:25
【问题描述】:
我有一个由滚动事件触发的动画,它使菜单滑出视图。还有一个按钮,单击该按钮可重新显示菜单。
因为菜单可以通过滚动来关闭,所以当用户点击按钮进入菜单时,如果他们在动画的这段时间内滚动,菜单会再次消失,而动画没有完成。
我在这里整理了一个简化版的动画http://codepen.io/emilychews/pen/evbzMQ
我需要在单击按钮后暂时阻止滚动功能工作,我假设最好使用单击功能上的 setTimeout() 方法来完成?我已经尝试了很多事情,但似乎无法解决它/让它发挥作用。
任何帮助都会很棒。为了快速参考,代码如下
JQUERY
jQuery(document).ready(function($){
// slide menu to left on scroll
function hideOnScroll() {
$(window).scroll(function() {
if ( $(document).scrollTop() > 1) {
$('.menubox').css('left', '-25%');
}
});
}
hideOnScroll(); // call hideOnScroll function
// click handler to bring menu back in
$('.mybutton').on('click', function() {
$('.menubox').css('left', '0%');
var scrollPause = setTimeout(hideOnScroll, 2000) // temporarily pause hideOnScroll function
});
}); //end of jQuery
CSS
body {
margin: 0;
padding: 0;
height: 200vh;}
.menubox {
top: 100;
position: fixed;
width: 20%;
height: 100%;
background: red;
padding: 10px;
color: white;
transition: all 2s;
}
.mybutton {
position: fixed;
left: 40%;
top: 50px;
padding: 5px 10px;
}
HTML
<div class="menubox">Menu Box</div>
<button class="mybutton">Click to bring back menu</button>
** 另外请注意,为了论坛,我已经简化了动画,实际的动画函数包含 Greensock 代码,但我不想包含这个,以免混淆问题。因此,我不能只使用 .addClass() 和 .removeClass() 或有一种解决方法来更改给定的 CSS 或 scrollTop() 值。在单击调用动画的持续时间内单击按钮时,我需要禁用 hideOnScroll() 函数 - 在示例中为 2 秒。因此,我认为实现这一点的唯一方法是使用 setTimeOut() 方法(我可能错了)。但我无法让它工作。
非常感谢
艾米丽
【问题讨论】:
-
我遇到了你的问题..我实现了它并尝试自己解决它..我认为你没有尝试使用 css 中默认转换属性的 -webkit-transition 和 -moz-transition。 ..如果你使用它,那么它肯定会完成它的动画,而不管任何其他动作。
-
嗨,Tirthraj,这不是我要解决的问题。我放了一个基本动画来说明我需要做什么。我想要发生的是当单击按钮以将菜单带回 hideOnScroll() 函数时设置为 false 2000 毫秒。我已经更新了 CSS,所以动画可以在旧版浏览器上显示,非常感谢。
-
我在发布该评论后理解了您的问题.. 解决了一段时间.. 我仍在努力.. 很快就会分享解决方案..!
标签: javascript jquery function settimeout