查找元素与可滚动div顶部的交汇处

布莱恩

我有一个可滚动的div容器,容纳多个“页面”(或div多个)。

我的目标是在任何给定的时刻弄清楚它在红色容器内到达可滚动容器顶部的位置。因此它可以是滚动事件上的常量,也可以是触发此任务的按钮

例如。如果我在的红色框之一内有绝对div元素top:50px如果我滚动到该div元素到达可滚动容器顶部的位置。触发器应该说我在50px我的红色容器中。

我很难掌握如何完成此操作,但是我尝试了以下方法:

$("#pageContent").scroll(function(e) {
    console.log($(this).scrollTop());   
});

但这并没有考虑到单独的页面,我也不认为它完全准确取决于比例。任何指导或帮助将不胜感激。

这是我的代码和一个jsfiddle,可以更好地支持我的问题。

注意:如有必要,我在项目中使用了scrollspy,因此可以确定需要检查的红色容器。

的HTML

<div id="pageContent" class="slide" style="background-color: rgb(241, 242, 247); height: 465px;">
    <div id="formBox" style="height: 9248.627450980393px;">
        <div class="trimSpace" style="width: 1408px; height: 9248.627450980393px;">
            <div id="formScale" style="width: 816px; -webkit-transform: scale(1.7254901960784315); display: block;">
                <form action="#" id="XaoQjmc0L51z_form" autocomplete="off">
                    <div class="formContainer" style="width:816px;height:1056px" id="xzOwqphM4GGR_1">
                        <div class="formContent">
                            <div class="formBackground">
                                <div style="position:absolute;top:50px;left:100px;width:450px;height:25px;background-color:#fff;color:#000;">When this reaches the top, the "trigger" should say 50px"</div>
                            </div>
                        </div>
                    </div>
                    <div class="formContainer" style="width:816px;height:1056px" id="xzOwqphM4GGR_2">
                        <div class="formContent">
                            <div class="formBackground"><div style="position:absolute;top:50px;left:100px;width:450px;height:25px;background-color:#fff;color:#000;">This should still say 50px</div></div>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>

的CSS

#pageContent {
    position:relative;
    padding-bottom:20px;
    background-color:#fff;
    z-index:2;
    overflow:auto;
    -webkit-overflow-scrolling: touch;
    -webkit-transform: translate(0, 0);
    -moz-transform: translate(0, 0);
    -ms-transform: translate(0, 0);
    transform: translate(0, 0);
}
#formBox {
    display: block;
    position: relative;
    height: 100%;
    padding: 15px;
}
.trimSpace {
    display: block;
    position: relative;
    margin: 0 auto;
    padding: 0;
    height: 100%;
    overflow: hidden;
}
#formScale::after {
    display: block;
    content:'';
    padding-bottom:5px;
}
#formScale {
    position:relative;
    width:816px;
    margin:0;
    -webkit-transform-origin: 0 0;
    -moz-transform-origin: 0 0;
    transform-origin: 0 0;
    -ms-transform-origin: 0 0;
}
.formContainer {
    position:relative;
    margin : 0 auto 15px auto;
    padding:0;
}
.formContent {
    position:absolute;
    width:100%;
    height:100%;
}
.formBackground {
    width:100%;
    height:100%;
    background-color:red;
}

JS

var PAGEWIDTH = 816;

$(window).resize(function (e) {
    zoomProject();
    resize();
});

function resize() {
    $("#pageContent").css('height', window.innerHeight - 45 + 'px');
}

function zoomProject() {
    var maxWidth = $("#formBox").width(),
        percent = maxWidth / PAGEWIDTH;
    $("#formScale").css({
        'transform': 'scale(' + percent + ')',
        '-moz-transform': 'scale(' + percent + ')',
        '-webkit-transform': 'scale(' + percent + ')',
        '-ms-transform': 'scale(' + percent + ')'
    });
    $(".trimSpace").css('width', (PAGEWIDTH * percent) + 'px');
    $("#formBox, .trimSpace").css('height', ($("#formScale").height() * percent) + 'px');
}

zoomProject();
resize();

编辑

我认为我在传达我想完成的目标方面做得不好。

目前有两个.formContainer当我滚动时#pageContainer.formContainerdiv向上移动#pageContainer

因此,我想实现的是,当用户单击“ ME”按钮或#click(如下面的小提琴所示)时,我想知道该按钮.formContainer触及的顶部的位置#pageContainer

我的确在我的实际应用程序中使用了滚动间谍,所以我知道哪个.formContainer最接近顶部。因此,如果您只想定位一个.formContainer,那就很好。

我以这些白色div元素为例。如果我正在滚动#pageContainer,并且在滚动时该白色div元素位于屏幕顶部,并且我单击“ ME”,则单击触发应该会提醒我,.formContainer触摸顶部#pageContainer距顶部50px。如果红色容器正好接触的顶部#pageContainer,则应该说它离顶部0px。

我希望这有助于消除一些误解。

这是更新的jsfiddle,显示了我想执行的操作。

戴夫

我给这个刺是因为我发现这些事情很有趣。这可能只是一个起点,因为我今天头疼而又没有直截了当。我愿意打赌它可以清理并简化一些。

我可能还会使我采用的方法过于复杂,无法获得第一个可见的表格和位置。我也没有使用getBoundingClientRect函数。

