亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

vue移動端復(fù)雜表格表頭,固定表頭與固定第一列

sarva / 1538人閱讀

摘要:固定的表格頭部與第一列的寬高行高都是通過獲取真實(shí)的表格的寬高來設(shè)定的。通過展示的表格的上下滾動從而帶動固定在第一列的向上滾動,向左右滾動帶動覆蓋上表頭的的左右滾動。

前言

最近做移動端的h5項(xiàng)目,要做一個可配置表頭的復(fù)雜表格,網(wǎng)上找了很久也沒什么好方法,結(jié)合網(wǎng)上的一些例子,在此做一了一個完整的vue版的例子。

效果

無圖無真相,先上最終效果圖再說 。

方法一:iscroll 插件版 第一步:npm install

引入 iscroll

npm i iscroll --save 
第二步:封裝

對插件再做一層封裝,封裝成 iscrollTable.js 方便調(diào)用,代碼如下:

// 統(tǒng)一使用
const iScollProbe = require("iscroll/build/iscroll-probe");
let scroller = null;
let Selector = "";
export function createIScroller(selector) {
  Selector = selector;
  scroller = new iScollProbe(Selector, {
    preventDefault: false,  // 阻止瀏覽器滑動默認(rèn)行為
    probeType: 3, //需要使用 iscroll-probe.js 才能生效 probeType : 1 滾動不繁忙的時候觸發(fā) probeType : 2 滾動時每隔一定時間觸發(fā) probeType : 3   每滾動一像素觸發(fā)一次
    mouseWheel: true, //是否監(jiān)聽鼠標(biāo)滾輪事件。
    scrollX: true,  // 啟動x軸滑動
    scrollY: true,  // 啟動y軸滑動
    // momentum: false,
    lockDirection: false,
    snap: false, //自動分割容器,用于制作走馬燈效果等。Options.snap:true// 根據(jù)容器尺寸自動分割
    //snapSpeed: 400,
    scrollbars: false, //是否顯示默認(rèn)滾動條
    freeScroll: true, //主要在上下左右滾動都生效時使用,可以向任意方向滾動。
    deceleration: 0.0001, //滾動動量減速越大越快,建議不大于 0.01,默認(rèn):0.0006
    disableMouse: true, //是否關(guān)閉鼠標(biāo)事件探測。如知道運(yùn)行在哪個平臺,可以開啟它來加速。
    disablePointer: true, //是否關(guān)閉指針事件探測。如知道運(yùn)行在哪個平臺,可以開啟它來加速。
    disableTouch: false, //是否關(guān)閉觸摸事件探測。如知道運(yùn)行在哪個平臺,可以開啟它來加速。
    eventPassthrough: false, //使用 IScroll 的橫軸滾動時,如想使用系統(tǒng)立軸滾動并在橫軸上生效,請開啟。
    bounce: false //是否啟用彈力動畫效果,關(guān)掉可以加速
  });
  scroller.on("scroll", updatePosition);
  scroller.on("scrollEnd", updatePosition);
  scroller.on("beforeScrollStart", function () {
    scroller.refresh();
  });

  function updatePosition() {
    let frozenCols = document.querySelectorAll(selector + " table tr td.cols");
    let frozenRows = document.querySelectorAll(selector + " table tr th.rows");
    let frozenCrosses = document.querySelectorAll(selector + " table tr th.cross");
    for (let i = 0; i < frozenCols.length; i++) {
      frozenCols[i].style.transform = "translate(" + -1 * this.x + "px, 0px) translateZ(0px)";
    }
    for (let i = 0; i < frozenRows.length; i++) {
      frozenRows[i].style.transform = "translate(0px, " + -1 * this.y + "px) translateZ(0px)";
    }
    for (let i = 0; i < frozenCrosses.length; i++) {
      frozenCrosses[i].style.transform = "translate(" + -1 * this.x + "px," + -1 * this.y + "px) translateZ(0px)";
    }
  }

  return scroller;
}

export function refreshScroller() {
  if (scroller === null) {
    console.error("先初始化scroller");
    return;
  }
  setTimeout(() => {
    scroller.refresh();
    scroller.scrollTo(0, 0);
    let frozenCols = document.querySelectorAll(Selector + " table tr td.cols");
    let frozenRows = document.querySelectorAll(Selector + " table tr th.rows");
    let frozenCrosses = document.querySelectorAll(Selector + " table tr th.cross");
    for (let i = 0; i < frozenCols.length; i++) {
      frozenCols[i].style.transform = "translate(0px, 0px) translateZ(0px)";
    }
    for (let i = 0; i < frozenRows.length; i++) {
      frozenRows[i].style.transform = "translate(0px, 0px) translateZ(0px)";
    }
    for (let i = 0; i < frozenCrosses.length; i++) {
      frozenCrosses[i].style.transform = "translate(0px, 0px) translateZ(0px)";
    }
  }, 0);
}
第三步:使用

