日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue项目通讯录_Vue实现类似通讯录功能(下)

發布時間:2023/12/20 vue 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue项目通讯录_Vue实现类似通讯录功能(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

字母索引滾動監聽

修改字母索引組件,綁定三個touch事件,分別是touchStart、touchMove、touchEnd。

定義三個touch事件

只有當touchstart之后,才執行touchmove里的內容,所以在data里定義一個標識位touchStatus,默認值為false,

當手指觸摸的時候,標識位的值為true,結束滑動的時候,標識位的值為false。只有當標識位的值為true的時候,才去執行move事件的處理。

然后要做的一件事就是,當我們在字母索引處上下滑動的時候,現在所在的位置是第幾個字母。

主要是思路是:

1.獲得A字母距離頂部的高度

2.滑動的時候看下當前手指位置距離頂部的高度

3.前兩個做一個差值,算出當前手指位置和A字母頂部的差值,

然后除以每個字母的高度,就能算出當前是第幾個字母了

4.然后取這個字母觸發change事件給外部

如果想根據下標,找到下標對應的字母的話,首先得有個數組存儲字母的列表。但是現在cities是個對象,并不是個數組,所以我們需要一個數組。

在computed計算屬性中定義一個letters

構建letters

這樣就構建出了一個名字叫做letters的計算屬性,它的內容大概是這樣的['A', 'B', 'C', 'D',...],返回的結果就是這樣的數組。

有了這個數組,之前字母索引處的循環也可以相應的改一下,之前是做cities對象的循環。現在可以直接根據這個數組循環。

修改了一下下

獲取A字母距離頂部的高度

首先綁定一下dom元素:

獲取dom元素

然后在move的時候,如果此時touchStatus為·true·,開始執行以下代碼,定義一個startY,A字母的頂部高度是它的offsetTop,那么就這樣寫this.$refs['A'][0].offsetTop(this.$refs['A']是個數組,必須取下標0才能拿到它的dom元素,)

獲取A字母距離紅色區域下沿的高度

我是瀏覽器測試圖:

我是瀏覽器測試圖

此時在索引處拖動的時候,控制臺不停的打印一個值,這個值就是A字母頂部距離紅色區域最下沿的高度(紅色區域是指的搜索框)。

我是示意圖

獲取當前手指距離頂部的高度并做差值

計算手指的位置

touch事件有個參數e,事件對象里 它會有一個touches的數組,第0項表示的是手指的信息,這里獲取到手指的clientY的值。

為啥這里是clientY?為啥不和上面的一樣是offsetTop?

讓我們走進e.touches

image.png

這里可以看到e.touches里這么一些屬性。

####這里是百度的touch事件的科普

在移動端頁面開發時,常常會用到touch事件,

比如左滑右滑的輪播等。常用的觸摸事件有touchstart,touchmove,touchend。

每個事件包含下面三個用于跟蹤虎摸的屬性:

touches:表示當前跟蹤的觸摸操作的touch對象的數組。

targetTouches:特定于事件目標的Touch對象的數組。

changeTouches:表示自上次觸摸以來發生了什么改變的Touch對象的數組。

每個touch事件包含下面的屬性:

clientX:觸摸目標在視口中的x坐標。

clientY:觸摸目標在視口中的y坐標。

identifier:標識觸摸的唯一ID。

pageX:觸摸目標在頁面中的x坐標。

pageY:觸摸目標在頁面中的y坐標。

screenX:觸摸目標在屏幕中的x坐標。

screenY:觸摸目標在屏幕中的y坐標。

target:觸摸的DOM節點目標。

打印一波

打印一下這3個Y的值,clientY和pageY在這里是相等的,但是screenY與它們不同,保險起見,這里最好用的是clientY。

clientY被分割了

clientY的距離是這樣的,所以如果想算出手指距離紅色區域最下沿的高度,得用這個clientY - 紅色區域的高度(一個搜索框+標題欄部分),這部分的高度在我這里是160。

所以才有const touchY = e.touches[0].clientY - 160

算出是第幾個字母

得到這部分高度之后,用這部分高度 - 第一步得到的 高度,算差值。這個差值是當前手指的高度 到 A字母的高度,然后用這個差值 除以 每個字母的高度,我這里每個字母的高度是 40,所以有下圖:

算出是第幾個字母

記得用Math.floor向下取個整啊,得到字母的下標索引

取這個字母觸發change事件給外部

取這個字母向外派發事件

當索引在0 到 字母數組的長度之間時,派發change事件。

一定要加這個條件!不然index的值可能會有問題,親測!因為滑動右側索引的時候,整個索引是到底部的,但是底部并沒有字母了,此時得到的索引值超過了26(26個英文字母)

給父組件派發的change事件所帶的內容是字母A、B、C,

this.letters[index]獲取到的是letters字母數組內下標為index的內容。

到這里為止!!!列表和索引的監聽終于做完啦~~~

放張完成圖

總結

以上是生活随笔為你收集整理的vue项目通讯录_Vue实现类似通讯录功能(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。