您好!欢迎访问家园网-www.jy.wang!

家园网

浮动窗口的实现

网络 作者:本站 点击:

var ImgW = parseInt(float.width);  // 获取浮动窗口宽度
function permute(tfloor, Top, left) {
  // 获取纵向滚动条滚动距离
  var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
  buyTop = Top + scrollTop;  // 计算图片垂直绝对位置
  document.all[tfloor].style.top = buyTop + "px";  // 设置垂直位置
  // 获取横向滚动条滚动距离
  var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
  var buyLeft = scrollLeft + document.body.clientWidth - ImgW;  // 计算图片水平绝对位置
  document.all[tfloor].style.left = buyLeft - left + "px";  // 设置水平位置
}
setInterval('permute("float", 300, 50)', 1);  // 每1毫秒执行一次


核心机制

  1. 获取宽度‌:parseInt(float.width) 获取浮动窗口宽度。

  2. 垂直定位‌:

    • scrollTop 获取纵向滚动距离。

    • buyTop = Top + scrollTop 计算图片绝对垂直位置。

    • document.all[tfloor].style.top 设置垂直位置。

  3. 水平定位‌:

    • scrollLeft 获取横向滚动距离。

    • buyLeft = scrollLeft + document.body.clientWidth - ImgW 计算图片绝对水平位置。

    • document.all[tfloor].style.left 设置水平位置。

  4. 定时器‌:setInterval 每1毫秒执行一次 permute,确保滚动时图片位置动态更新。

关键特点

  • 滚动条兼容‌:动态调整滚动条影响,确保图片始终可见。

  • 高频率更新‌:1毫秒刷新率实现流畅交互。

  • 绝对定位‌:通过 top 和 left 属性精确控制图片位置。


parseInt(float.width)这个代码中的三个词是个啥?

都是规定好的吗?还是自定义的?

逐词解析

  1. parseInt

    • 功能‌:JavaScript 内置函数,用于将字符串解析为整数。

    • 语法‌:parseInt(string, radix),其中 string 是要解析的字符串,radix 是可选的进制基数(2-36)。

    • 行为‌:从字符串起始位置逐字符解析至非数字字符停止,忽略前导空格并支持负号识别。

    • 示例‌:parseInt("123.45") 返回 123

    • 来源‌:ES5 规范明确其默认十进制解析规则,消除历史版本中八进制前缀解析的差异

  2. float

    • 类型‌:自定义对象或变量名,通常用于存储浮动窗口或图片信息。

    • 属性‌:width 是 float 对象的属性,表示宽度值(字符串或数字)。

    • 命名规范‌:变量名必须由字母、数字、下划线组成,不能以数字开头,且不能是保留字

    • 示例‌:var float = { width: "200px" };

    • 来源‌:float 通常用于 CSS 布局(如浮动元素),但此处作为对象属性使用

  3. width

    • 属性‌:float 对象的属性,表示宽度值(字符串或数字)。

    • 用途‌:用于计算图片或浮动窗口的宽度。

    • 示例‌:float.width = "300px";

    • 来源‌:width 是 CSS 属性,但此处作为对象属性使用

代码功能

var ImgW = parseInt(float.width);  // 获取浮动窗口的宽度
  • 作用‌:将 float.width 的字符串值(如 "200px")解析为整数(如 200),用于后续计算。

  • 关键点‌:

    • parseInt 用于字符串转整数,确保计算精度。

    • float 是自定义对象,width 是其属性。

    • width 的值需为可解析的字符串(如 "200" 或 "200px"),否则返回 NaN

总结

  • parseInt‌:JavaScript 内置函数,用于字符串转整数。

  • float‌:自定义对象或变量名,通常用于存储浮动窗口或图片信息。

  • width‌:float 对象的属性,表示宽度值(字符串或数字)。

  • 规范‌:float 和 width 是自定义的,需符合 JavaScript 变量命名规范



