写点什么

90 行代码,15 个元素实现无限滚动,吃透这份 Java 高级工程师面试 497 题解析

用户头像
极客good
关注
发布于: 刚刚

return $topElement;


if (isLastIndex)


return $bottomElement;


return null;


}


复制代码 8. 渲染界面


const {list, height} = props; // 数据,节点高度


const updatedList = list.slice(start, end); // 数据切割


const lastIndex = updatedList.length - 1;


return (


<ul style={{position: ‘relative’}}>


{updatedList.map((item, index) => {


const top = (height * (index + start)) + ‘px’; // 基于相对 & 绝对定位 计算


const refVal = getReference(index, index === lastIndex); // map 循环中赋予头尾 ref


const id = index =


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


== 0 ? ‘top’ : (index === lastIndex ? ‘bottom’ : ‘’); // 绑 ID


return (


  • {item.value}

  • );


})}


);


复制代码 9. 如何使用


App.js:


import React from ‘react’;


import ‘./App.css’;


import { SlidingWindowScrollHook } from “./SlidingWindowScrollHook”;


import MY_ENDLESS_LIST from ‘./Constants’;


function App() {


return (


15 个元素实现无限滚动


===========


);


}


export default App;


复制代码定义一下数据 Constants.js:


const MY_ENDLESS_LIST = [


{


key: 1,


value: ‘A’


},


{


key: 2,


value: ‘B’


},


{


key: 3,


value: ‘C’


},


// 中间就不贴了…


{


key: 45,


value: ‘AS’


}


]


复制代码 SlidingWindowScrollHook.js:


import React, { useState, useEffect, useRef } from “react”;


const THRESHOLD = 15;


const SlidingWindowScrollHook = (props) => {


const [start, setStart] = useState(0);


const [end, setEnd] = useState(THRESHOLD);


const [observer, setObserver] = useState(null);


const $bottomElement = useRef();


const $topElement = useRef();


useEffect(() => {


intiateScrollObserver();


return () => {


resetObservation()


}


// eslint-disable-next-line react-hooks/exhaustive-deps


},[start, end])


const intiateScrollObserver = () => {


const options = {


root: null,


rootMargin: ‘0px’,


threshold: 0.1


};


const Observer = new IntersectionObserver(callback, options)


if (KaTeX parse error: Expected '}', got 'EOF' at end of input: …server.observe(topElement.current);


}


if (KaTeX parse error: Expected '}', got 'EOF' at end of input: …server.observe(bottomElement.current);


}


setObserver(Observer)


}


const callback = (entries, observer) => {


entries.forEach((entry, index) => {


const listLength = props.list.length;


// Scroll Down


if (entry.isIntersecting && entry.target.id === “bottom”) {


const maxStartIndex = listLength - 1 - THRESHOLD; // Maximum index value start can take


const maxEndIndex = listLength - 1; // Maximum index value end can take


const newEnd = (end + 10) <= maxEndIndex ? end + 10 : maxEndIndex;


const newStart = (end - 5) <= maxStartIndex ? end - 5 : maxStartIndex;


setStart(newStart)


setEnd(newEnd)


}


// Scroll up


if (entry.isIntersecting && entry.target.id === “top”) {


const newEnd = end === THRESHOLD ? THRESHOLD : (end - 10 > THRESHOLD ? end - 10 : THRESHOLD);


let newStart = start === 0 ? 0 : (start - 10 > 0 ? start - 10 : 0);


setStart(newStart)


setEnd(newEnd)


}


});


}


const resetObservation = () => {


observer && observer.unobserve(KaTeX parse error: Expected 'EOF', got '&' at position 38: …; observer &?& observer.unob…topElement.current);


}


const getReference = (index, isLastIndex) => {


if (index === 0)


return $topElement;


if (isLastIndex)


return $bottomElement;


return null;


}


const {list, height} = props;


const updatedList = list.slice(start, end);


const lastIndex = updatedList.length - 1;


return (


<ul style={{position: ‘relative’}}>


{updatedList.map((item, index) => {


const top = (height * (index + start)) + ‘px’;


const refVal = getReference(index, index === lastIndex);


const id = index === 0 ? ‘top’ : (index === lastIndex ? ‘bottom’ : ‘’);


return (


  • {item.value}

  • );


})}


);


}


