国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vant選擇器組件添加鼠標滾輪(多種解決方法包括生產(chǎn)環(huán)境)

這篇具有很好參考價值的文章主要介紹了vant選擇器組件添加鼠標滾輪(多種解決方法包括生產(chǎn)環(huán)境)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

背景

平常做前端開發(fā)的應(yīng)該知道,在前端組件中,有兩種組件

  • 一種是針對移動端的組件

  • 另一種是針對pc的組件

? 而pc的組件主要是對鼠標,鍵盤等操作的支持,而移動端組件常用的事件是觸摸等事件

? 這時,狗血的就來了,業(yè)務(wù)總是能用各種奇怪的想法讓你來回串著開發(fā)

? 我們有一款web是寫在企業(yè)微信內(nèi)部的h5網(wǎng)頁,他使用的是移動端組件,但是這個應(yīng)用由于企業(yè)微信手機端和電腦端都有,導致了業(yè)務(wù)也會用電腦操作的需求

? 這天,他說選項組件為什么不能使用滾輪選擇?而是只能使用拖拽?這樣不好用,要改成也支持滾輪

解決路徑

嫌麻煩,請直接跳到最后的解決方案,前面只是解決路程

vant組件庫

? 首先咱們就去看這個組件,也就是 vant官方庫,他有一個能夠兼容桌面的
vant滾動條,前端,javascript
? 這咱們一看就來勁兒了呀,正好咱們要用鼠標滾輪,肯定能夠?qū)崿F(xiàn)鼠標滾輪模擬拖拽呀,咱們繼續(xù)往下看下去

vant滾動條,前端,javascript

? 然后發(fā)現(xiàn)本地項目中已經(jīng)安了這個插件,但是滾輪效果仍然不生效,于是乎,這種方法不可以

gihtub issues

? 當然,如果咱們只會查文檔解決問題那么咱們就不是合格的程序員了,咱們也要學會去源碼項目的issues,于是咱們?nèi)タ聪聉ant項目源碼

? 看到關(guān)于滾輪的有19個已解決,咱們就開心了,看來前人已經(jīng)把路子探好了,咱們直接copy就行了

vant滾動條,前端,javascript

? 然后看到開發(fā)大大的回答就哭了,沒計劃支持,以后也不會支持,

vant滾動條,前端,javascript

CSDN

? csdn回答 這種方法也時候也能解決一些問題,但是他通過改node_modules解決的,這種方法涉及到如何把源碼包抽離出來,進行更改,然后所有的引入源也更改,比較麻煩,而且害怕涉及到線上問題

hammerjs

? 再后來就想著使用hammerjs模擬手指操作可以么?滾輪滾一個,然后模擬手指滑動多少距離,這樣就不用麻煩判斷邊界問題和選中問題,但是通過引入hammerjs問題頻頻。例如獲取dom的麻煩等等問題,并且無法監(jiān)聽你是否能夠監(jiān)聽你是否模擬成功了,所以這種也不行

換組件?。?/h4>

? 換組件的話意味著重寫,開發(fā)周期起碼兩天以上,這種特別麻煩

? 我嘗試使用

  • Mint UI
  • Cube UI
  • Vux
  • MUI

等等,但是都沒發(fā)現(xiàn),突然我想看看antd-mobile,哭了,發(fā)現(xiàn)他有,但是他是react組件,vue和react串著寫,肯定不可能呀

vant滾動條,前端,javascript

chatGPT(解決方案1)

改組件

? 其實上面換組件,和使用hammerjs都是他給我推薦的,可能是關(guān)鍵詞不行?后來一個解決方法不用換組件,可以在原生寫

原回答如下

  1. mounted 鉤子函數(shù)中,獲取到 Picker 組件的 DOM 元素,并添加 wheel 事件監(jiān)聽函數(shù)。

  2. wheel 事件監(jiān)聽函數(shù)中,根據(jù)鼠標滾輪滾動的方向來修改 Picker 組件的選中值。可以通過調(diào)用 scrollToOption 方法來實現(xiàn)滾動選中值的效果。

<template>
  <div>
    <van-picker
      ref="picker"
      :columns="columns"
      @change="handleChange"
      :default-index="currentIndex"
    />
  </div>

</template>

<script>
 // 如果不是v2記得把 :default-index="currentIndex"屬性刪掉,雖然我也不知道會出現(xiàn)什么錯誤
import { Picker } from 'vant';

