jQuery UI盲目效果 - 从底部揭示

ron*_*rns 6 jquery jquery-ui

这可能是非常明显的,我完全错过了它.

我搜索了几个小时,似乎无法找到一种方法,使用jQuery,从底部向上显示一个隐藏的div.我想要实现的目标与以下链接完全相同,但反之亦然:http://jqueryui.com/demos/show/

我可以将div从底部滑到顶部,但这会在它移动时显示出来,而不是被"蒙面".

就像我说的,这可能(应该?)非常明显,我没有看到它,但我一直在寻找年龄,并找不到这个相对简单的问题的解决方案.

谢谢,

罗尼

Fré*_*idi 14

您正在寻找的效果有点难以实现,但即使没有包装元素也可以完成.

这里的主要问题是元素自然地呈现自上而下,而不是自下而上.动画相对定位元素的CSS topheightCSS属性允许我们实现上滑效果,但元素仍将自上而下渲染:

+-------------------------------------------+
|                                           |  ^
|                                           |  |  Hidden area collapses upwards.
|                                           |  |
+-------------------------------------------+ <-- 'top'
|                                           |  ^
|  |  Upper part of element (visible).      |  |  
|  |                                        |  |  Animation goes bottom-up.
|  |  Element still renders top-down.       |  |  
|  |                                        |  |
+--|----------------------------------------+ <-- 'top + height' 
|  |                                        |  |
|  |  Lower part of element (hidden).       |  |
|  V                                        |  |
+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

如果我们想要模拟自底向上渲染,我们必须在动画期间修改元素的scrollTop属性,以使其下半部分始终保持在视图中:

+-------------------------------------------+
|                                           |  ^
|  |  Upper part of element (hidden).       |  |  Hidden area collapses upwards.
|  |                                        |  |
+--|----------------------------------------+ <-- 'top' and 'scrollTop'
|  |                                        |  ^
|  |  Element still renders top-down.       |  |  
|  |                                        |  |  Animation goes bottom-up.
|  |  Lower part of element (visible).      |  |  
|  V                                        |  |
+-------------------------------------------+ <-- 'top + height' 
Run Code Online (Sandbox Code Playgroud)

我们可以用动画()scrollTop,但与一起这样做top,并height没有在我的测试中正常工作(我怀疑scrollTop是复位时topheight在第一动画步骤中修改,所以它最终陷进去0).

为了解决这个问题,我们可以scrollTop通过我们可以传递的可选步骤函数来处理animate().该功能被称为有两个参数,now并且fx,now作为动画处理的属性的当前值和fx被周围有用信息的包装对象,像元件和属性进行动画.

由于我们总是想要scrollTop相同top,我们只需要测试top我们的step函数是否正在动画.如果是,我们设置scrollTopnow.这个解决方案给出了可接受的结果,虽然它对我的品味有点过多(尽管可能是我浏览器的神器).

总而言之,要实现这种效果,我们必须:

  • 获取元素的原始高度,
  • 制作元素,position: relative;以便我们可以为其top属性设置动画,
  • 通过设置折叠元素top到原来的高度,height0,
  • 显示元素(自display: none;应用以来必要的小提琴),
  • 动画top0height原来的高度,
  • 给出每个动画步骤scrollTop的值top.

导致以下代码:

$("#click").click(function() {
    var $revealMe = $("#revealMe");
    var originalHeight = $revealMe.height();
    $revealMe.css({
        position: "relative",
        top: originalHeight,
        height: 0
    }).show().animate({
        top: 0,
        height: originalHeight
    }, {
        duration: 1000,
        step: function(now, fx) {
            if (fx.prop == "top") {
                $(fx.elem).scrollTop(now);
            }
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

你可以用这个小提琴来测试它.

  • 大家好,我在这里偶然发现了你的解决方案,这是一个非常详细的回复,非常有帮助.我不喜欢正在发生的闪烁,所以我冒昧地编辑你的小提琴,我找到了一个解决方案:[这个小提琴](http://jsfiddle.net/gBY8V/153/)它基本上是小数点在滚动顶部不能正常工作,所以我找到了强制舍入值的方法.希望能帮助到你! (2认同)

j08*_*691 6

如何使用带方向选项的滑块而不是盲目?这是一个jsFiddle示例.

jQuery的:

$( "#effect" ).show( 'slide', { direction: "down" } , 500);
Run Code Online (Sandbox Code Playgroud)