【问题标题】:If it falls within a div如果它属于一个div
【发布时间】:2011-03-31 17:25:08
【问题描述】:

有没有办法检测元素当前是否位于 div 中?

我有滚动垂直菜单。我设置了导航 div 的高度,然后溢出:隐藏,所以我一次只能看到几个链接。

因此,我单击导航底部的图形以将链接向下移动。我在顶部有另一个图形以获得相反的效果。

但是,我找不到停止动画的可靠方法。所以这个动作一直在第一个和最后一个菜单链接之前进行。

你可以在http://test2omniforce.co.uk/test看到问题

【问题讨论】:

    标签: jquery css scroll


    【解决方案1】:

    您需要在单击按钮时测试 div#content 上边距的当前值。例如,顶部按钮的动画应该只在 div#content margin-top 小于 0 时播放,底部按钮的动画在 margin-top 大于 -500 时播放。

    【讨论】:

    • 我如何测试元素margin-top?
    • $('div#content').css('margin-top') 会给你上边距。看看这个:jsfiddle.net/yCreg
    【解决方案2】:

    为了回答你的问题,jQuery 提供了:hashelp 伪选择器用于检测。好像

    if( $('div:has(span)').length )  { }  // true if a div contains a `<span>` node.
    

    但我不认为这是你的问题。要可靠地停止动画,您只需调用 .stop()help
    大概喜欢

    $('div').stop(true,true).animate() // ...
    

    参数告诉jQuery,清除当前fx队列并跳转到最后。

    另一种避免多次执行异步效果的技术是调用:animatedhelp 伪选择器。这样,您可以检测元素当前是否为动画,如果是,则什么也不做。

    if( $('div').is(':animated') ) { }  // div is currently animated
    

    【讨论】:

    • OP 实际上无法确定该 div 内的内容是否超出视口(?)。在制作动画之前,他需要确定菜单的顶部/底部是否可见。
    【解决方案3】:

    试试这个:

    if ( $('#myElement').closest('div').length > 0 ) {
        // yup, I'm inside a DIV
    }
    

    您还可以在.closest() 函数中插入适当的jQuery 选择器。因此,要检查一个元素是否在我的可滚动 DIV 中,您可以使用:

    $('#myElement').closest('div#myScrollableDiv').length > 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      相关资源
      最近更新 更多