乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      web前端學(xué)習(xí)路線分享滾動(dòng)穿透方法

       好程序員IT 2019-09-03

        web前端學(xué)習(xí)路線分享滾動(dòng)穿透方法,這篇文章主要介紹Html5滾動(dòng)穿透的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著一起學(xué)習(xí)學(xué)習(xí)吧。

        網(wǎng)站需要在移動(dòng)端完成適配,針對(duì)移動(dòng)端H5以及web端采用的都是bluma這種flex布局解決方案

        H5中使用的列表采用的是react-virtualized 來繪制表格

        為了展示表格中單行數(shù)據(jù)的具體詳情,通常的解決方案是采用新頁(yè)面或者是彈窗來完成。

        這里采用的是彈窗的方案,點(diǎn)擊單行數(shù)據(jù)后的數(shù)據(jù)詳情用的是blumamodal-card。

        在點(diǎn)擊單行數(shù)據(jù)后,彈窗顯示詳情數(shù)據(jù),整個(gè)modal-card設(shè)置成position:fixed;

        沒有footer部分,設(shè)置modal-card的高度為整個(gè)屏幕的高度:100vh

        表現(xiàn):

        1、chrome瀏覽器中顯示,整個(gè)modal-card占滿整個(gè)屏幕

        2、在手機(jī)端顯示也是占滿,但是問題是,根據(jù)手勢(shì)移動(dòng),會(huì)將瀏覽器的搜索框部分往上頂,此時(shí)彈窗下面的數(shù)據(jù)列表頁(yè)能夠進(jìn)行滑動(dòng),之后彈窗的標(biāo)題覆蓋瀏覽器原搜索框部分,但這之間有延遲,能清晰看到下面頁(yè)面的數(shù)據(jù)

        3在其他手-機(jī)上會(huì)有另外一種顯示,如果滑動(dòng)速度比較快,彈窗出現(xiàn)后立即滑動(dòng),就會(huì)看到在彈窗的底部就會(huì)出現(xiàn)一個(gè)小的空白,同樣彈窗下面的頁(yè)面能夠滾動(dòng),并且有明顯延遲和數(shù)據(jù)滾動(dòng)顯示。

        解決方案:

       modal-card 自身解決方案:

      JS + CSS overflow:hidden

      通過JS動(dòng)態(tài)給彈窗下面的頁(yè)面html添加css類

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      if ($modalButtons.length > 0) {

          $modalButtons.forEach(function ($el) {

              $el.addEventListener('click', function () {

              var target = $el.dataset.target;

              openModal(target);

              });

          });

      }

      function openModal(target) {

          var $target = document.getElementById(target);

          rootEl.classList.add('is-clipped');

          $target.classList.add('is-active');

      }

      通過 overflow:hidden 來禁止頁(yè)面的滾動(dòng)

      1

      2

      3

      is-clipped {

          overflow:hidden!important

      }

      當(dāng)彈窗關(guān)閉時(shí),通過JS刪除掉頁(yè)面的 css 類:is-clipped

      1

      2

      3

      4

      5

      6

      function closeModals() {

          rootEl.classList.remove('is-clipped');

          $modals.forEach(function ($el) {

              $el.classList.remove('is-active');

          });

      }

      但是這種方案在應(yīng)用中測(cè)試過后,發(fā)現(xiàn)并不能解決問題,上面的問題還是出現(xiàn)

      position:fixed 方案

      JS + CSS Position:fixed + scrollTop

      方案思路:

      1. 彈窗時(shí),將html的position 設(shè)置為 fixed,將彈窗關(guān)閉后,將html的postion 屬性取消。

      2. 因?yàn)榱斜眄?yè)會(huì)出現(xiàn)滾動(dòng)的情況,而點(diǎn)擊的行有可能是在滾動(dòng)發(fā)生后,所以需要計(jì)算html頁(yè)面本身的scrollTop 值。

      3. 因?yàn)閺棿皶r(shí)設(shè)置position為fixed后,html頁(yè)面的 scrollTop 值會(huì)變成0,會(huì)回到頁(yè)面頂部,所以在關(guān)閉彈窗后,需要手動(dòng)設(shè)置html頁(yè)面的scrollTop 值,讓其滾動(dòng)到html頁(yè)面原來的位置。

      4. 對(duì)于兼容性,需要設(shè)置不同屬性的 scrollTop 值

      彈窗之前:

      1

      2

      3

      const scrollTop = global.document.documentElement.scrollTop || global.pageYOffset || global.document.body.scrollTop;

      global.document.documentElement.style.position = 'fixed';

      this.scrollTop = scrollTop;

      關(guān)閉彈窗:

      1

      2

      3

      4

      5

      6

      7

      8

      closeModalHandler = () => {

          const { closeOrderHistoryModal } = this.props;

          global.document.documentElement.style.position = '';

          global.pageYOffset = this.scrollTop;

          global.document.documentElement.scrollTop = this.scrollTop;

          global.document.body.scrollTop = this.scrollTop;

          closeOrderHistoryModal();

      }

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多