export default {
  components: {
    [VanPicker.name]: Picker,
  },
  data() {
    return {
      columns: ['A', 'B', 'C', 'D', 'E'],
      currentIndex: 0
    };
  },
  mounted() {
    //獲取到picker的dom
    //如果咱們在pouop里面寫的話,就應(yīng)該寫到當彈窗出來再獲取dom,否則獲取不出來
    const pickerEl = this.$refs.picker.$el;
    pickerEl.addEventListener('wheel', this.handleWheel);
  },
  methods: {
    handleChange(value, index) {
      this.currentIndex = index;
      console.log('Selected value(value, index)', value, index);
    },
    handleWheel(event) {
      event.preventDefault();
      //Math.sign()函數(shù),返回+/-1,表示正數(shù)還是負數(shù),例如deltaY發(fā)現(xiàn)是-100,那么Math.sign返回也是-1,但是傳入0那就是0
      const delta = Math.sign(event.deltaY);
      //獲取最大下標
      const maxIndex = this.columns.length - 1;
      //計算當前下標,因為滾輪和拖拽是相反的邏輯,我們可以試下,觸控板和鼠標滾輪就是相反的,所以要減
      const newIndex = this.currentIndex - delta;
      //邊界處理
      if (newIndex >= 0 && newIndex <= maxIndex) {
        this.currentIndex = newIndex;
        //動畫可能不流暢
        //vant 4的話
        this.$refs.picker.scrollToOption(newIndex);
        //vant3  this.$refs.picker.scrollToOption(newIndex);
        //vant2 的解決方案,我是以下的解決方法解決的
          //這個是控制動畫的時長
         //  this.$refs.picker.$el.getElementsByClassName('van-picker-column__wrapper')[0].style.transitionDuration='800ms'
        //這個是給哪個變化添加屬性,由于省事就添加all
      //this.$refs.picker.$el.getElementsByClassName('van-picker-column__wrapper')[0].style.transitionProperty='all'
      }
    }
  },
};
</script>

? 在這個示例中,我們在 mounted 鉤子函數(shù)中獲取到了 Picker 組件的 DOM 元素,并添加了 wheel 事件監(jiān)聽函數(shù)。在 handleWheel 方法中,我們根據(jù)鼠標滾輪滾動的方向來修改 Picker 組件的選中值,并調(diào)用 scrollToOption 方法來實現(xiàn)滾動選中值的效果。最后,我們在 handleChange 方法中輸出了選中的值和索引。

需要注意的是,在 handleWheel 方法中,我們調(diào)用了 event.preventDefault() 來阻止瀏覽器默認的滾動行為,以避免與 Picker 組件的滾動效果沖突。

如何全局生效?

使用混入,以下是全部代碼,我的vant是2版本

// mixins.js 文件
//1.picker組件需要添加ref
//2.騙
export const myMixin = {
    methods: {
        //這個事件放到picker彈出的地方
        /***
         * picker滾動事件
         * @param picker picker的ref
         * @param cloum picker的數(shù)據(jù)
         * @param getCurFn 默認選中的index,是一個函數(shù),因為需要拿到實時的
         * @param setIndex 設(shè)置index的方法
         * @returns {Promise<void>}
         */
        async getpicker(picker,cloum,getCurFn,setIndex){

            await new Promise(resolve => {setTimeout(resolve,100)})
            const pickerEl = this.$refs[picker].$el;
            pickerEl.addEventListener('wheel', (event)=>this.handleWheel(event,picker,cloum,getCurFn,setIndex));
            // console.log("pickerEl",pickerEl)
        },
        handleWheel(event,picker,cloum,getCurFn,setIndex) {
            // debugger
            event.preventDefault();
            const delta = Math.sign(event.deltaY);
            // debugger
            const maxIndex = cloum.length - 1;
            const newIndex = getCurFn() + delta;
            // debugger
            this.$refs[picker].$el.getElementsByClassName('van-picker-column__wrapper')[0].style.transitionDuration='800ms'
            this.$refs[picker].$el.getElementsByClassName('van-picker-column__wrapper')[0].style.transitionProperty='all'
            if (newIndex >= 0 && newIndex <= maxIndex) {
                // this.popupData.defaultIndex = newIndex;
                // console.log(" setIndex", setIndex,newIndex)
                setIndex(newIndex)
            }
        },
    }
};

調(diào)用(需要再全部引用的地方都調(diào)用)

 this.getpicker('picker',this.popupData.comSurList,()=>this.popupData.defaultIndex,(index)=>this.popupData.defaultIndex=index)

我們能夠看到他的缺點了,需要再所有的地方都去調(diào)用一次

