只要页面加载了,其中在页面中出现的li就向控制台输出第几个发送请求;在本次加载的页面中,再将滚动条滚回前边的li,不再向控制台输出东西,也就是说已经显示过的li,不再向控制台输出东西。
- <body>
- <ul>
- <li onclick="jumpOther()">0001</li>
- <li>0002</li>
- <li>0003</li>
- <li>0004</li>
- <li>0005</li>
- <li>0006</li>
- <li>0007</li>
- <li>0008</li>
- <li>0009</li>
- <li>00010</li>
- <li>00011</li>
- <li>00012</li>
- <li>00013</li>
- <li>00014</li>
- <li>00015</li>
- <li>00016</li>
- <li>00017</li>
- <li>00018</li>
- <li>00019</li>
- <li>00020</li>
- <li class="ts">00021</li>
- <li>00022</li>
- </ul>
- </body>
定义了一个全局变量lastItem,用来记下最后显示的li的index;如此,当li的index>lastItem,就表示li还没展示过,能输出东西。
- <script type="text/JavaScript">
- var lastItem=0;
- $(document).ready(function () {
- sendAsk();
- window.addEventListener("scroll",function(e){
- sendAsk();
- });
- });
- function sendAsk(){
- var lis= $('ul').find("li");
- //swHeight=滚动的高度+窗体的高度;当li的offset高度<=swHeight,那么说明当前li显示在可视区域了
- var swHeight=$(window).scrollTop()+$(window).height();
- $.each(lis, function (index, item) {
- mTop=item.offsetTop;
- var dItem=index+1;
- if(mTop<swHeight&&dItem>lastItem){
- console.log(index+1+"个发送请求 ");
- lastItem+=1;
- }
- });
- }
- </script>
给每个li动态添加一个属性,用来表示这个li是否显示过;在发送请求后,设置属性为true即可;未显示过不添加属性即可。
- function sendAsk() {
- var lis= $('ul').find("li");
- //swHeight=滚动的高度+窗体的高度;当li的offset高度<=swHeight,那么说明当前li显示在可视区域了
- var swHeight=$(window).scrollTop()+$(window).height();
- $.each(lis, function (index, item) {
- mTop=item.offsetTop;
- if(mTop<swHeight&&!item.getAttribute("data-send")){
- console.log(index+1+"个发送请求 ");
- item.setAttribute("data-send","true");
- }
- });
- }
利用getBoundingClientRect()方法,只要其中的.top<=可视区域的高度即可
- function sendAsk(){
- var lis= $('ul').find("li");
- //swHeight=滚动的高度+窗体的高度;当li的offset高度<=swHeight,那么说明当前li显示在可视区域了
- var swHeight=$(window).height();
- $.each(lis, function (index, item) {
- mTop=item.getBoundingClientRect().top;
- console.log(mTop);
- if(mTop<=swHeight){
- console.log(index+1+"个发送请求 ");
- }
- });
- }
getBoundingClientRect() https://www.cnblogs.com/Songyc/p/4458570.html
来源:https://blog.csdn.net/yingzizizizizizzz/article/details/81205602
JS中的DOM知识概览:文档对象模型,是针对 HTML 和 XML 文档的一个 API (应用程序编程接口), 描绘了一个层次化的节点树。 web 浏览器浏览一个页面的时候,DOM 就在幕后把你编辑的网页文档转换成一个文档对象。
instanceof 的作用是判断实例对象是否为构造函数的实例,实际上判断的是实例对象的__proto__属性与构造函数的prototype属性是否指向同一引用;constructor 的作用是返回实例的构造函数,即返回创建此对象的函数的引用
用一句话概述:offset用于获取元素的实际显示尺寸 , scroll用于获取滚动后全部尺寸 , client用于获取不包括滚动条的实际显示尺寸,event用于获取鼠标的坐标位置。下面就详细介绍它们之间的使用和区别
JavaScript中的所有数字都是浮点数。这篇博客文章解释了这些浮点数如何在64位二进制内部表示。浮点数并不一定等于小数,定点数也并不一定就是整数。所谓浮点数就是小数点在逻辑上是不固定的,而定点数只能表示小数点固定的数值
首先说明一下,JavaScript没有用动态作用域概念,但 this 机制却和动态作用域类似!JavaScript是通过作用域链的方式进行变量查找的,而JS作用域链是词法作用域,也就做静态作用域!词法作用域:在函数声明(定义)时确定的
在开发中,我们需要限制某些属性和方法的暴露程度,使得它们不能通过对象实例本身被访问、修改或调用。要了解js面向对象,就必需先了解js中什么是公有、私有、静态、受保护。
Js优雅的实现方式包含你可能不知道的知识点:简短优雅地实现 sleep 函数,js获取时间戳,js数组去重,js数字格式化,js交换两个整数,将 argruments 对象(类数组)转换成数组,数字取整等
国外某网站给出了44道JS难题,这些题涉及面非常广,涵盖JS原型、函数细节、强制转换、闭包等知识,而且都是非常细节的东西,透过这些小细节可以折射出很多高级的JS知识点。
JavaScript可以通过Event对象的target事件或srcElement(IE浏览器支持)来判断按钮是否被点击。Event对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。
这篇文章将梳理下环境,作用域链,变量对象和活动对象,以及内存管理问题。基本类型和引用类型的值,我们都知道JS中的数据类型有两大类,基本数据类型和引用数据类型,下面从三个方面来解剖他们
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!