Javascript 在整个页面上垂直向下滑动
我正在做一个项目,我需要一个半透明的div在某个点滑动整个页面。我有一个版本目前正在工作,但它不像我希望的那样顺利 上面示例中的jQuery:Javascript 在整个页面上垂直向下滑动,javascript,jquery,animation,Javascript,Jquery,Animation,我正在做一个项目,我需要一个半透明的div在某个点滑动整个页面。我有一个版本目前正在工作,但它不像我希望的那样顺利 上面示例中的jQuery: var windowWidth = $(window).innerWidth(); var windowHeight = $(window).innerHeight(); function blackOut() { $('#fail-screen').css({ "width": windowWidth + "px",
var windowWidth = $(window).innerWidth();
var windowHeight = $(window).innerHeight();
function blackOut() {
$('#fail-screen').css({
"width": windowWidth + "px",
"height": windowHeight + "px"
});
$('#fail-screen').delay(1000).animate({
top: '0px'
}, 1000, 'linear');
}
$(document).ready(function () {
blackOut(windowWidth, windowHeight);
});
正如你所看到的,我正在获取innerWidth和height来设置“fail screen”div,因为将其设置为100%效果不佳。我正在使用jQuery设置“fail screen”div顶部位置的动画
同样,我只是想重构这段代码,并提高整体的表示和性能。我愿意使用动画/物理库,如果有人知道可以在这里使用的任何库
非常感谢您的建议。正如@Jason所提到的,我强烈建议您使用CSS转换,而不是摆弄偏移量。这不仅是将CSS转换卸载到GPU(在需要时由浏览器智能地确定,但您也可以强制执行),而且还允许进行亚像素渲染。保罗·爱尔兰(Paul Irish)早在2012年就谈到了这个话题 此外,您的代码在处理视口大小调整事件失败的意义上有点问题。事实上,一个更简单的解决方案是使用
位置:fixed
,然后使用CSS转换在延迟后将元素带入视图
请参见此处更新的fiddle:
对于JS,我们只需使用.css()
方法。延迟、动画持续时间甚至计时功能都可以通过CSS轻松完成
新的JS非常简单:我们设置了#fail screen
的转换,以便将其移回原来的垂直位置。jQuery自动为transform
属性添加前缀;)
对于CSS,我们最初将垂直平移(translateY
)设置为-100%,这意味着我们将元素按其自身高度向上推。使用固定定位并将所有四个偏移声明为0
,我们可以强制元素填充视口,而无需通过JS监听窗口大小调整事件。请记住,您必须将供应商前缀添加到transform
属性,以最大限度地提高跨浏览器兼容性
CSS还可以处理转换延迟、持续时间甚至计时功能,即转换:[property][duration][timing function][delay]代码>因为在jQuery代码中,您已经将持续时间和延迟都设置为500ms,所以它应该是转换:所有0.5s线性0.5s
。然而,线性定时功能看起来不太好-也许使用易入易出
会更好,或者甚至是定制
另外,我建议将不透明度移动到背景色
值,因为如果在元素本身上设置不透明度,所有子节点也将以0.6不透明度渲染。。。这可能是你不想实现的事情
#fail-screen{
top: 0;
left: 0;
bottom: 0;
right: 0;
background-color: rgba(0,0,0,.6); /* Moved opacity to background-color */
position: fixed; /* Use fixed positioning */
z-index: 303;
/* Use CSS transform to move the element up by its own height */
-webkit-transform: translateY(-100%);
-ms-transform: translateY(-100%);
-o-transform: translateY(-100%);
transform: translateY(-100%);
/* CSS transition */
transition: all .5s ease-in-out .5s;
}
正如@Jason所提到的,我强烈建议使用CSS转换,而不是摆弄偏移量。这不仅是将CSS转换卸载到GPU(在需要时由浏览器智能地确定,但您也可以强制执行),而且还允许进行亚像素渲染。保罗·爱尔兰(Paul Irish)早在2012年就谈到了这个话题
此外,您的代码在处理视口大小调整事件失败的意义上有点问题。事实上,一个更简单的解决方案是使用位置:fixed
,然后使用CSS转换在延迟后将元素带入视图
请参见此处更新的fiddle:
对于JS,我们只需使用.css()
方法。延迟、动画持续时间甚至计时功能都可以通过CSS轻松完成
新的JS非常简单:我们设置了#fail screen
的转换,以便将其移回原来的垂直位置。jQuery自动为transform
属性添加前缀;)
对于CSS,我们最初将垂直平移(translateY
)设置为-100%,这意味着我们将元素按其自身高度向上推。使用固定定位并将所有四个偏移声明为0
,我们可以强制元素填充视口,而无需通过JS监听窗口大小调整事件。请记住,您必须将供应商前缀添加到transform
属性,以最大限度地提高跨浏览器兼容性
CSS还可以处理转换延迟、持续时间甚至计时功能,即转换:[property][duration][timing function][delay]代码>因为在jQuery代码中,您已经将持续时间和延迟都设置为500ms,所以它应该是转换:所有0.5s线性0.5s
。然而,线性定时功能看起来不太好-也许使用易入易出
会更好,或者甚至是定制
另外,我建议将不透明度移动到背景色
值,因为如果在元素本身上设置不透明度,所有子节点也将以0.6不透明度渲染。。。这可能是你不想实现的事情
#fail-screen{
top: 0;
left: 0;
bottom: 0;
right: 0;
background-color: rgba(0,0,0,.6); /* Moved opacity to background-color */
position: fixed; /* Use fixed positioning */
z-index: 303;
/* Use CSS transform to move the element up by its own height */
-webkit-transform: translateY(-100%);
-ms-transform: translateY(-100%);
-o-transform: translateY(-100%);
transform: translateY(-100%);
/* CSS transition */
transition: all .5s ease-in-out .5s;
}
正如@Jason所提到的,我强烈建议使用CSS转换,而不是摆弄偏移量。这不仅是将CSS转换卸载到GPU(在需要时由浏览器智能地确定,但您也可以强制执行),而且还允许进行亚像素渲染。保罗·爱尔兰(Paul Irish)早在2012年就谈到了这个话题
此外,您的代码在处理视口大小调整事件失败的意义上有点问题。事实上,一个更简单的解决方案是使用位置:fixed
,然后使用CSS转换在延迟后将元素带入视图
请参见此处更新的fiddle:
对于JS,我们只需使用.css()
方法。延迟、动画持续时间甚至计时功能都可以通过CSS轻松完成
新的JS相当严格