<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          前端實(shí)現(xiàn)一個小說分頁的功能

          共 1885字,需瀏覽 4分鐘

           ·

          2020-10-26 04:10

          來源 | https://juejin.im/post/6886418644381728776

          先讓我找找我的思路在哪里?

          在小說讀書APP中,都會有分頁的功能,那么前端如何實(shí)現(xiàn)這個功能呢?
          因?yàn)闆]有什么思路,那就只能在前輩的項(xiàng)目中尋找思路了。
          這不,直接打開起點(diǎn)的頁面,按下那個傳說中的F12鍵,開始我傳奇生涯!...不好意思,串臺了
          好了,然后在找一本有緣書,跟我一同前往那神秘的未知世界。
          就決定是你了,開始免費(fèi)試讀。
          然后我們就可以發(fā)現(xiàn)起點(diǎn)是如何實(shí)現(xiàn)這個功能的了,原來是使用columns這個屬性來讓文章自動分頁的昂。
          我們現(xiàn)在就去搜索一下columns是何方神圣吧。
          developer.mozilla.org/zh-CN/docs/… - MDN
          通過MDN的實(shí)例我們知道了原來columns是一個簡寫屬性,代表了 column-widthcolumn-count兩個屬性,這兩個屬性又分別代表著:
          <'column-width'>
          理想的列寬,定義為 ?或 auto 關(guān)鍵字。實(shí)際寬度可以更寬或更窄以適合可用空間。See column-width。
          <'column-count'>
          元素內(nèi)容應(yīng)分成的理想列數(shù),定義為 ?或 auto 關(guān)鍵字。如果此值和列的寬度都不是 auto ,則它僅指示允許的最大列數(shù)。請參閱 column-count 。- MDN
          然后我們再看回起點(diǎn)中對這個屬性的定義columns: calc(100vw - 32px) 1;
          其中calc(100vw - 32px)這個代表column-width的值代表了每一列的寬度為整屏的寬度再減去兩邊的間隙各16px
          這里一提column-gap就是列與列的間隙,所以在圖中可以看到這里的值設(shè)置了16px
          而代表column-count這個值的1就是只保持一列,并沒有什么作用,因?yàn)?code>100vw - 32px這個寬度已經(jīng)不可能讓屏幕中再多一列了,多出的列數(shù)將會排列在右側(cè)。
          當(dāng)使用 columns 規(guī)定兩個值時,如:
          columns: 100px 3;
          表示:
          當(dāng)每列寬度大于 100px 時,就以 3 列分割顯示;當(dāng)瀏覽器寬度縮小,導(dǎo)致在 3 列情況下無法滿足每列大于 100px,就開始轉(zhuǎn)為 2 列;當(dāng)瀏覽器再縮小,2 列中每列無法再保持 100px 每列時,再次轉(zhuǎn)為 1 列...
          以此類推,"100px" 為每列不可低于的寬值,"3" 表示指定要顯示的列。相對于單獨(dú)設(shè)置 column-width 或 column-count,columns 要更加靈活。- 菜鳥教程 - Kai
          還有一點(diǎn)需要注意的是,需要將文章的高度設(shè)置為屏幕的高度,這樣才會排成多列。
          再通過translate進(jìn)行平移,以及父級的overflow: hidden隱藏多余列,就可以達(dá)到分頁的效果了。
          最后看看columns的兼容性:
          可以看出都支持了這個屬性,可以放心大膽的用。

          思路已至,碼來!

          我們來簡單的實(shí)現(xiàn)一下這個效果。
          // index.html      Document      

          第一章: 我不是小說


          小說真可愛,我要看小說,小說不給看,我就寫小說,寫小說不好寫,我就看小說............


          // style.css* {  margin: 0;  padding: 0;  box-sizing: border-box;}
          .wrapper{ height: 100vh; overflow: hidden; margin: 0 16px;}
          article{ columns: calc(100vw - 32px) 1; column-gap: 16px; height: 100%; transition: .4s;}
          let i = 0;let article = document.querySelector('article');
          setInterval(() => { let width = document.body.offsetWidth; i++; if(i > 3) i = 0;
          article.style.transform = `translateX(-${(width - 16) * i}px)`}, 1000);
          最后實(shí)現(xiàn)的效果就是:
          到這里就結(jié)束了,感謝閱讀。
          瀏覽 52
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青操在线播放 | 另类日韩欧美激情视频 | www.豆花视频成人版 | 永井玛利亚 精品 国产 一区 | 小泽玛利亚性爱视频 |