成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

sarva / 1451人閱讀

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

前言

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

效果

無(wú)圖無(wú)真相,先上最終效果圖再說(shuō) 。

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

引入 iscroll

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

對(duì)插件再做一層封裝,封裝成 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,  // 阻止瀏覽器滑動(dòng)默認(rèn)行為
    probeType: 3, //需要使用 iscroll-probe.js 才能生效 probeType : 1 滾動(dòng)不繁忙的時(shí)候觸發(fā) probeType : 2 滾動(dòng)時(shí)每隔一定時(shí)間觸發(fā) probeType : 3   每滾動(dòng)一像素觸發(fā)一次
    mouseWheel: true, //是否監(jiān)聽(tīng)鼠標(biāo)滾輪事件。
    scrollX: true,  // 啟動(dòng)x軸滑動(dòng)
    scrollY: true,  // 啟動(dòng)y軸滑動(dòng)
    // momentum: false,
    lockDirection: false,
    snap: false, //自動(dòng)分割容器,用于制作走馬燈效果等。Options.snap:true// 根據(jù)容器尺寸自動(dòng)分割
    //snapSpeed: 400,
    scrollbars: false, //是否顯示默認(rèn)滾動(dòng)條
    freeScroll: true, //主要在上下左右滾動(dòng)都生效時(shí)使用,可以向任意方向滾動(dòng)。
    deceleration: 0.0001, //滾動(dòng)動(dòng)量減速越大越快,建議不大于 0.01,默認(rèn):0.0006
    disableMouse: true, //是否關(guān)閉鼠標(biāo)事件探測(cè)。如知道運(yùn)行在哪個(gè)平臺(tái),可以開(kāi)啟它來(lái)加速。
    disablePointer: true, //是否關(guān)閉指針事件探測(cè)。如知道運(yùn)行在哪個(gè)平臺(tái),可以開(kāi)啟它來(lái)加速。
    disableTouch: false, //是否關(guān)閉觸摸事件探測(cè)。如知道運(yùn)行在哪個(gè)平臺(tái),可以開(kāi)啟它來(lái)加速。
    eventPassthrough: false, //使用 IScroll 的橫軸滾動(dòng)時(shí),如想使用系統(tǒng)立軸滾動(dòng)并在橫軸上生效,請(qǐng)開(kāi)啟。
    bounce: false //是否啟用彈力動(dòng)畫(huà)效果,關(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è)置高度,不然向上滾動(dòng)失效

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

最終效果就如上圖。

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

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

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

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

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

完整代碼如下:



最終效果圖如下:

不過(guò)這個(gè)版本的上下滾動(dòng)時(shí)的精準(zhǔn)計(jì)算有點(diǎn)誤差。

推薦第一種方式。 最后

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

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

我會(huì)不定期更新有價(jià)值的內(nèi)容,長(zhǎng)期運(yùn)營(yíng)。

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96333.html

相關(guān)文章

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

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

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

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

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

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

    lijy91 評(píng)論0 收藏0
  • 一個(gè)通用的vue表格組件

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

    caoym 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

sarva

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<