export { SlidingWindowScrollHook };


复制代码以及少许样式:


.li-card {


display: flex;


justify-content: center;


list-style: none;


box-shadow: 2px 2px 9px 0px #bbb;


padding: 70px 0;


margin-bottom: 20px;


border-radius: 10px;


position: absolute;


width: 80%;


}


复制代码然后你就可以慢慢耍了。。。


  1. 兼容性处理


IntersectionObserver 不兼容 Safari?


莫慌,我们有 polyfill 版


每周 34 万下载量呢,放心用吧臭弟弟们。


项目源地址:github.com/roger-hiro/…


作者:前端劝退师


链接:https://juejin.im/post/5d7f80796fb9a06b24434d4e


来源:掘金


著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


你好! 这是你第一次使用 Markdown 编辑器 所展示的欢迎页。如果你想学习如何使用 Markdown 编辑器, 可以仔细阅读这篇文章,了解一下 Markdown 的基本语法知识。


新的改变




我们对 Markdown 编辑器进行了一些功能拓展与语法支持,除了标准的 Markdown 编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:


  1. 全新的界面设计 ,将会带来全新的写作体验;

  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;

  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;

  4. 全新的 KaTeX 数学公式 语法;

  5. 增加了支持甘特图的 mermaid 语法1 功能;

  6. 增加了 多屏幕编辑 Markdown 文章功能;

  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;

  8. 增加了 检查列表 功能。


功能快捷键




撤销:Ctrl/Command + Z


重做:Ctrl/Command + Y


加粗:Ctrl/Command + B


斜体:Ctrl/Command + I


标题:Ctrl/Command + Shift + H


无序列表:Ctrl/Command + Shift + U


有序列表:Ctrl/Command + Shift + O


检查列表:Ctrl/Command + Shift + C


插入代码:Ctrl/Command + Shift + K


插入链接:Ctrl/Command + Shift + L


插入图片:Ctrl/Command + Shift + G


查找:Ctrl/Command + F


替换:Ctrl/Command + G


合理的创建标题,有助于目录的生成




直接输入 1 次 #,并按下 space 后,将生成 1 级标题。


输入 2 次 #,并按下 space 后,将生成 2 级标题。


以此类推,我们支持 6 级标题。有助于使用TOC语法后生成一个完美的目录。


如何改变文本的样式




强调文本 强调文本


加粗文本 加粗文本


标记文本


~删除文本~


引用文本


H2O is 是液体。


210 运算结果是 1024.


插入链接与图片




链接: link.


图片:



带尺寸的图片:



居中的图片:



居中并且带尺寸的图片:



当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。


如何插入一段漂亮的代码片




博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.


// An highlighted block


var foo = 'bar';


生成一个适合你的列表




  • 项目

  • 项目

  • 项目


  1. 项目 1

  2. 项目 2

  3. 项目 3


  • [ ] 计划任务

  • [x] 完成任务


创建一个表格




一个简单的表格是这么创建的:


| 项目 | Value |


| --- | --- |


| 电脑 | $1600 |


| 手机 | $12 |


| 导管 | $1 |

设定内容居中、居左、居右

使用:---------:居中


使用:----------居左


使用----------:居右


| 第一列 | 第二列 | 第三列 |


| :-: | --: | :-- |


| 第一列文本居中 | 第二列文本居右 | 第三列文本居左 |

SmartyPants

SmartyPants 将 ASCII 标点字符转换为“智能”印刷标点 HTML 实体。例如:


| TYPE | ASCII | HTML |


| --- | --- | --- |


| Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |


| Quotes | "Isn't this fun?" | “Isn’t this fun?” |


| Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |


创建一个自定义列表




Markdown


Text-to- HTML conversion tool


Authors


John


Luke


如何创建一个注脚




一个具有注脚的文本。2


注释也是必不可少的




Markdown 将文本转换为 HTML。


KaTeX 数学公式




您可以使用渲染 LaTeX 数学表达式 KaTeX:

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
90行代码,15个元素实现无限滚动,吃透这份Java高级工程师面试497题解析