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

vue3+elementUI-plus實現(xiàn)select下拉框的虛擬滾動

這篇具有很好參考價值的文章主要介紹了vue3+elementUI-plus實現(xiàn)select下拉框的虛擬滾動。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

網(wǎng)上查了幾個方案,要不就是不兼容,要不就是不支持vue3,
最終找到一個合適的,并且已上線使用,需要修改一下樣式:
代碼如下:
main.js里引用

import 'vue3-virtual-scroller/dist/vue3-virtual-scroller.css';
import { RecycleScroller } from 'vue3-virtual-scroller';
app.component('RecycleScroller', RecycleScroller);

vue文件:

<el-form-item label="用戶" prop="seriesId">
                    <div ref="selectWrapper" @click="toggleDropdown($event)" class="select-wrapper">
                        <el-input style="width: 240px"
                        placeholder="請輸入搜索內(nèi)容"
                        v-model="selectedOption"
                        :suffix-icon="selectedOption ? 'el-icon-circle-close' : null"
                        @clear="clearSearch"
                        ></el-input>
                    </div>
                    <el-icon class="clear-btn" v-if="selectedOption" @click.stop="clearSearch"><CircleClose /></el-icon>
                    <Teleport to="body">
                        <div v-show="isOpen"  ref="dropdown" class="virtual-dropdown" :style="dropdownStyles" @click="closeDropdown">
                            <RecycleScroller
                                class="virtual-list"
                                :buffer="1000"
                                :prerender="200"
                                style="height: 270px"
                                :item-size="24"
                                key-field="id"
                                :items="filteredSeriesList"
                                >
                                <template v-slot="{ item, index }">
                                    <div class="list-item" :key="index" @click.stop="handleItemClick(item)">
                                    <span>{{ item.id }}</span>&nbsp;-&nbsp;
                                    <span>{{ item.name }}</span>
                                    </div>
                                </template>
                                </RecycleScroller>
                        </div>
                    </Teleport>
                </el-form-item>

js代碼:

<script setup name="LeadsList">
const rowCount = ref(0);
    const rowCount2 = ref(0);
    const leadsList = ref([]);
    const loading = ref(false);
    const activeButton = ref(0);
    const seriesList = ref([]);
    const filteredSeriesList = ref([]); // 初始狀態(tài)下,篩選后的列表與原始列表相同
    const indexLayer = ref(false);
    const open = ref(false);
    const dropdown = ref(null);
    const repeatLoading = ref(false);
    const repeatList = ref([]);
    const dropdownStyles = ref({});
    const selectWrapper = ref({});
    const isOpen = ref(false);
    const selectedOption = ref('');
    const data = reactive({
        queryParams: {
            pageIndex: 1,
            pageSize: 10,
            phone: "",
            seriesId: null,
        },
        queryParamsRepeat: {
            pageIndex: 1,
            pageSize: 10,
            companyId: 1,
            userId: 1
        }
    });

    const { queryParams,queryParamsRepeat } = toRefs(data);


    watch(selectedOption, (newValue) => {
        search(newValue);
    });
    function search (keyword) {
        if (keyword.trim() === "") {
      filteredSeriesList.value = [...seriesList.value];
        } else {
        filteredSeriesList.value = seriesList.value.filter((item) =>
            item.name.toLowerCase().includes(keyword.toLowerCase())
        );
        }
    }
    function handleItemClick(item) {
      queryParams.value.seriesId = item.id;
      selectedOption.value = item.name;
      closeDropdown()
    }
    function closeDropdown(event = null) {
        isOpen.value = false;
        if (
            event &&
            (selectWrapper.value.contains(event.target) ||
            dropdown.value.contains(event.target))
        ) {
            return;
        }
        isOpen.value = false;
    }
    function toggleDropdown($event) {
        $event.stopPropagation(); // 阻止事件冒泡
        isOpen.value = !isOpen.value;
        if (isOpen.value) {
            const rect = selectWrapper.value.getBoundingClientRect();
            const { x, y, width, height } = rect;
            dropdownStyles.value = {
            position: 'fixed',
            top: `${y + height}px`,
            left: `${x}px`,
            width: `${width}px`,
            };
        }
    }
    function clearSearch () {
        queryParams.value.seriesId = '';
        selectedOption.value = '';
        filteredSeriesList.value = [...seriesList.value];
    }

css代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-649014.html

.virtual-dropdown {
  position: absolute;
  inset: 100% auto auto 0;
  z-index: 2000;
  width: 100%;
  overflow-y: auto;
  overflow-x: hidden;
  border: 1px solid #ebeef5;
  border-radius: 4px;
  background-color: #fff;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
}

.list-item {
  display: flex;
  padding: 0 10px;
  align-items: center;
  height: 24px;
  cursor: pointer;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}

.list-item:hover {
  background-color: #f5f7fa;
}
.clear-btn {
    border: none;
    background: transparent;
    cursor: pointer;
    position: absolute;
    right: 14px;
  }

