美文网首页
2020-11-16技术小记

2020-11-16技术小记

作者: 草珊瑚_6557 | 来源:发表于2020-11-24 10:31 被阅读0次

移动端分页策略

问题:
加载0到9个数据后,此时数据库新增了一个最新数据。下次请求10到19个数据时,会有一个数据和之前的0到9数据重复。

修复方式:
1、后台更改接口,需要传入第10个数据的id传入,基于此进行范围数据查询返回。
2、前端使用0-10,0-20,0-30分页方式

页面hash路由和history路由区别

hash 模式下,仅 hash 符号之前的内容会被包含在请求中,如 http://www.abc.com,因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回 404 错误。

history 模式下,前端的 URL 必须和实际向后端发起请求的 URL 一致,如 http://www.abc.com/book/id。如果后端缺少对 /book/id 的路由处理,将返回 404 错误。
所以你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。”

浏览器原生支持的判断元素进入"视口"(viewport)的api

Intersection Observer API
https://developer.mozilla.org/zh-CN/docs/Web/API/Intersection_Observer_API
http://www.ruanyifeng.com/blog/2016/11/intersectionobserver_api.html
试用场景:移动端分页

var intersectionObserver = new IntersectionObserver(
  function (entries) {
    // 如果不可见,就返回
    if (entries[0].intersectionRatio <= 0) return;
    loadItems(10);
    console.log('Loaded new items');
  });

// 开始观察
intersectionObserver.observe(
  document.querySelector('.scrollerFooter')
);

一个完整的demo

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>intersection observer api的异步记载无限滚动用例</title>
  <style>
    body{
      margin: 0;
    }
    #root div{
      border-bottom: 1px solid #ccc;
      height: 100px;
    }
    .scrollerFooter{
      width: 100%;
      height: 100px;
    }
  </style>
</head>
<body>
  <div id="root"></div>
  <div class="scrollerFooter">加载更多</div>
</body>
<script>
  let loading = false;
  const addItem = ()=>{
    loading = true;
    const root = document.getElementById('root');
    const fragment = document.createDocumentFragment();
    for (let i=0;i<10;i++) {
      let li = document.createElement('div');
      li.innerHTML = `div ${i}`;
      fragment.appendChild(li);
    }
    setTimeout(()=>{
      loading = false;
      root.appendChild(fragment);
    },2000);
    
  };
  const intersectionObserver = new IntersectionObserver(
    (entries) => {
      // 如果不可见,就返回
      if(loading){
        return
      }

      // 也可用IntersectionObserverEntry.isIntersecting,兼容性参考:https://developer.mozilla.org/zh-CN/docs/Web/API/IntersectionObserverEntry/isIntersecting
      if (entries[0].intersectionRatio <= 0) {
        return
      };
      addItem();
      console.log('加载更多');
    },
    {
      threshold: [1]
    }
  );

  // 开始观察
  intersectionObserver.observe(
    document.querySelector('.scrollerFooter')
  );

  addItem();
</script>
</html>

相关文章

  • 2020-11-16技术小记

    移动端分页策略 问题:加载0到9个数据后,此时数据库新增了一个最新数据。下次请求10到19个数据时,会有一个数据和...

  • 周一 2020-11-16 23:00 - 06:19 雨晴雨

    2020-11-16 觉得自己很菜的一天周一 2020-11-16 23:00 - 06:19 雨晴雨 10h59...

  • 2020-11-16刀乱小记

    一张很温馨的图 红衣的叫加州清光,蓝衣的唤大和守安定 时光定格此刻,很温馨的画面。 清光和安定是俩把刀幻化的刀剑男...

  • 技术雷达小记

    1. 采用: --ECMA Script6: ECMAScript 6,JavaScript的新版 本解决了很多现...

  • 黄霄雲音乐作品

    音乐专辑:《黄霄雲的Neverland》 发行日期:2020-11-16 01. Neverland 02. 秘密...

  • High Trail Vanoise退赛小记

    High Trail Vanoise退赛小记 1.比赛概述 2.技术小结 3.比赛经历 ===1.比赛概述=== ...

  • 弧顶扁花方廿汉50hb7014

    原创 李大叔 清江风情 2020-11-16 图谱编号:ESB_TP_50_hb7014 直径:~36.4mm 厚...

  • 关于技术小记

    CGRectInset和CGRectOffsetinset:英文意思为插入、镶嵌的意思,其实我们可以理解为距离边距...

  • 2020-12-18

    掌握这个思维,你做事才会事半功倍发布时间:2020-11-16信息来源:教学研究部 转载自:http://www....

  • 2020-11-16

    【318号】2020-11-16点赞列表 http://www.jianshu.com/p/3f5d0eb6c23...

网友评论

      本文标题:2020-11-16技术小记

      本文链接:https://www.haomeiwen.com/subject/khoabktx.html