引用前面的自己封裝的iscrollTable.js,用到的table.vue的具體代碼如下:



注意點(diǎn):

table 外的盒子 .rolling-table 要設(shè)置高度,不然向上滾動失效

2.固定和行與列,即:rows、cross 的position要設(shè)為relative

最終效果就如上圖。

方法二: 結(jié)合css,自定義封裝版 原理

因?yàn)槌吮眍^和第一列,其他都可以滾動所以需要:
1.一個展示的table表格
2.一個用來覆蓋上表頭的 thead,一個用來覆蓋左上角的 div,一個固定在第一列的 tbody。

展示的table表格放在最底層,覆蓋上表頭的 thead固定定位在最上面,固定在第一列的 tbody固定定位在最左邊,左上角的 div固定是左上角且z-index最大,在最上層。

固定的表格頭部與第一列的寬、高、行高都是通過獲取真實(shí)的表格的寬高來設(shè)定的。

通過展示的table表格的上下滾動從而帶動固定在第一列的 tbody向上滾動,向左右滾動帶動覆蓋上表頭的 thead的左右滾動。

完整代碼如下:



最終效果圖如下:

不過這個版本的上下滾動時的精準(zhǔn)計(jì)算有點(diǎn)誤差。

推薦第一種方式。 最后

希望文章內(nèi)容對你有一點(diǎn)幫助!

全棧修煉 有興趣的朋友可以掃下方二維碼關(guān)注我的公眾號

我會不定期更新有價值的內(nèi)容,長期運(yùn)營。

關(guān)注公眾號并回復(fù) 福利 可領(lǐng)取免費(fèi)學(xué)習(xí)資料,福利詳情請猛戳: Python、Java、Linux、Go、node、vue、react、javaScript

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/96333.html

相關(guān)文章

  • 網(wǎng)頁版模仿Excel

    摘要:鼠標(biāo)按下拖拽多選單元格這個是本唯一的亮點(diǎn)了個人認(rèn)為。這樣做的結(jié)果是頁面非???,因?yàn)槭髽?biāo)移動過程會多次觸發(fā)鼠標(biāo)移動事件,會多次進(jìn)行單元格元素循環(huán)遍歷。 網(wǎng)頁版模仿Excel 最近公司閑的dan疼,非要模仿Excel做一個網(wǎng)頁版的Excel,剛開始聽說要做這么一個東西的時候瞬間覺得公司領(lǐng)導(dǎo)高(sang)瞻(xin)遠(yuǎn)(bing)矚(kuang),只能頭鐵的接下了,那就開始干。其實(shí)主要目的是...

    james 評論0 收藏0
  • 網(wǎng)頁版模仿Excel

    摘要:鼠標(biāo)按下拖拽多選單元格這個是本唯一的亮點(diǎn)了個人認(rèn)為。這樣做的結(jié)果是頁面非常卡,因?yàn)槭髽?biāo)移動過程會多次觸發(fā)鼠標(biāo)移動事件,會多次進(jìn)行單元格元素循環(huán)遍歷。 網(wǎng)頁版模仿Excel 最近公司閑的dan疼,非要模仿Excel做一個網(wǎng)頁版的Excel,剛開始聽說要做這么一個東西的時候瞬間覺得公司領(lǐng)導(dǎo)高(sang)瞻(xin)遠(yuǎn)(bing)矚(kuang),只能頭鐵的接下了,那就開始干。其實(shí)主要目的是...

    Carl 評論0 收藏0
  • 如何實(shí)現(xiàn) React Table 固定列、固定表頭

    摘要:所以對的寬度做了計(jì)算優(yōu)化,達(dá)到自適應(yīng)內(nèi)容寬度,超出一定寬度會自動換行這樣的目的。從而讓開發(fā)更加專注于業(yè)務(wù),而不是信息。 前段時間在研究并實(shí)現(xiàn)了如何實(shí)現(xiàn)表格的固定列(fixed column)功能,這里記錄了思路和細(xì)節(jié)表格控件比較復(fù)雜,應(yīng)用場景也很多,需要各種數(shù)據(jù)展示、統(tǒng)計(jì)、操作等特性 原文有視頻演示哦 showImg(https://segmentfault.com/img/bVbv4...

    lijy91 評論0 收藏0
  • 一個通用的vue表格組件

    摘要:在做業(yè)務(wù)組件的時候需要自己自己封裝一個通用的表格,這個表格需要符合我們一切的好的幻想,左右固定,表頭固定,分頁,選擇,一直表格內(nèi)容的行數(shù)限制等等,下面就為大家介紹一下這一款表格組件功能以及怎么使用。 在做業(yè)務(wù)組件的時候需要自己自己封裝一個通用的表格,這個表格需要符合我們一切的好的幻想,左右固定,表頭固定,分頁,選擇,一直表格內(nèi)容的行數(shù)限制等等,下面就為大家介紹一下這一款表格組件功能以及...

    caoym 評論0 收藏0

發(fā)表評論

0條評論

sarva

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<