到了這里,關于vue3+elementUI-plus實現(xiàn)select下拉框的虛擬滾動的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • vue3+ts+elementui-plus二次封裝彈框

    一、彈框組件BaseDialog

    2024年02月15日
    瀏覽(27)
  • vue3項目創(chuàng)建(vite3+ts+elementui-plus)

    vue3項目創(chuàng)建(vite3+ts+elementui-plus)

    目的:vue3+vite+ts 安裝依賴,安裝vite的工具 Vite下一代的前端工具鏈為開發(fā)提供極速響應v4.3 創(chuàng)建工程 –template vue-ts 后面的是配置模板,有很多,也有react,官網(wǎng)有介紹 啟動工程 安裝路由 配置vite-env.d.ts 為了讓ts識別.vue文件 安裝element-plus 注意vue3用的是element-plus別裝錯版本了

    2024年02月16日
    瀏覽(20)
  • VUE3 + Elementui-Plus 之 樹形組件el-tree 一鍵展開(收起);一鍵全選(不全選)

    VUE3 + Elementui-Plus 之 樹形組件el-tree 一鍵展開(收起);一鍵全選(不全選)

    實現(xiàn)步驟: tree組件部分: ts部分: 頁面效果: 默認狀態(tài) 展開狀態(tài) 折疊狀態(tài) 全選狀態(tài) 全不選狀態(tài) 注意:以上方法會展開或折疊所有節(jié)點;全選或全不選節(jié)點。 問題:數(shù)據(jù)量過大以上操作會有明顯卡頓;有高效解決方法的朋友可以交流。

    2024年04月11日
    瀏覽(30)
  • elementUi重置Select選擇器樣式、option、deep、vue3、plus

    樣式標簽屬性為 style scoped lang=\\\"scss\\\"/style

    2024年02月14日
    瀏覽(23)
  • Vue+EleMentUI實現(xiàn)el-table-colum表格select下拉框可編輯

    Vue+EleMentUI實現(xiàn)el-table-colum表格select下拉框可編輯

    在進行采購入庫的過程中,有必要對表格中的一行進行快速編輯保存,節(jié)省時間,提高工作效率!,而不是每次編輯都要彈窗才可編輯 源碼:https://gitee.com/charlinchenlin/store-pos 控制是否顯示select下拉框 如果showInput的值與當前的inboundId相同,則顯示下拉選項,否則顯示數(shù)據(jù)信息

    2024年02月01日
    瀏覽(26)
  • vue3實現(xiàn)自定義select下拉框內(nèi)容之城市區(qū)域篇

    vue3實現(xiàn)自定義select下拉框內(nèi)容之城市區(qū)域篇

    歡迎點擊領取 -《前端開發(fā)面試題進階秘籍》:前端登頂之巔-最全面的前端知識點梳理總結(jié) 需求分析: 1、實現(xiàn)一個區(qū)域下拉選項與現(xiàn)有ui組件庫不同,支持多選、單選需求 2、支持選中區(qū)域后-全選中當前區(qū)域下的所有城市信息 3、只能選中當前一個區(qū)域的內(nèi)的城市其余城市禁

    2024年02月13日
    瀏覽(19)
  • Vue 3 + Element UI Plus 實現(xiàn) Select 下拉框的虛擬滾動效果詳解與代碼示例

    在 Vue 3 項目中,當下拉框中的選項過多時,使用虛擬滾動可以提升性能和用戶體驗。本文將介紹如何使用 Vue 3 和 Element UI Plus(el-select-plus)組件實現(xiàn) Select 下拉框的虛擬滾動效果,并提供詳細的代碼示例。 首先,確保你已經(jīng)安裝了 Element UI Plus,它是 Element UI 的擴展版本,支

    2024年02月08日
    瀏覽(37)
  • elementUI之下拉選項加多選框功能實現(xiàn)vue3+ts

    根據(jù) @牛先森家的牛奶 的代碼修改后實現(xiàn) 具體參考原博主文章,這里只對部分細節(jié)調(diào)整,記錄一下

    2024年02月17日
    瀏覽(25)
  • vue3+element-plus 通過v-infinite實現(xiàn)下拉滾動無限加載

    vue3+element-plus 通過v-infinite實現(xiàn)下拉滾動無限加載

    v-infinite官網(wǎng) v-infinite-scroll無限滾動組件使用詳解 ?官網(wǎng)給到的基礎案例: 自己寫了一個簡單的demo: 當使用v-infinite時,控制臺會報錯: ?原因: 官方上的Issues解釋是需要nextTick()之后再去顯示 解決方法是組件掛載完成再去顯示el-select組件 所以在上面demo中select組件加了v-if,

    2024年02月09日
    瀏覽(25)
  • 【Vue2 + ElementUI】更改el-select的自帶的下拉圖標為倒三角,并設置相關文字顏色和大小

    【Vue2 + ElementUI】更改el-select的自帶的下拉圖標為倒三角,并設置相關文字顏色和大小

    效果圖 實現(xiàn) 總結(jié) 將el-select自帶的下拉選擇圖標(如下圖 1- 箭頭),替換成自定義圖標(如下圖 2- 倒三角) (1)利用控制臺找到 圖 1 所在的位置,如下該圖標是通過 偽類元素 添加的。 (2) 替換為 圖 2 ? ① 只更改圖標,不更改大小 在圖標庫(例 elementUI)找對應的圖標

    2024年01月25日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包