专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

使用JavaScript实现无限滚动

  在本教程中,我们将看到一个使用无限滚动方法分解页面内容的简单实现。我们将使用HTML、CSS和vanillaJavaScript来构建无限滚动功能的高性能且可访问的版本。什么是无限滚动?
  无限滚动是一种用于在用户滚动到页面末尾时在页面上动态加载更多内容的功能。
  无限滚动的概念用于以一种用户感觉无缝的方式从服务器加载数据,但不会因为一次请求太多数据而使服务器过载。
  在之前的教程中,我们实现了分页功能,它允许我们将内容分解为称为页面的可导航部分。本教程将使用类似的实现。原生JavaScript的好处
  使用JavaScript的一个显着好处是我们的实现与框架无关,即它不依赖于任何框架,因此可以对其进行修改以在所有框架上工作。
  此外,由于我们自己构建功能而不依赖于插件,因此我们可以确保实现是轻量级的并且完全适合我们的需求。
  这是最终产品的外观,滚动到笔的底部以加载更多内容:1。用HTML标记
  我们将从在页面上放置卡片的容器开始。我们将使用JavaScript将卡片添加到容器中,因此p将为空。
  我们还有一个加载器p,用于在添加下一批卡片之前显示动画,以及p用于显示卡片数量和卡片总数的卡片操作。
  Showing
  of
  cards
  span
  加载器和卡片计数p的外观2。使用CSS进行样式设置
  我们将添加到cardcontainerp中的卡片将有一个类名card。
  cardcontainer{
  display:flex;
  flexwrap:wrap;
  }
  。card{
  height:55vh;
  width:calc((1003)16px);
  margin:8px;
  borderradius:3px;
  transition:all200mseaseinout;
  display:flex;
  alignitems:center;
  justifycontent:center;
  }
  。card:hover{
  boxshadow:04px10pxrgba(0,0,0,0。2);
  }
  。cardactions{
  margin:8px;
  padding:16px0;
  display:flex;
  justifycontent:spacebetween;
  alignitems:center;
  }
  我们还将通过动画::after伪选择器为加载器p中的骨架卡创建加载动画:
  loader{
  display:flex;
  }
  。skeletoncard{
  height:55vh;
  width:calc((1003)16px);
  margin:8px;
  borderradius:3px;
  transition:all200mseaseinout;
  position:relative;
  backgroundcolor:eaeaea;
  }
  。skeletoncard::after{
  content:;
  position:absolute;
  top:0;
  right:0;
  bottom:0;
  left:0;
  transform:translateX(100);
  backgroundimage:lineargradient(90deg,rgba(255,255,255,0)0,rgba(255,255,255,0。2)20,rgba(255,255,255,0。5)60,rgba(255,255,255,0));
  animation:load1sinfinite;
  }
  keyframesload{
  100{
  transform:translateX(100);
  }
  }
  无障碍样式
  每当我们在网页上包含动画时,重要的是要考虑可访问性的影响。有些用户可能更喜欢根本没有动画,我们可以通过使用媒体规则在样式中考虑这种偏好,prefersreducedmotion
  mediascreenand(prefersreducedmotion:reduce){
  。skeletoncard::after{
  animation:none;
  }
  }
  3。JavaScript的功能
  让我们分解无限滚动背后的逻辑。定义要在页面上加载的内容的限制。检测用户何时到达内容容器的末尾。到达容器末尾后加载更多内容。如果没有更多内容要加载,请停止无限滚动。定义常量
  首先,让我们从DOM中获取我们需要的所有元素:
  constcardContainerdocument。getElementById(cardcontainer);
  constcardCountElemdocument。getElementById(cardcount);
  constcardTotalElemdocument。getElementById(cardtotal);
  constloaderdocument。getElementById(loader);
  现在我们需要定义我们的全局变量。
  我们需要一个要添加到页面的最大卡片数量的值。如果您从服务器获取数据,则此值是服务器响应的长度。让我们初始化一个99的卡片限制。
  constcardLimit99;
  cardTotalElem是用于在页面上显示最大卡片数量的元素,因此我们可以将设置为innerHTML值cardLimit;
  cardTotalElem。innerHTMLcardLimit;
  然后我们将定义一个变量来表示要增加页面的卡片数量:
  constcardIncrease9;
  我们想知道我们将拥有多少页面,即我们可以增加多少次内容,直到达到最大限制。例如,使用我们定义的cardLimit和cardIncrease变量,我们可以将内容增加10倍(假设我们已经加载了前9个元素),直到达到限制。我们将通过除以来做到这cardLimit一点cardIncrease。
  constpageCountMath。ceil(cardLimitcardIncrease);
  然后我们将定义一个值来确定我们在哪个页面上:
  letcurrentPage1;
  创建新卡
  现在我们有了所有的常量,让我们创建一个函数来向卡片容器中添加一张新卡片。我们将innerHTML卡片的设置为索引值,这样我们就可以跟踪我们正在添加的卡片数量。
  此演示中的一个有趣功能是每张卡片都有随机生成的背景颜色。如何使用JavaScript生成随机背景颜色
  constgetRandomColor(){
  consthMath。floor(Math。random()360);
  returnhsl({h}deg,90,85);
  };
  constcreateCard(index){
  constcarddocument。createElement(p);
  card。classNamecard;
  card。innerHTMLindex;
  card。style。backgroundColorgetRandomColor();
  cardContainer。appendChild(card);
  };
  将卡片添加到容器中
  现在我们将使用与分页教程类似的功能将卡片添加到容器中。
  首先,确定要添加到页面的卡片范围。该addCards函数将接受一个pageIndex参数,该参数将更新全局currentPage值。如果我们在第1页,我们将添加卡片1到9。如果我们在第2页,我们将添加卡片10到18,依此类推。
  我们可以在数学上将其定义为:
  constaddCards(pageIndex){
  currentPagepageIndex;
  conststartRange(pageIndex1)cardIncrease;
  constendRangepageIndexcardIncrease;
  for(letistartRange1;icurrRange;i){
  createCard(i);
  }
  };
  在这个函数中,我们的开始范围总是比我们试图获得的值小一(即在第1页,开始范围是0,在第2页,开始范围是9)所以我们将考虑这一点通过将我们的for循环索引的值设置为startRange1。检测何时达到卡限制
  我们必须注意的一个限制是endRange数量。如果我们在最后一页,我们希望结束范围与cardLimit。例如,如果我们有cardLimit75和cardIncrease10的a并且我们在第8页,我们的起始索引将是70,我们的endRange值应该是75。
  我们将修改我们的addCards函数来解决这个问题:
  constaddCards(pageIndex){
  currentPagepageIndex;
  conststartRange(pageIndex1)cardIncrease;
  constendRangecurrentPagepageCount?cardLimit:pageIndexcardIncrease;
  for(letistartRange1;iendRange;i){
  createCard(i);
  }
  };
  我们的演示还包括一个cardTotal元素,该元素显示页面上当前显示的卡片数量,因此我们innerHTML将此元素的设置为结束范围。
  constaddCards(pageIndex){
  currentPagepageIndex;
  conststartRange(pageIndex1)cardIncrease;
  constendRangecurrentPagepageCount?cardLimit:pageIndexcardIncrease;
  cardCountElem。innerHTMLendRange;
  for(letistartRange1;iendRange;i){
  createCard(i);
  }
  };
  加载初始卡片
  我们已经定义了将卡片添加到容器的功能,因此我们将包含一个window。onload函数来设置要添加到页面的初始卡片。
  window。onloadfunction(){
  addCards(currentPage);
  };
  处理无限滚动
  currentPage当我们到达页面末尾时,我们将通过增加向容器添加新卡片的数量来处理无限滚动。innerHeight我们可以通过将窗口的值添加到滚动值pageYOffset并将其与offsetHeight作为页面总高度的文档进行比较来检测何时到达页面末尾。
  这是它的外观的视觉表示:
  一旦我们到达页面的末尾,我们想通过调用addCardscurrentPage1的函数来加载一个新页面。
  consthandleInfiniteScroll(){
  constendOfPagewindow。innerHeightwindow。pageYOffsetdocument。body。offsetHeight;
  if(endOfPage){
  addCards(currentPage1);
  }
  };
  然后我们为窗口滚动创建一个事件监听器,并将上面的函数传递给它:
  window。addEventListener(scroll,handleInfiniteScroll);
  性能优化
  由于我们正在使用滚动事件侦听器,因此限制调用次数对我们网页的性能是有益的。我们可以使用节流功能减慢调用次数。如何使用JavaScript实现Debounce和Throttle杰迈玛阿布2021年5月3日
  我们将这样定义我们的节流函数:
  varthrottleTimer;
  constthrottle(callback,time){
  if(throttleTimer)return;
  throttleTimertrue;
  setTimeout((){
  callback();
  throttleTimerfalse;
  },time);
  };
  然后我们将油门函数传递给handleInfiniteScroll函数
  consthandleInfiniteScroll(){
  throttle((){
  constendOfPage
  window。innerHeightwindow。pageYOffsetdocument。body。offsetHeight;
  if(endOfPage){
  addCards(currentPage1);
  }
  },1000);
  };
  停止无限滚动
  至此,我们已经设置了函数,以便在到达页面末尾时添加更多内容。现在,让我们确保我们的函数在没有要添加的内容时停止运行,即cardLimit到达时。
  首先,让我们定义我们的removeInfiniteScroll函数。在此函数中,我们将从handleInfiniteScroll滚动事件侦听器中删除该函数,并删除加载器p。
  constremoveInfiniteScroll(){
  loader。remove();
  window。removeEventListener(scroll,handleInfiniteScroll);
  };
  现在我们将修改我们handleInfiniteScroll以考虑是否没有更多内容要添加,即我们在内容的最后一页。
  consthandleInfiniteScroll(){
  throttle((){
  constendOfPage
  window。innerHeightwindow。pageYOffsetdocument。body。offsetHeight;
  if(endOfPage){
  addCards(currentPage1);
  }
  if(currentPagepageCount){
  removeInfiniteScroll();
  }
  },1000);
  };
  结论
  我们终于得到它了!我们已经构建了无限滚动功能的高性能且可访问的实现。

