• JQuery Offset实验与应用


      我们有时候需要实现这样一种功能:点击一个按钮,然后在按钮的下方显示一个div。当按钮位于角落时,div的位置设定就需要计算,使div完全显示。

      我打算使用offset()方法实现此功能,但要先弄清楚他的功能。

    实验:

      offset()的top是指元素与document的上边的距离,而不是浏览器当前窗体的上边缘,如图1。

       图1:document高度超过window,window出现滚动条,拖动滚动条,提交按钮的offset().top不变,因为按钮与document上边缘距离未变。

      

      图2:document中的div有滚动条,提交按钮的offset().top随div滚动条变化而变化,因为按钮与document上边缘距离已变。

      

      offset().left 同理。

      通过上面的实验我们可以得出以下结论:offset() 获取元素(html 元素)距离document上边缘、左边缘的像素,我们只要清楚浏览器中document是那部分就可以正确使用offset()。关于document可以阅读 JQuery   window、document、 body

    应用:

      1.那么我们怎么保证元素完整的显示在浏览器视窗里呢?我们可以结合offset 和 scrollTop来实现。

      scrollTop获取的是什么值?根据我的实验,只有元素具有滚动条,并且滚动了一定距离,才有scrollTop值,没有滚动条的元素scrollTop=0。

      上面提交button无滚动条,它的scrollTop恒等于0。

      以前我有种错误的认知:document里面的元素与document具有相同的滚动值,这是错误的,子元素与容器的滚动值无关。

      按图1(document有滚动条),需计算控件的offsetTop、height,document的scrollTop;

      按图2(document无滚动条),计算控件的offsetTop、height

      2.浮动div在滚动条滚动时保持在原位

      按图1,

    var firstTop = $("浮动DIV").offset().top;
    var top = firstTop + $(document).scrollTop();
    $(浮动DIV).offset({ top: top });

      按图2,

    var top = $(浮动DIV).offset().top;
    $("浮动DIV").offset({ top: top });

    源代码:OffsetTraining.rar

  • 相关阅读:
    LeetCode(287)Find the Duplicate Number
    LeetCode(290) Word Pattern
    LeetCode(205)Isomorphic Strings
    LeetCode(201) Bitwise AND of Numbers Range
    LeetCode(200) Number of Islands
    LeetCode(220) Contains Duplicate III
    LeetCode(219) Contains Duplicate II
    命令行执行Qt程序
    LeetCode(228) Summary Ranges
    redis 的安装和使用记录
  • 原文地址:https://www.cnblogs.com/luhe/p/2769263.html
Copyright © 2020-2023  润新知