核心机制

  1. 获取宽度‌:parseInt(float.width) 将 float 对象的 width 属性(字符串或数字)解析为整数,存储在 ImgW 变量中。

  2. 垂直定位‌:

    • scrollTop 获取纵向滚动条滚动距离(兼容 documentElement 和 body)。

    • buyTop = Top + scrollTop 计算图片绝对垂直位置(Top 是初始垂直偏移)。

    • document.all[tfloor].style.top 设置图片在垂直方向的绝对位置(tfloor 是图片元素的 id)。

  3. 水平定位‌:

    • scrollLeft 获取横向滚动条滚动距离。

    • buyLeft = scrollLeft + document.body.clientWidth - ImgW 计算图片绝对水平位置(clientWidth 是视口宽度)。

    • document.all[tfloor].style.left 设置图片在水平方向的绝对位置(left 是初始水平偏移)。

  4. 定时器‌:setInterval 每1毫秒执行一次 permute,确保滚动时图片位置动态更新。

关键特点

  • 滚动条兼容‌:动态调整滚动条影响,确保图片始终可见。

  • 高频率更新‌:1毫秒刷新率实现流畅交互。

  • 绝对定位‌:通过 top 和 left 属性精确控制图片位置。



他是如何实现浮动的?

按照这个setInterval('permute("float", 300, 50)', 1);

再讲讲怎么浮动的?为什么不会随着鼠标下来?


























核心机制

  1. 获取宽度‌:parseInt(float.width) 将 float 对象的 width 属性(字符串或数字)解析为整数,存储在 ImgW 变量中。

  2. 垂直定位‌:

    • scrollTop 获取纵向滚动条滚动距离(兼容 documentElement 和 body)。

    • buyTop = Top + scrollTop 计算图片绝对垂直位置(Top 是初始垂直偏移)。

    • document.all[tfloor].style.top 设置图片在垂直方向的绝对位置(tfloor 是图片元素的 id)。

  3. 水平定位‌:

    • scrollLeft 获取横向滚动条滚动距离。

    • buyLeft = scrollLeft + document.body.clientWidth - ImgW 计算图片绝对水平位置(clientWidth 是视口宽度)。

    • document.all[tfloor].style.left 设置图片在水平方向的绝对位置(left 是初始水平偏移)。

  4. 定时器‌:setInterval 每1毫秒执行一次 permute,确保滚动时图片位置动态更新。

关键特点

  • 滚动条兼容‌:动态调整滚动条影响,确保图片始终可见。

  • 高频率更新‌:1毫秒刷新率实现流畅交互。

  • 绝对定位‌:通过 top 和 left 属性精确控制图片位置。



var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

获取纵向滚动条位置‌:

    • document.documentElement.scrollTop:获取 documentElement(通常是 <html>)的垂直滚动距离。

    • document.body.scrollTop:获取 body 元素的垂直滚动距离。

    • || 运算符:优先使用 documentElement.scrollTop,若未定义则使用 body.scrollTop,确保兼容性。

  1. 核心机制‌:

    • 标准模式‌:现代浏览器(如 Chrome、Firefox)使用 documentElement.scrollTop

    • 怪异模式‌:部分旧版浏览器(如 IE)使用 body.scrollTop

    • 兼容性‌:通过双属性检测,确保滚动条位置在不同浏览器中一致获取。

  2. 应用场景‌:

    • 用于动态计算元素的绝对位置(如图片浮动)。

    • 避免滚动条影响布局问题。

关键特点

  • 高兼容性‌:支持所有主流浏览器。

  • 实时更新‌:滚动时自动获取最新位置。

  • 无延迟‌:直接读取 DOM 属性,性能高效。


document.all[tfloor].style.top = buyTop + "px";
  1. 设置垂直位置‌:

    • document.all[tfloor]:通过 id 获取元素(tfloor 是元素的 id)。

    • style.top:设置元素的 top 样式属性。

    • buyTop + "px":将计算的垂直位置(单位:像素)转换为字符串并赋值。

  2. 核心机制‌:

    • 动态计算‌:buyTop 是通过滚动条位置和初始偏移计算的绝对位置。

    • 单位转换‌:"px" 确保值被识别为像素单位。

    • 兼容性‌:document.all 是 IE 特有的属性,现代浏览器推荐使用 document.getElementById

  3. 应用场景‌:

    • 用于实现图片或浮动窗口的绝对定位。

    • 避免滚动条影响布局问题。