科莫多巨蜥的毒液到底有多可怕?2009年,一名31岁的渔民安瓦尔,在印尼科莫多岛上采摘水果,结果不小心从水果树上掉了下来,刚好踩到了一只巨型蜥蜴,蜥蜴瞬间就朝他扑了过去,咬住了他的腿,之后又咬住了他的手臂,身体武汉未来的房价会涨到100000元平米吗?这个问题的答案是肯定的!以目前的趋势,未来武汉房价必然达到10万的水平,只是时间长短的问题。2010年至2017年,短短七年间,武汉的房价已经翻了3番,目前,武汉部分高端楼盘如洞庭兰州青白石片区,中央公园怎么样?兰州北拓的黄金区域,目前基础交通还跟不上建设需要,交通滞后可能会成为十四五期间兰州青白石片区发展的的最大障碍!不过就兰州地理位置和城区格局而言,青白石片区是离主城区最近的待开发区域农民为什么不在国家统计失业范围之内?中国有四个儿子,大儿子叫工人,二儿子叫子弟兵,三儿子叫公务员,四儿子叫农民,所以四儿子就没有纳入统计失业包括养老金范围,因为四儿子有金山银山还有三分地。农民有土地,这是农民可以赖以农村成立社区是什么意思?很多农村驻有村委会办公室,同时也驻有社区管理委员会办公室,特别是在城市郊区的农村和街道的农村都同时设立了村委会和社区管理委员会,很多人弄不明白是怎么回事。那农村成立社区是什么意思呢农村里的剩男,为何一剩再剩呢?到底是什么原因?男女比例失调。计划生育只要一个孩子时,受封建思想影响,都拚命要男孩,等他们长大了,很难找到媳妇。一,农村姑娘远嫁,二,女孩见少,三,彩礼高,四,剩男挣钱少。我就一大龄剩男!个人亲身抖音付费直播试水,看直播要给钱了?我们应该如何思考?使劲收,最好是家人们看的话,一分钟100块钱。毕竟粉丝听话的很。毕竟人设都设计好了打PK,卖货摆错价格,怒亏2个亿回馈粉丝。没事就怼工厂,怼员工反正就是赔钱回馈粉丝。赔完还得补交税马上就要退休了,退休工资才3650元太少了,怎么办?3600不少了。我企业工龄32年,退休时退休金只有2200,涨了这么多年还不到3000。知足常乐吧!如果身体不好,这些钱也够生活了,如果身体还可以,就找一些力所能及的工作,打打工补南宁五象新区未来的发展潜力很大吗?五象新区无法成为国家级新区!!!目前看来,五象新区的潜力也就这样了。我们对比一下贵阳的贵安新区,贵安新区的面积是1700平方公里,由贵阳市的郊区和安顺市合并得来。是全国第8个国家级如果把三峡大坝加高10米,截留更多的洪水,可行吗?我国的三峡大坝,作为当今世界上最大的水利枢纽工程,位于湖北省宜昌市上游,距下游葛洲坝水电站38公里,三峡大坝全长2309米高185米,呈梯形形状,集发电旅游航运调控洪水于一身。三峡大家有经历过亲人去世吗?是怎样走出痛苦和想念的?2018年9月1日下午3点8分,我的妻子在医院里停止了呼吸。她的眼睛没有闭上,我流着泪,帮她合上了双眼。我永远失去了我最亲近的爱人,孩子永远的失去了妈妈。一位好妻子,好女儿,好姑妈
炒作人民币单边贬值,恐将面临巨大风险谭浩俊中国网时事评论员9月27日,全国外汇市场自律机制电视会议召开。会上,中国人民银行副行长中国外汇市场指导委员会(CFXC)主任委员刘国强表示,汇率的点位是测不准的,双向浮动是常长期高血糖,对人体健康会有哪些影响?这4点一般难以躲过现如今,糖尿病已经成为了一种非常常见的慢性疾病,作为代谢异常的典型疾病,糖尿病给人们的生活质量带来了严重的影响。所以,预防糖尿病,先要从控制血糖开始,特别是高血糖患者而言,疾病本身喝咖啡会影响健康吗?如果你是一个咖啡爱好者,喝过多的咖啡是有害的,你可能会感到怅然若失。由于咖啡有干扰睡眠的潜在特性,每天摄入400毫克以上的咖啡因,会降低睡眠的质量大脑兴奋时间持续更长,使人更难入睡夏秋交接身体不火大猛灌水还是口干舌燥擦了保养品皮肤仍紧绷泛红喷嚏也是打个没完。这些症状是秋燥引起的,秋天气候干爽,燥气导致身体缺水而上火,产生发炎干燥等不适。中医认为秋气与人体的肺脏相通,若燥气太强耶鲁大学新线索揭示人类大脑独特性8月25日,耶鲁大学基因学与精神卫生学教授内纳德塞斯坦(NenadSestan)等人发表文章,为揭示人类大脑究竟与其他灵长类有何不同提供了新线索。研究者们使用单细胞转录组测序技术,被母乳喂养绑架的产后妈妈外人围观家人逼迫,不喂不配当妈?母乳被称作液体黄金,是世界公认最适合宝宝的口粮,也是妈妈送给宝宝最珍贵的礼物。然而,对很多妈妈来说,母乳喂养却并不全是美好,几乎每位母乳喂养的妈妈,都体验过其中的种种艰辛。胀痛溢奶1分钟乾坤大挪移!医生隔着妈妈肚皮将宝宝调了个头近日,在湖南长沙,一名孕期36周的准妈妈被发现胎位不正,肚子里的宝宝头朝上,屁股朝下。经过评估,湖南妇女儿童医院的郑岚琳主任医师隔着妈妈的肚皮,来了一招乾坤大挪移臀位外倒转术。不到台媒看大陆湖南怀化洪江古商城湘西明珠楚南上游第一胜迹芙蓉楼。图片来源台湾经济日报中新网北京10月3日电台湾经济日报近日发表了有关湖南省怀化市的报道,介绍了洪江古商城和黔阳古城。报道指出,坐落怀化市洪江区的古商城,起源中国百强县新格局!湖北入围8个,四川弱于湖南一直以来,中国百强县的舞台,基本都是留给了沿海地区。需要指出的是,目前中国的百强县榜单,没有一份来自于官方的数据,而是全部来自于各大机构的排名。当然,这些百强县排名也是较为合理客观徐庶为何离开刘备?其实不是因为他的母亲,而是发现了刘备的秘密东汉末年,天下大乱,到了中期,就已经有了明显的结果,主要变成了曹操刘备和孙权三方的拉锯。虽然我们在看三国时期这段历史的时候,很多时候,曹操都是处于上方的,而刘备和孙权势弱,所以要进2岁孩子误食干燥剂,妈妈60秒教科书式的操作,挽救了孩子的小命孩子们总是对万物都充满着好奇心,看到新奇的好玩的东西,都会忍不住放进嘴里尝一尝。对于大人们来说,我们对什么是能吃的,什么是不能吃得有个明显的划分。但是对于尚且年幼的孩子们来说,要分
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网