zoukankan      html  css  js  c++  java
  • 转学步园:jquery offset

    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

  • 相关阅读:
    mac上虚拟机:VMWare Fusion, VirtualBox, Parallels Desktop, CrossOver, Veertu
    linux使用其它用户 su
    CentOS7 rc.local开机开法启动
    taskkill
    Make sure that the controller has a parameterless public constructor.
    An Autofac Lifetime Primer
    Controlling Scope and Lifetime
    Instance scope
    Linq的TakeWhile的用法
    Git does not apply deleted files when merging an old branch into the master. How can I tell Git to apply deleted files?
  • 原文地址:https://www.cnblogs.com/yuqiandoudou/p/4706209.html
Copyright © 2011-2022 走看看