依賴包打補丁(最終解決,最簡單)

更新vant到最新版本

? 更新vant之后,我們可以發(fā)現(xiàn)vant的picker組件已經(jīng)支持滾動滑輪了,但是每個滑輪滑動的過大,可能一次跳過兩個選項,我們要進行修改

改源碼

? 改源碼的方式有以下幾種

  1. 提issues等待作者更新(莫不是在開玩笑)

  2. 將源碼粘貼到component文件,然后全局改引用的位置(有一點點麻煩,項目也會變大,也有通過在webpack添加alis添加別名直接全局修改引用)

  3. 將源碼倉庫fork到自己的倉庫,然后修改源碼后,然后在自己項目中的npm修改一下包的位置后面的rep改成自己倉庫的地址(但是記住千萬別刪這個倉庫,否則以后你的項目就啟不起來了)vant滾動條,前端,javascript

  4. 通過patch-package對源碼包打補丁

可以先了解一下patch-package 的介紹

說白了就三步

  1. 裝依賴
  2. 直接改源碼
  3. 執(zhí)行命令將改的源碼變成diff文件
  4. packagejson添加鉤子執(zhí)行
安裝一下patch package
npm i patch-package

yarn add patch-package postinstall-postinstall
改源碼

目錄 node_modules->vant->picker->PickerColumn.js

在node_modules中找到vant(注意不是@vant,那個可能是vant的一些補丁包)

可以看到他的以下結(jié)構(gòu)

vant滾動條,前端,javascript

全局搜索一下wheel,找到onMouseWheel的方法,可以除以一個倍數(shù),讓其流暢

vant滾動條,前端,javascript

編譯補丁
npx patch-package package-name

此時我們可以看到根目錄已經(jīng)添加了一個patches文件了,查看文件發(fā)現(xiàn)是我們修改的相關(guān)位置

vant滾動條,前端,javascript

添加鉤子

默認會在packagejson中scripts添加一個鉤子函數(shù)

"postinstall": "patch-package",

他的意思是安裝依賴的時候立馬支持patch-package打補丁

此時就可以測試一下,將node_modules刪除后測試一下是否成功了

異常解決

pm WARN lifecycle xxx.xxx.com@0.1.0~postinstall: cannot run in wd xxx.xxx.com@0.1.0 patch-package (wd=/node)

我們部署線上的時候可能會出問題,因為有的docker安裝依賴的時候工作目錄可能不一致,可以嘗試將鉤子函數(shù)添加一個打包前執(zhí)行,此時就會正常執(zhí)行了

  "prebuild": "patch-package",

由于項目可能需要有不同環(huán)境的打包命令,所以可以以下

vant滾動條,前端,javascript

 	//開發(fā)環(huán)境需要
	"postinstall": "patch-package",
	//打包需要
    "prebuild": "patch-package",
    "prebuild:test": "patch-package",
    "prebuild:feature1": "patch-package",
    "prebuild:feature2": "patch-package",
    "prebuild:prod": "patch-package"

于此,這項目就可以告別一段落文章來源地址http://www.zghlxwxcb.cn/news/detail-792764.html

