UNiAPP地區選擇

<template>
? <view class="container">
? ? <!-- 左側地區列表 -->
? ? <scroll-view
? ? ? class="left-list"
? ? ? scroll-y
? ? ? :scroll-into-view="currentLetterId"
? ? ? scroll-with-animation
? ? ? @scroll="onScroll"
? ? ? ref="scrollView"
? ? >
? ? ? <view
? ? ? ? v-for="group in dataList"
? ? ? ? :key="group.letter"
? ? ? ? :id="'letter-' + group.letter"
? ? ? ? class="group"
? ? ? ? :data-letter="group.letter"
? ? ? >
? ? ? ? <view class="group-letter">{{ group.letter }}</view>
? ? ? ? <view style="display: flex; gap: 20rpx; padding: 20rpx;">
?? ??? ??? ??? ??? ?<view v-for="item in group.items" :key="item" class="item">{{ item }}</view>
?? ??? ??? ??? ?</view>
? ? ? </view>
? ? </scroll-view>

? ? <!-- 右側字母索引 -->
? ? <view
? ? ? class="right-index"
? ? ? @touchstart.prevent="onTouchStart"
? ? ? @touchmove.prevent="onTouchMove"
? ? ? @touchend.prevent="onTouchEnd"
? ? ? ref="indexWrapper"
? ? >
? ? ? <view
? ? ? ? v-for="(letter, index) in letters"
? ? ? ? :key="letter"
? ? ? ? class="letter"
? ? ? ? :class="{ active: letter === activeLetter }"
? ? ? ? :data-index="index"
? ? ? >
? ? ? ? {{ letter }}
? ? ? </view>
? ? </view>
? </view>
</template>

<script>
export default {
? data() {
? ? return {
? ? ? letters: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''),
? ? ? dataList: [
? ? ? ? { letter: 'A', items: ['安慶', '鞍山', '安陽'] },
? ? ? ? { letter: 'B', items: ['北京', '保定', '包頭'] },
? ? ? ? { letter: 'C', items: ['長沙', '成都', '重慶'] },
? ? ? ? { letter: 'D', items: ['大連', '東莞', '德陽'] },
? ? ? ? { letter: 'F', items: ['福州', '佛山'] },
? ? ? ? { letter: 'G', items: ['廣州', '貴陽'] },
? ? ? ? { letter: 'H', items: ['杭州', '合肥', '哈爾濱'] },
? ? ? ? { letter: 'J', items: ['濟南', '嘉興'] },
? ? ? ? { letter: 'K', items: ['昆明'] },
? ? ? ? { letter: 'L', items: ['蘭州', '洛陽'] },
? ? ? ? { letter: 'M', items: ['綿陽'] },
? ? ? ? { letter: 'N', items: ['南京', '南昌'] },
? ? ? ? { letter: 'Q', items: ['青島', '泉州'] },
? ? ? ? { letter: 'S', items: ['上海', '蘇州', '深圳'] },
? ? ? ? { letter: 'T', items: ['天津', '唐山'] },
? ? ? ? { letter: 'W', items: ['武漢', '無錫'] },
? ? ? ? { letter: 'X', items: ['廈門', '西安'] },
? ? ? ? { letter: 'Y', items: ['煙臺', '宜昌'] },
? ? ? ? { letter: 'Z', items: ['鄭州', '珠海'] }
? ? ? ],
? ? ? currentLetterId: '',
? ? ? activeLetter: '',
? ? ? indexItemHeight: 0,
? ? ? indexTop: 0,
? ? };
? },
? mounted() {
? ? // 獲取右側字母索引容器的位置和單個字母高度
? ? uni.createSelectorQuery()
? ? ? .select('.right-index')
? ? ? .boundingClientRect(rect => {
?? ??? ??? ??? ?console.log('打印高度')
?? ??? ??? ??? ?console.log(rect)
? ? ? ? this.indexTop = rect.top;
? ? ? })
? ? ? .exec();
?? ??? ??? ?// 獲取每個字母的高度
?? ??? ??? ?this.$nextTick(() => {
?? ??? ??? ??? ?const letterHeights = [];
?? ??? ??? ??? ?this.letters.forEach((letter, index) => {
?? ??? ??? ??? ??? ?uni.createSelectorQuery()
?? ??? ??? ??? ??? ??? ?.select(`.right-index .letter:nth-child(${index + 1})`)
?? ??? ??? ??? ??? ??? ?.boundingClientRect(rect => {
?? ??? ??? ??? ??? ??? ??? ?letterHeights.push(rect.height);
?? ??? ??? ??? ??? ??? ??? ?// 當所有字母的高度都獲取到后,計算平均高度
?? ??? ??? ??? ??? ??? ??? ?if (letterHeights.length === this.letters.length) {
?? ??? ??? ??? ??? ??? ??? ??? ?this.indexItemHeight = letterHeights.reduce((a, b) => a + b, 0) / letterHeights.length;
?? ??? ??? ??? ??? ??? ??? ??? ?console.log('字母高度')
?? ??? ??? ??? ??? ??? ??? ??? ?console.log(this.indexItemHeight)
?? ??? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?})
?? ??? ??? ??? ??? ??? ?.exec();
?? ??? ??? ??? ?});
?? ??? ??? ?});
? },
? methods: {
? ? scrollToLetter(letter) {
? ? ? this.currentLetterId = 'letter-' + letter;
? ? ? this.activeLetter = letter;
? ? },
? ? onTouchStart(e) {
? ? ? this.handleTouch(e);
? ? },
? ? onTouchMove(e) {
? ? ? this.handleTouch(e);
? ? },
? ? onTouchEnd() {
? ? ? // 觸摸結束可以做一些清理操作,如果需要
? ? },
? ? handleTouch(e) {
? ? ? const touch = e.touches[0];
? ? ? const y = touch.clientY;
? ? ? // 計算觸摸點相對于字母索引頂部的偏移
? ? ? let index = Math.floor((y - this.indexTop) / this.indexItemHeight);
? ? ? if (index < 0) index = 0;
? ? ? if (index >= this.letters.length) index = this.letters.length - 1;
? ? ? const letter = this.letters[index];
? ? ? if (letter && letter !== this.activeLetter) {
? ? ? ? this.scrollToLetter(letter);
? ? ? }
? ? },
? ? onScroll(e) {
? ? ? // 可選:根據滾動位置動態改變右側高亮字母
? ? ? // 這里可以實現滾動聯動右側字母高亮,稍復雜,可根據需求添加
? ? }
? }
};
</script>