关键特点

  • 滚动条兼容‌:动态调整滚动条影响,确保元素始终可见。

  • 实时更新‌:滚动时自动更新位置。

  • 无延迟‌:直接操作 DOM 属性,性能高效。


var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
  1. 获取横向滚动条位置‌:

    • document.documentElement.scrollLeft:获取 documentElement(通常是 <html>)的水平滚动距离。

    • document.body.scrollLeft:获取 body 元素的水平滚动距离。

    • || 运算符:优先使用 documentElement.scrollLeft,若未定义则使用 body.scrollLeft,确保兼容性。

  2. 核心机制‌:

    • 标准模式‌:现代浏览器(如 Chrome、Firefox)使用 documentElement.scrollLeft

    • 怪异模式‌:部分旧版浏览器(如 IE)使用 body.scrollLeft

    • 兼容性‌:通过双属性检测,确保滚动条位置在不同浏览器中一致获取。

  3. 应用场景‌:

    • 用于动态计算元素的绝对位置(如图片浮动)。

    • 避免滚动条影响布局问题。

关键特点

  • 高兼容性‌:支持所有主流浏览器。

  • 实时更新‌:滚动时自动获取最新位置。

  • 无延迟‌:直接读取 DOM 属性,性能高效。


var buyLeft = scrollLeft + document.body.clientWidth - ImgW;
  1. 计算水平位置‌:

    • scrollLeft:获取横向滚动条滚动距离。

    • document.body.clientWidth:获取视口宽度(不包括滚动条)。

    • ImgW:图片宽度(通过 parseInt(float.width) 获取)。

    • 公式‌:buyLeft = 滚动距离 + 视口宽度 - 图片宽度

  2. 核心机制‌:

    • 右对齐‌:计算图片右边缘与视口右边缘的对齐位置。

    • 滚动条兼容‌:动态调整滚动条影响,确保图片始终可见。

    • 视口适应‌:自动适应不同屏幕尺寸。

  3. 应用场景‌:

    • 用于实现图片或浮动窗口的绝对定位。

    • 避免滚动条影响布局问题。

关键特点

  • 滚动条兼容‌:动态调整滚动条影响,确保元素始终可见。

  • 视口适应‌:自动适应不同屏幕尺寸。

  • 无延迟‌:直接计算属性,性能高效。



document.all[tfloor].style.left = buyLeft - left + "px";
  1. 设置水平位置‌:

    • document.all[tfloor]:通过 id 获取元素(tfloor 是元素的 id)。

    • style.left:设置元素的 left 样式属性。

    • buyLeft - left + "px":将计算的水平位置(单位:像素)转换为字符串并赋值。

  2. 核心机制‌:

    • 动态计算‌:buyLeft 是通过滚动条位置和视口宽度计算的绝对位置。

    • 初始偏移‌:left 是初始水平偏移量,用于微调位置。

    • 单位转换‌:"px" 确保值被识别为像素单位。

    • 兼容性‌:document.all 是 IE 特有的属性,现代浏览器推荐使用 document.getElementById

  3. 应用场景‌:

    • 用于实现图片或浮动窗口的绝对定位。

    • 避免滚动条影响布局问题。

关键特点

  • 滚动条兼容‌:动态调整滚动条影响,确保元素始终可见。

  • 实时更新‌:滚动时自动更新位置。

  • 无延迟‌:直接操作 DOM 属性,性能高效。



setInterval('permute("float", 300, 50)', 1);


  1. 定时器设置‌:每1毫秒(1000帧/秒)执行一次 permute 函数。

  2. 参数传递‌:

    • "float":图片元素的 id

    • 300:初始垂直偏移量(像素)。

    • 50:初始水平偏移量(像素)。