到了這里,關(guān)于vant選擇器組件添加鼠標滾輪(多種解決方法包括生產(chǎn)環(huán)境)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 小程序使用Vant組件時報錯Failed to load font解決方法

    小程序使用Vant組件時報錯Failed to load font解決方法

    小程序引用Vant組件后每次重新編譯都會報錯 [渲染層網(wǎng)絡(luò)層錯誤] Failed to load font https://at.alicdn.com/t/font_2553510_iv4v8nulyz.woff2?t=1649083952952 雖然不影響小程序運行,但看著很難受 按照網(wǎng)上教程所說的request合法域名添加“https://at.alicdn.com”后還是會報錯,干脆不用網(wǎng)絡(luò)請求了,直接

    2024年02月08日
    瀏覽(17)
  • 鼠標上下滾輪不靈敏的修復方法

    鼠標上下滾輪不靈敏的修復方法

    在瀏覽網(wǎng)頁的時候,經(jīng)常需要使用鼠標來查看網(wǎng)頁中的內(nèi)容,但是有時候也會出現(xiàn)意外,比如鼠標上下滾輪出現(xiàn)問題失靈了,這該怎么辦?不用著急,下面就一起來看看解決的辦法。 方法一:針對Mac電腦 打開安全性與隱私性的輔助功能,勾選Logitech Options Daemon前面的勾即可。

    2024年02月13日
    瀏覽(22)
  • vue 拖動、縮放容器組件,支持移動端雙指縮放和PC端鼠標滾輪縮放

    本組件基于CSS的transform實現(xiàn)。移動端監(jiān)聽touch事件(單指移動,雙指移動+縮放),PC端監(jiān)聽mouse事件(移動)和滾動事件wheel(縮放),更新transform的translateX/translateY/scale值,從而實現(xiàn)縮放、移動。由于transform不會產(chǎn)生重排,因此不節(jié)流也可以有很好的性能,用戶體驗就像德芙

    2024年02月03日
    瀏覽(94)
  • 使用Vue2開發(fā)一個圖片預覽組件,支持多圖切換、縮放旋轉(zhuǎn)、鼠標滾輪、鍵盤按鍵、拖動等等操作

    使用Vue2開發(fā)一個圖片預覽組件,支持多圖切換、縮放旋轉(zhuǎn)、鼠標滾輪、鍵盤按鍵、拖動等等操作

    話不多說,咱們趕緊來開啟本章的內(nèi)容,這次小編給各位帶來的依舊是實用類文章,分享如何開發(fā)一個完整的 圖片預覽組件 ,它支持多圖切換、放大縮小、旋轉(zhuǎn)、鼠標滾輪操作、鍵盤按鍵控制、拖動等等的功能,并且使用方便、易擴展,零依賴。 項目演示技術(shù)小編采用的是

    2024年02月09日
    瀏覽(129)
  • 鼠標滾輪失靈怎么辦?電腦用戶必備教程(4個方法)

    鼠標滾輪失靈怎么辦?電腦用戶必備教程(4個方法)

    “為什么我的鼠標明明可以用,但是滾輪失靈了,上下滑動屏幕特別不方便,想問下有什么方法可以解決這個問題嗎?希望大家給我點建議!” 鼠標是我們計算機使用中的關(guān)鍵設(shè)備之一,而鼠標滾輪則是提高工作效率和便捷性的重要組成部分。然而,有時候我們可能會遇到鼠

    2024年02月04日
    瀏覽(15)
  • 解決 Ubuntu 22 中使用 Alt + Tab 切換窗口后,鼠標滾輪的滾動錯誤Bug行為,Ubuntu 22 中鼠標滾輪異常跳動

    安裝并運行? imwheel 可以解決這個問題。 必須在每次開機時啟動它(或者在應(yīng)用程序中添加它來開機啟動)。 可以用 pgrep -lf imwheel 來看它是否在運行;可以用 pkill imwheel 停止它。 遇到無法通過ctrl+滾輪進行縮放的問題, 可以參考:? ctrl+mouse wheel does not zoom in or out · Issue #134 ·

    2024年01月16日
    瀏覽(99)
  • 解決Adobe Acrobat鼠標滾輪太慢的問題

    解決Adobe Acrobat鼠標滾輪太慢的問題

    使用acrobat的時候,鼠標滾動的速度奇慢無比,并且我在首選項里也沒找到調(diào)快速度的方法。 網(wǎng)上給出的解決方案有 單頁滾動 和 調(diào)整鼠標滾動行數(shù) ,但是單頁滾動治標不治本,調(diào)整行數(shù)又會影響其余軟件的使用。 這里我們使用X-Mouse,官網(wǎng)地址 下載完成后,首先點擊 Add 來

    2024年02月12日
    瀏覽(37)
  • 小程序-基于vant的Picker組件實現(xiàn)省市區(qū)選擇

    小程序-基于vant的Picker組件實現(xiàn)省市區(qū)選擇

    因@vant/area-data部分的市/區(qū)數(shù)據(jù)跟后臺使用的高德/騰訊省市區(qū)有所出入,故須保持跟后臺用同一份數(shù)據(jù),所以考慮以下幾個組件 1、Area 2、Cascader 3、Picker 因為使用的是高德地圖的省市區(qū)json文件,用area的話修改結(jié)構(gòu)代價太大,費時費力。接著嘗試使用Cascader組件,但這個組件每

    2024年02月12日
    瀏覽(23)
  • vant 組件,時間選擇器的應(yīng)用 van-datetime-picker

    vant 組件,時間選擇器的應(yīng)用 van-datetime-picker

    如圖, 點擊箭頭彈出時間選擇器, 選完時間后顯示在頁面 ? ? ? 最后visitTime傳參是字符串? ? \\\"2023-01-17?17:43\\\"

    2024年02月03日
    瀏覽(98)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包