<style>
.container {
? display: flex;
? height: 100vh;
?? ?background-color: #fff;
}
.left-list {
? flex: 1;
}
.group {
? padding: 20rpx 0;
}
.group-letter {
? font-weight: bold;
? font-size: 36rpx;
? background: #F2F4F5;
? padding: 10rpx 30rpx;
}
.item {
?? ?width: 120rpx;
?? ?height: 42rpx;
?? ?line-height: 42rpx;
?? ?background-color: #F2F4F5;
?? ?text-align: center;
?? ?border-radius: 30rpx;
?? ?font-size: 24rpx;
}
.right-index {
? width: 60rpx;
? background: transparent;
? display: flex;
? flex-direction: column;
? align-items: center;
? justify-content: flex-start;
? user-select: none;
? /* 方便觸摸 */
? padding: 10rpx 0;
}
.letter {
? font-size: 28rpx;
? color: #666;
? padding: 4rpx 0;
? width: 100%;
? text-align: center;
? cursor: pointer;
}
.letter.active {
? color: #007AFF;
? font-weight: bold;
}
/* 通用隱藏方案 */
::-webkit-scrollbar {
? display: none !important;
? width: 0 !important;
? height: 0 !important;
? -webkit-appearance: none;
? background: transparent;
}

/* 安卓專用優化 */
/* #ifdef APP-PLUS */
scroll-view ::-webkit-scrollbar {
? display: none;
}
/* #endif */
</style>

最后效果,可以根據需要調試

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83498.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83498.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83498.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式硬件篇---CAN

