Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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 在整个页面上垂直向下滑动_Javascript_Jquery_Animation - Fatal编程技术网

Javascript 在整个页面上垂直向下滑动

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",

我正在做一个项目,我需要一个半透明的div在某个点滑动整个页面。我有一个版本目前正在工作,但它不像我希望的那样顺利

上面示例中的jQuery:

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相当严格