单击图像时部分暴露 div 向上滑动
Partially exposed div to slide up when image is clicked
这可能很奇怪,但我想做的是当有人单击图像时,div 从屏幕底部向上滑动。为了更清楚地描绘这一点,想象一下 Windows 桌面,如果您单击开始菜单 image/icon,而不是从按钮弹出开始菜单,整个开始菜单栏将向上滑动,露出整个 div。
我现在正在做的(请原谅我刚从codecademy学习JS和jQuery)是使用slideUp功能。然而,这会导致 div 滑下而不是向上滑出视线,从而暴露整个 div。目标是当你点击按钮时 div 向上滑动,如果你再次点击按钮(或 div 之外的任何地方)它会向下滑动,留下顶部 60px 像以前一样暴露。
这是我的 JS/jQuery 代码:
$('#start').click(function() {
$('#nav').slideUp('slow');
});
我的HTML
<div id="nav" class="nav">
<img id="start" src="img/btn_start.png">
</div>
我的CSS
* {
padding: 0px;
margin: 0px;
}
body {
width: 100%;
font-family: Helvetica;
}
.nav {
width: 100%;
min-width: 100%;
height: 500px;
background: #000;
color: #fff;
position: absolute;
bottom: -440px;
text-align: center;
padding: 5px;
box-sizing: border-box;
overflow: auto;
}
.nav ul li {
display: inline;
}
.nav li {
padding: 20px;
margin-top: 80px;
position: relative;
top: 50%;
transform: translateY(-50%);
}
#start {
float: left;
}
谢谢,我希望这不会太荒谬。
你应该使用
而不是slideUp
$('#start').click(function() {
$('#nav').animate({bottom: "0px"}, 1200);
});
...将从当前位置平滑地动画化,直到底部位于 0px(即与包含元素的底部对齐)。
要获得更流畅的结果,请查看 velocity.js (http://julian.com/research/velocity/),它通过与浏览器帧更新同步来制作更流畅的动画。
JsFiddle 在这里:http://jsfiddle.net/11r46jnm/
您也可以使用 CSS 转换来执行此操作。对于这样的东西,我喜欢将我的 CSS 挂接到 HTML:
上的数据属性
<div id="nav" class="nav" data-nav-state="collapsed">
<img id="start" src="img/btn_start.png">
</div>
...使用javascript更改属性...
$('#start').click(function() {
//toggle the nav element between two states
var currentState = $('#nav').attr("data-nav-state");
var newState = "collapsed";
if ( currentState === "collapsed" ) {
newState = "expanded";
}
$('#nav').attr("data-nav-state", newState);
});
最后我们用CSS设置两个状态的位置,保证过渡平滑。 CSS 转换的性能比 jQuery 好得多,所以如果可以的话我建议使用它们:
#nav[data-nav-state=collapsed] {
bottom: -440px;
}
#nav[data-nav-state=expanded] {
bottom: 0px;
}
#nav {
transition: bottom 1.2s ease;
}
查看此 jsFiddle 演示:http://jsfiddle.net/Lv2saepy/1/
这可能很奇怪,但我想做的是当有人单击图像时,div 从屏幕底部向上滑动。为了更清楚地描绘这一点,想象一下 Windows 桌面,如果您单击开始菜单 image/icon,而不是从按钮弹出开始菜单,整个开始菜单栏将向上滑动,露出整个 div。
我现在正在做的(请原谅我刚从codecademy学习JS和jQuery)是使用slideUp功能。然而,这会导致 div 滑下而不是向上滑出视线,从而暴露整个 div。目标是当你点击按钮时 div 向上滑动,如果你再次点击按钮(或 div 之外的任何地方)它会向下滑动,留下顶部 60px 像以前一样暴露。
这是我的 JS/jQuery 代码:
$('#start').click(function() {
$('#nav').slideUp('slow');
});
我的HTML
<div id="nav" class="nav">
<img id="start" src="img/btn_start.png">
</div>
我的CSS
* {
padding: 0px;
margin: 0px;
}
body {
width: 100%;
font-family: Helvetica;
}
.nav {
width: 100%;
min-width: 100%;
height: 500px;
background: #000;
color: #fff;
position: absolute;
bottom: -440px;
text-align: center;
padding: 5px;
box-sizing: border-box;
overflow: auto;
}
.nav ul li {
display: inline;
}
.nav li {
padding: 20px;
margin-top: 80px;
position: relative;
top: 50%;
transform: translateY(-50%);
}
#start {
float: left;
}
谢谢,我希望这不会太荒谬。
你应该使用
而不是slideUp
$('#start').click(function() {
$('#nav').animate({bottom: "0px"}, 1200);
});
...将从当前位置平滑地动画化,直到底部位于 0px(即与包含元素的底部对齐)。
要获得更流畅的结果,请查看 velocity.js (http://julian.com/research/velocity/),它通过与浏览器帧更新同步来制作更流畅的动画。
JsFiddle 在这里:http://jsfiddle.net/11r46jnm/
您也可以使用 CSS 转换来执行此操作。对于这样的东西,我喜欢将我的 CSS 挂接到 HTML:
上的数据属性<div id="nav" class="nav" data-nav-state="collapsed">
<img id="start" src="img/btn_start.png">
</div>
...使用javascript更改属性...
$('#start').click(function() {
//toggle the nav element between two states
var currentState = $('#nav').attr("data-nav-state");
var newState = "collapsed";
if ( currentState === "collapsed" ) {
newState = "expanded";
}
$('#nav').attr("data-nav-state", newState);
});
最后我们用CSS设置两个状态的位置,保证过渡平滑。 CSS 转换的性能比 jQuery 好得多,所以如果可以的话我建议使用它们:
#nav[data-nav-state=collapsed] {
bottom: -440px;
}
#nav[data-nav-state=expanded] {
bottom: 0px;
}
#nav {
transition: bottom 1.2s ease;
}
查看此 jsFiddle 演示:http://jsfiddle.net/Lv2saepy/1/