文章目錄 前言1. CAN協議基礎1.1 物理層特性差分信號線終端電阻通信速率總線拓撲 1.2 幀類型1.3 數據幀格式 2. STM32F103RCT6的CAN硬件配置2.1 硬件連接2.2 CubeMX配置啟用CAN1模式波特率引腳分配過濾器配置&#xff08;可選&#xff09; 3. HAL庫代碼實現3.1 CAN初始化3.2 發…

DeepSeek-R1 Supervised finetuning and reinforcement learning (SFT + RL)

DeepSeek-R1Supervised finetuning and reinforcement learning (SFT RL) 好啊&#xff0c;我們今天的直播會非常透徹的跟大家系統性的分享一下整個agents AI就大模型智能體系統和應用程序。我們在做開發的時候&#xff0c;或者實際做企業級的產品落地的時候&#xff0c;你必…

機器學習 day04

文章目錄 前言一、線性回歸的基本概念二、損失函數三、最小二乘法 前言 通過今天的學習&#xff0c;我掌握了機器學習中的線性回歸的相關基本概念&#xff0c;包括損失函數的概念&#xff0c;最小二乘法的理論與算法實現。 一、線性回歸的基本概念 要理解什么是線性回歸&…

img.dims() <= 2 in function ‘cv::matchTemplate報錯

Mat src mat_ori;//imread(img_original);Mat src_template imread(img_template);cvtColor(src, src, COLOR_BGR2RGB);//不轉換&#xff0c;matchTemplate將報錯cvtColor(src_template, src_template,COLOR_BGR2RGB);//不轉換&#xff0c;matchTemplate將報錯 error: (-215…

NY321NY322美光閃存芯片NY323NY336

NY321NY322美光閃存芯片NY323NY336 在存儲技術飛速發展的今天&#xff0c;美光科技的閃存芯片憑借其創新架構與高性能表現&#xff0c;已成為工業自動化、智能終端等領域的核心組件。本文將圍繞技術解析、產品評測、行業趨勢、應用案例及市場動態五大維度&#xff0c;深入探討…

exit耗時高

背景&#xff1a;程序退出發現被強制退出&#xff0c;而不是正常的退出。正常退出是發送15信號&#xff0c;而異常退出是發送信號9&#xff0c;強制退出。退出機制是先發送信號15&#xff0c;然后6s內沒有退出完成&#xff0c;會發送信號9。通過查看退出流程&#xff0c;是將初…

docker compose up -d 是一個用于 通過 Docker Compose 在后臺啟動多容器應用 的命令

docker compose 表示調用 Docker Compose 工具&#xff0c;用于管理基于 YAML 文件定義的多容器應用。 up 核心指令&#xff0c;作用是根據 docker-compose.yml 文件中的配置&#xff0c;創建并啟動所有定義的服務、網絡、卷等資源。 如果容器未創建&#xff0c;會先構建鏡像&…

從輔助到協作:GitHub Copilot的進化之路

如果說現代程序員的標配工具除了VS Code、Stack Overflow之外&#xff0c;還有誰能入選&#xff0c;那一定是GitHub Copilot。從2021年首次亮相&#xff0c;到如今深度集成進開發者日常流程&#xff0c;這個“AI編程助手”已經不只是寫幾行自動補全代碼的小幫手了&#xff0c;而…

局部放大maya的視圖HUD文字大小的方法

一、問題描述&#xff1a; 有網友問&#xff1a;有辦法局部放大maya的字體嗎比如hud中currenttime打開之后畫面右下角有個frame 想放大一下能做到嗎&#xff1f; 在 Maya 中&#xff0c;可以通過自定義 HUD&#xff08;Heads-Up Display&#xff09;元素的字體大小來局部放大特…

C++中隱式的類類型轉換知識詳解和注意事項

一、隱式轉換的基本概念 隱式類型轉換&#xff08;implicit conversion&#xff09;指編譯器在需要時自動在兩種類型之間插入轉換代碼&#xff0c;無需顯式調用。對于內置類型&#xff08;如 int 到 double&#xff09;&#xff0c;轉換由標準定義&#xff1b;對于用戶自定義類…

【C++】18.二叉搜索樹