相反,我通过尝试遍历父对象直到pageContent来获取相对于该元素的偏移,从而尝试解决填充和边距问题。由于表单嵌套在pageContent元素内的几个层次中,因此您不能使用position()。您也不能使用offset(),因为那会随着滚动而变化。循环方法使我可以考虑顶部边距/填充。我还没有完全研究其他建议的解决方案,因此可能会有更短的方法来实现此目的。

请注意,比例会影响子元素的实际位置,因此在获取实际位置时必须除以比例百分比。为此,我将scalePercentage移到了一个全局变量中,以便缩放功能和单击可以使用它。

这是我所做的工作的核心。实际的小提琴有更多的日志和垃圾:

var visForm = getVisibleForm();
var formTop = visForm.position().top;

var parents = visForm.parentsUntil('#pageContent');
var truOffset = 0;
parents.each(function() {
    truOffset -= $(this).position().top;
});
// actual location of form relative to pageContent visible pane
var formLoc = truOffset - formTop;   
var scaledLoc = formLoc / scalePercent;

更新了Fiddle(忘记在get func中考虑规模):http : //jsfiddle.net/e6vpq9c8/5/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可滚动元素的顶部被隐藏

来自分类Dev

滚动到可滚动div中的顶部

来自分类Dev

滚动到可滚动div中的元素

来自分类Dev

可滚动div中的中心元素

来自分类Dev

伪元素水平滚动条位于div的顶部

来自分类Dev

jQuery在div单击时无法滚动到元素的顶部

来自分类Dev

单击元素时,在可滚动div中滚动内容

来自分类Dev

滚动到可滚动div中特定类的顶部-每次单击上/下按钮

来自分类Dev

jQuery检查元素在可滚动div中是否可见

来自分类Dev

防止位置绝对元素粘贴在可滚动div内

来自分类Dev

使div中的元素忽略其容器大小,并使容器可滚动

来自分类Dev

防止位置绝对元素粘在可滚动div内

来自分类Dev

滚动时查找div元素的可见高度

来自分类Dev

(jQuery)当滚动显示div时,如何为可滚动div中的元素设置动画?

来自分类Dev

(jQuery)当滚动显示div时,如何为可滚动div中的元素设置动画?

来自分类Dev

试图使div出现在内容的可滚动列表的顶部,但相对于列表项

来自分类Dev

使div可滚动

来自分类Dev

使内部 div 可滚动

来自分类Dev

滚动到视图中时将类添加到元素(可滚动div)

来自分类Dev

滚动到可滚动容器div中的元素不起作用

来自分类Dev

带有固定定位子元素的可滚动 div 上的 iOS 动量滚动

来自分类Dev

单击以滚动可滚动 div 内的元素不起作用

来自分类Dev

滚动到div jQuery中的div顶部

来自分类Dev

使div可滚动不在div中滚动

来自分类Dev

JQuery Draggable:如何使可拖动元素捕捉到div的内部顶部?

来自分类Dev

检查元素是否滚动到顶部

来自分类Dev

选择滚动元素时,jsTree返回顶部

来自分类Dev

滚动时使元素停留在顶部

来自分类Dev

通过单击元素内的锚点或包含div ID的任何地方,将元素滚动到页面顶部

Related 相关文章

  1. 1

    可滚动元素的顶部被隐藏

  2. 2

    滚动到可滚动div中的顶部

  3. 3

    滚动到可滚动div中的元素

  4. 4

    可滚动div中的中心元素

  5. 5

    伪元素水平滚动条位于div的顶部

  6. 6

    jQuery在div单击时无法滚动到元素的顶部

  7. 7

    单击元素时,在可滚动div中滚动内容

  8. 8

    滚动到可滚动div中特定类的顶部-每次单击上/下按钮

  9. 9

    jQuery检查元素在可滚动div中是否可见

  10. 10

    防止位置绝对元素粘贴在可滚动div内

  11. 11

    使div中的元素忽略其容器大小,并使容器可滚动

  12. 12

    防止位置绝对元素粘在可滚动div内

  13. 13

    滚动时查找div元素的可见高度

  14. 14

    (jQuery)当滚动显示div时,如何为可滚动div中的元素设置动画?

  15. 15

    (jQuery)当滚动显示div时,如何为可滚动div中的元素设置动画?

  16. 16

    试图使div出现在内容的可滚动列表的顶部,但相对于列表项

  17. 17

    使div可滚动

  18. 18

    使内部 div 可滚动

  19. 19

    滚动到视图中时将类添加到元素(可滚动div)

  20. 20

    滚动到可滚动容器div中的元素不起作用

  21. 21

    带有固定定位子元素的可滚动 div 上的 iOS 动量滚动

  22. 22

    单击以滚动可滚动 div 内的元素不起作用

  23. 23

    滚动到div jQuery中的div顶部

  24. 24

    使div可滚动不在div中滚动

  25. 25

    JQuery Draggable:如何使可拖动元素捕捉到div的内部顶部?

  26. 26

    检查元素是否滚动到顶部

  27. 27

    选择滚动元素时,jsTree返回顶部

  28. 28

    滚动时使元素停留在顶部

  29. 29

    通过单击元素内的锚点或包含div ID的任何地方,将元素滚动到页面顶部

热门标签

归档