核心机制

  • 滚动条兼容‌:通过 permute 函数动态计算图片位置,确保滚动时始终可见。

  • 高频率更新‌:1毫秒刷新率实现流畅交互,避免卡顿。

  • 绝对定位‌:通过 top 和 left 属性精确控制图片位置。

关键特点

  • 滚动条适应‌:动态调整滚动条影响,确保图片始终可见。

  • 无延迟‌:实时响应滚动事件,性能高效。

  • 兼容性‌:通过 document.all 兼容旧版浏览器(现代浏览器推荐使用 document.getElementById)。


300:初始垂直偏移量(像素)

代码功能

setInterval('permute("float", 300, 50)', 1);
  1. 初始垂直偏移‌:300 表示图片距离视口顶部的初始偏移量(像素)。

  2. 核心机制‌:通过 permute 函数动态计算图片位置,确保滚动时始终可见。

  3. 应用场景‌:用于实现图片或浮动窗口的绝对定位,避免滚动条影响布局问题。

关键特点

  • 滚动条兼容‌:动态调整滚动条影响,确保图片始终可见。

  • 无延迟‌:实时响应滚动事件,性能高效。

  • 兼容性‌:通过 document.all 兼容旧版浏览器(现代浏览器推荐使用 document.getElementById)。


50:初始水平偏移量(像素)

代码功能

setInterval('permute("float", 300, 50)', 1);
  1. 初始水平偏移‌:50 表示图片距离视口右侧的初始偏移量(像素)。

  2. 核心机制‌:通过 permute 函数动态计算图片位置,确保滚动时始终可见。

  3. 应用场景‌:用于实现图片或浮动窗口的绝对定位,避免滚动条影响布局问题。

关键特点

  • 滚动条兼容‌:动态调整滚动条影响,确保图片始终可见。

  • 无延迟‌:实时响应滚动事件,性能高效。

  • 兼容性‌:通过 document.all 兼容旧版浏览器(现代浏览器推荐使用 document.getElementById)。


这个tfloor是规定好的吗?还是自定义的

document.all[tfloor].style.top = buyTop + "px";
  1. 参数解析‌:

    • tfloor:自定义参数,表示图片元素的 id(如 "float")。

    • document.all[tfloor]:通过 id 获取元素(兼容旧版浏览器)。

    • style.top:设置元素的 top 样式属性(单位:像素)。

  2. 核心机制‌:

    • 动态定位‌:通过 buyTop 计算图片的垂直绝对位置。

    • 兼容性‌:document.all 是 IE 特有的属性,现代浏览器推荐使用 document.getElementById

  3. 应用场景‌:

    • 用于实现图片或浮动窗口的绝对定位。

    • 避免滚动条影响布局问题。

关键特点

  • 自定义参数‌:tfloor 是开发者定义的标识符,需与 HTML 元素的 id 一致。

  • 滚动条兼容‌:动态调整滚动条影响,确保元素始终可见。

  • 无延迟‌:直接操作 DOM 属性,性能高效。


如何实现浮动

核心机制

  1. 滚动条兼容‌:通过 scrollTop 和 scrollLeft 获取滚动条位置,确保图片始终可见。

  2. 定时器更新‌:setInterval 每1毫秒执行一次 permute,实时调整图片位置。

  3. 绝对定位‌:通过 top 和 left 属性精确控制图片位置,避免布局问题。

关键特点

  • 滚动条适应‌:动态调整滚动条影响,确保图片始终可见。

  • 高频率更新‌:1毫秒刷新率实现流畅交互,避免卡顿。

  • 兼容性‌:通过 document.all 兼容旧版浏览器(现代浏览器推荐使用 document.getElementById)。


是不是就是要求图片始终处在垂直方向和水平方向的绝对位置?


核心机制

  1. 滚动条兼容‌:通过 scrollTop 和 scrollLeft 获取滚动条位置,确保图片始终可见。

  2. 定时器更新‌:setInterval 每1毫秒执行一次 permute,实时调整图片位置。

  3. 绝对定位‌:通过 top 和 left 属性精确控制图片位置,避免布局问题。

