vue-cli引用mui的JS文件遇到的問題

因項目的需要,採用了MUI的滾動事件(scroll),遇到了不少的問題,做個記錄,方便以後查詢。

問題一:引入MUI頂部滑動樣式後,頂部滑動條全屏顯示

<div id="slider" class="mui-slider mui-fullscreen">
  <div id="sliderSegmentedControl"
       class="mui-scroll-wrapper mui-slider-indicator mui-segmented-control mui-segmented-control-inverted">
    <div class="mui-scroll">
      <a class="mui-control-item mui-active" href="#item1mobile" data-wid="tab-top-subpage-1.html">
        全部
      </a>
      <a class="mui-control-item" href="#item2mobile" data-wid="tab-top-subpage-2.html">
        家居生活
      </a>
      <a class="mui-control-item" href="#item3mobile" data-wid="tab-top-subpage-3.html">
        北京
      </a>
      <a class="mui-control-item" href="#item4mobile" data-wid="tab-top-subpage-4.html">
        社會
      </a>
      <a class="mui-control-item" href="#item5mobile" data-wid="tab-top-subpage-5.html">
        娛樂
      </a>
    </div>
  </div>
</div>

解決方案:查看官方文檔,文檔說明:區域滾動組件默認爲absolute定位,全屏顯示。所以你需要手動刪掉全屏這個類,即 mui-fullscreen

問題二:沒有滾動效果

解決方案:根據官方文檔:若使用區域滾動組件,需手動初始化scroll控件,因此,在需要用到該滾動效果的組件中,引入mui.js文件,並初始化

import mui from '../../lib/mui/js/mui.js';
mui('.mui-scroll-wrapper').scroll({
deceleration: 0.0005 //flick 減速係數,係數越大,滾動速度越慢,滾動距離越小,默認值0.0006
});

問題三:初始化之後報錯

控制檯錯誤消息爲:

caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them。

原因:webpack啓用了嚴格模式,而MUI沒有,所以兩者衝突了。
解決方案:在.babelrc文件中加上:

"ignore": [
"./src/lib/mui/js/*.js"
]

另一種解決方法:該方法試過,出現另一種報錯:export 'default' (imported as 'mui') was not found in '../../lib/mui/js/mui.js'。不知道是不是因人而異呢==,有朋友成功了而我的不行2333

1. 安裝babel-plugin-transform-remove-strict-mode
cnpm i babel-plugin-transform-remove-strict-mode -D
2. 在.babelrc文件的plugins節點中配置:
"transform-remove-strict-mode"

問題四:終於可以滑動了,點擊滑動報錯:

控制檯錯誤消息爲:

Unable to preventDefault inside passive event listener due to target being treated as passive. See https://www.chromestatus.com/features/5093566007214080

解決方法:

* {
touch-action: pan-y;
}

2016年Google I/O上提出的概念,目的是用來提升頁面滑動的流暢度。

問題五:頂部可以滑動之後,底部Tab不能切換

控制檯錯誤消息爲:

Unable to preventDefault inside passive event listener due to target being treated as passive. See https://www.chromestatus.com/features/5093566007214080

原因:
Tab樣式(也是MUI的)與MUI的JS文件衝突,具體什麼衝突不清楚,有興趣可以看源碼,我還暈乎乎的
解決方法:
找到Tab欄mui-tab-item的所有樣式,複製一份,重新賦予新的樣式類名,如mui-tab-item-my

問題六:剛進入頁面無法滑動,要刷新之後方可滑動

原因:滑動時機不對,如前面代碼顯示的那樣,在導入mui後就初始化滑動控件,此時,當重新進入頁面時,組件的DOM結構還未渲染好,就初始化,自然不會有效果。
解決方法:放到mounted鉤子函數中,在這個生命週期函數中,DOM結構已被渲染好,可以初始化滑動控件

mounted(){
  // 初始化滑動控件
  mui('.mui-scroll-wrapper').scroll({
    deceleration: 0.0005 //flick 減速係數,係數越大,滾動速度越慢,滾動距離越小,默認值0.0006
  });
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章