由于map和set的底層是紅黑樹&#xff0c;同時后面要講的AVL樹(高度平衡二叉搜索樹)&#xff0c;為了方便理解&#xff0c;我們先來講解二叉搜索樹&#xff0c;因為紅黑樹和AVL樹都是在二叉搜索樹的前提下實現的 在之前的C語言數據結構章節中&#xff0c;我們講過二叉樹&#x…

Leaflet使用SVG創建動態Legend

接前一篇文章&#xff0c;前一篇文章我們使用 SVG 創建了帶有動態文字的圖標&#xff0c;今天再看看怎樣在地圖上根據動態圖標生成相關的legend&#xff0c;當然這里也還是使用了 SVG 來生成相關顏色的 legend。 看下面的代碼&#xff0c;生成了一個 svg 節點&#xff0c;其中…

Linux基礎開發工具二(gcc/g++,自動化構建makefile)

3. 編譯器gcc/g 3.1 背景知識 1. 預處理&#xff08;進行宏替換/去注釋/條件編譯/頭文件展開等) 2. 編譯&#xff08;生成匯編) 3. 匯編&#xff08;生成機器可識別代碼&#xff09; 4. 連接&#xff08;生成可執行文件或庫文件) 3.2 gcc編譯選項 格式 &#xff1a; gcc …

PostGIS實現柵格數據入庫-raster2pgsql

raster2pgsql使用與最佳實踐 一、工具概述 raster2pgsql是PostGIS提供的命令行工具,用于將GDAL支持的柵格格式(如GeoTIFF、JPEG、PNG等)導入PostgreSQL數據庫,支持批量加載、分塊切片、創建空間索引及金字塔概覽,是柵格數據入庫的核心工具。 二、核心功能與典型用法 1…

精益數據分析(64/126):移情階段的用戶觸達策略——從社交平臺到精準訪談

精益數據分析&#xff08;64/126&#xff09;&#xff1a;移情階段的用戶觸達策略——從社交平臺到精準訪談 在創業的移情階段&#xff0c;精準找到目標用戶并開展深度訪談是驗證需求的關鍵。今天&#xff0c;我們結合《精益數據分析》中的方法論&#xff0c;探討如何利用Twit…

ORACLE RAC環境REDO日志量突然增加的分析

服務概述 CRM系統在7/11日出現REDO日志產生量突增&#xff0c;達到平時產生量的20倍以上&#xff0c;對數據同步已經造成了較大的影響。工程師接到故障申報后&#xff0c;及時進行響應&#xff0c;通過對相關日志等信息的深入分析&#xff0c;整理匯總此文檔。 二、數據庫REDO…

注冊表設置windows背景護眼色

方法一&#xff1a; CtrlR&#xff0c;輸入regedit打開注冊表 HKEY_CURRENT_USER\Control Panel\Colors 右側窗口Windows鍵值由255 255 255改為202 234 206。 方法二&#xff1a; 還是注冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\DefaultColo…

回溯法理論基礎 LeetCode 77. 組合 LeetCode 216.組合總和III LeetCode 17.電話號碼的字母組合

目錄 回溯法理論基礎 回溯法 回溯法的效率 用回溯法解決的問題 如何理解回溯法 回溯法模板 LeetCode 77. 組合 回溯算法的剪枝操作 LeetCode 216.組合總和III LeetCode 17.電話號碼的字母組合 回溯法理論基礎 回溯法 回溯法也可以叫做回溯搜索法&#xff0c;它是一…

自己手寫tomcat項目

一&#xff1a;Servlet的原理 在Servlet(接口中)有&#xff1a; 1.init():初始化servlet 2.getServletConfig()&#xff1a;獲取當前servlet的配置信息 3.service():服務器&#xff08;在HttpServlet中實現&#xff0c;目的是為了更好的匹配http的請求方式&#xff09; 4.g…

蘭亭妙微:用系統化思維重構智能座艙 UI 體驗

蘭亭妙微設計專注于以產品邏輯驅動的界面體驗優化&#xff0c;服務領域覆蓋AI交互、智能穿戴、IoT設備、智慧出行等多個技術密集型產業。我們倡導以“系統性設計”為方法論&#xff0c;在用戶需求與技術邊界之間找到最優解。 此次智能駕駛項目&#xff0c;我們為某車載平臺提供…