关键特点

  • 滚动条适应‌:动态调整滚动条影响,确保图片始终可见。

  • 高频率更新‌:1毫秒刷新率实现流畅交互,避免卡顿。

  • 兼容性‌:通过 document.all 兼容旧版浏览器(现代浏览器推荐使用 document.getElementById)。


是不是上面的代码就是相当于要求图片始终处在垂直方向和水平方向的绝对位置?


是的,您的理解完全正确。

上面这段代码的核心目的,就是‌通过持续不断地计算并设置图片的 top 和 left 样式属性,使其始终固定在浏览器视口中的某个绝对位置‌,即使页面滚动,图片也会跟随滚动条的位置实时更新,从而看起来像是“浮动”在页面上。


代码实现浮动的核心机制

1. 获取基准数据

  • var ImgW = parseInt(float.width);:获取图片自身的宽度,用于后续计算水平位置。

2. 监听滚动条位置(数据来源)

  • var scrollTop = ... 和 var scrollLeft = ...:这两行代码是整个效果的“传感器”。它们负责获取页面纵向和横向滚动了多少距离。这是整个浮动效果的数据基础。

3. 计算绝对位置(数据处理)

  • 垂直位置计算‌:buyTop = Top + scrollTop;

    • Top (300px):您希望图片距离视口‌顶部‌的固定距离。

    • scrollTop:页面已经向下滚动的距离。

    • 结果‌:无论页面滚动了多少,图片的垂直位置始终是 ‌300px + 已滚动的距离‌。所以当您向下滚动时,scrollTop 增大,图片就会向下移动,始终保持它距离视口顶部有300px的视觉效果。

  • 水平位置计算‌:

  • var buyLeft = scrollLeft + document.body.clientWidth - ImgW;
    • document.body.clientWidth:当前视口的宽度。

    • ImgW:图片自身的宽度。

    • buyLeft = ...:这个计算的结果是图片‌左边缘‌应该位于的X坐标。它的逻辑是:从整个页面的最左端开始算,加上视口宽度,再减去图片宽度,这实际上是在计算如何让图片‌靠在视口右侧‌。

    • document.all[tfloor].style.left = buyLeft - left + "px";

    • left (50px):这个参数用于微调。从计算出的靠右位置 (buyLeft) 中再减去 left,就意味着图片会从视口右侧边缘‌向左移动50px‌。

4. 强制应用位置(执行输出)

  • document.all[tfloor].style.top = buyTop + "px";

    • tfloor ("float"):这是图片元素的ID,用于找到要操作的那个图片。

    • style.top 和 style.left:这是直接操作CSS样式,是实现绝对定位的关键。

5. 高频率刷新(保证实时性)

  • setInterval(..., 1);:这是整个效果的“发动机”。它每隔1毫秒就执行一次 permute 函数。

  • 关键作用‌:由于 scrollTop 和 scrollLeft 是动态变化的,通过极高频率的刷新,可以确保图片的位置在每一次微小的滚动后都被立即更新,从而在视觉上形成平滑的跟随效果。


为什么图片不会随页面内容滚动而消失?

正是因为 setInterval 这个“发动机”在持续工作。每一次执行都好比一次“快照”:

  1. 拍下当前滚动条的位置‌ (scrollTopscrollLeft)。

  2. 立即根据最新的滚动位置重新计算‌ buyTop 和最终位置。

  • 过程‌:您滚动鼠标 -> scrollTop 值改变 -> 1毫秒后 permute 函数被触发 -> 它用最新的 scrollTop 值重新计算 buyTop,并再次设置 style.top

  • 结果‌:图片的位置在滚动发生后就立刻被新的计算值覆盖了。

简单来说,这个代码通过“耍赖”的方式实现了浮动:它不让图片自然地待在文档流里,而是强行把它“抓”出来,然后根据您滚动了多少,就把它重新“放”到基于新滚动距离的绝对位置上。由于这个“放”的动作频率极高(每秒1000次),所以看起来就像是图片固定在那里一样。

标签: