Ionic實(shí)現(xiàn)仿通訊錄點(diǎn)擊滑動(dòng)及$ionicscrolldelegate使用分析
引言
在諾亞財(cái)富項(xiàng)目中,使用到了通訊錄,如果只是簡(jiǎn)單的查看,我個(gè)人覺得可能過于單調(diào),于是就在查看的基礎(chǔ)上,增加了點(diǎn)擊滑動(dòng)的效果。目的有兩個(gè):1.體驗(yàn)不錯(cuò)。2.通訊錄的數(shù)據(jù)量較大,我們?cè)邳c(diǎn)擊一個(gè)模塊的同時(shí),使這個(gè)模塊滑動(dòng)至最上層,可視范圍也會(huì)變大。
效果
點(diǎn)擊一個(gè)模塊,頁面即開始向上滑動(dòng),直到這個(gè)模塊至于頁面最上層。
這是點(diǎn)擊前的地方,我們點(diǎn)擊運(yùn)營(yíng)中心:
點(diǎn)擊后就會(huì)有一個(gè)滑動(dòng)的動(dòng)畫使這個(gè)模塊滑動(dòng)到頂部:
實(shí)現(xiàn)
獲取元素,動(dòng)態(tài)生成id
我們?cè)邳c(diǎn)擊一個(gè)元素的同時(shí),我們需要讓程序知道我們點(diǎn)擊了哪里,是具體到一個(gè)div,而不是我們手指點(diǎn)擊的地方。
在之前的wiki中有介紹到,接口返回的數(shù)據(jù)格式是一維數(shù)組,在轉(zhuǎn)成多維數(shù)組的同時(shí)需要對(duì)數(shù)據(jù)進(jìn)行一次遍歷,在這個(gè)時(shí)候我們就可以對(duì)各條數(shù)據(jù)加上id了:
在前端頁面這樣綁定id
<div ng-repeat="x in contacts_list" id="{{x.id}}">
Jquery中的scrolltop
一般大家都會(huì)想到使用jquery的這個(gè)方法,
使用方法是:
$(selector).scrollTop(offset)
這樣可以實(shí)現(xiàn)滑動(dòng),但是在使用過程中發(fā)現(xiàn):點(diǎn)擊同一個(gè)模塊,不同的滑動(dòng)位置點(diǎn)擊滑動(dòng)的距離也不一樣,而且滑動(dòng)到上層的內(nèi)容就不能再滑動(dòng)回去的,這與我們的需求嚴(yán)重不符。
并且也研究了一些其他的插件,都不能實(shí)現(xiàn)我們想要的效果,那就像如此強(qiáng)大的ionic框架,是否會(huì)給我們提供這樣一個(gè)方法呢?
$ionicScrollDelegate
授權(quán)控制滾動(dòng)視圖(通過ion-centent和 ion-scroll指令創(chuàng)建)。
該方法直接被$ionicScrollDelegate服務(wù)觸發(fā),來控制所有滾動(dòng)視圖。用 $getByHandle方法控制特定的滾動(dòng)視圖。
這里包含了較多的方法,其中resize()方法將在ng-if中經(jīng)常被使用到,另外
它提供了一個(gè)獲取屏幕當(dāng)前滾動(dòng)高度的方法getPositionScroll():
getScrollPosition()
• 返回: 對(duì)象 滾動(dòng)到該視圖的位置,具有一下屬性:
o {數(shù)值} left 從左側(cè)到用戶已滾動(dòng)的距離(開始為 0)。
o {數(shù)值} top 從頂部到用戶已滾動(dòng)的距離 (開始為 0)。
這里我們只需要用到垂直高度,所以使用$ionicScrollDelegate. getPositionScroll().top即可獲取當(dāng)前滾動(dòng)高度。
ScrollTo與scrollBy
這兩個(gè)方法就類似于絕對(duì)路徑(scrollTo)與相對(duì)位置(scrollBy)的關(guān)系。
我們獲取當(dāng)前點(diǎn)擊模塊的位置使用如下方法:
document.getElementById(x.id).offsetTop
這里獲取的是此div距離頂部的位置,但是我們每次的需求是希望我們點(diǎn)擊的模塊滑動(dòng)到屏幕的最上方,而不是整個(gè)內(nèi)容的頂部,所以這里我們使用scrollBy比較好。
這樣的話,每次只需要移動(dòng)屏幕頂部到點(diǎn)擊模塊的距離即可,方法是:
var scroll = document.getElementById(x.id).offsetTop - $ionicScrollDelegate.getScrollPosition().top;
然后在點(diǎn)擊的方法中調(diào)用ionic自帶的scrollBy方法:
$ionicScrollDelegate.resize();
$ionicScrollDelegate.scrollBy(0,scroll,true);
至此,此功能已經(jīng)實(shí)現(xiàn),希望對(duì)大家有幫助。
本文所述到此結(jié)束,Ionic實(shí)現(xiàn)仿通訊錄點(diǎn)擊滑動(dòng)及$ionicscrolldelegate使用分析已經(jīng)實(shí)現(xiàn)了,希望對(duì)大家有所幫助。
相關(guān)文章
最簡(jiǎn)單的jQuery程序 入門者學(xué)習(xí)
用jQuery寫的一個(gè)簡(jiǎn)單的程序,用于入門練習(xí),發(fā)給大家,希望初學(xué)者有用.2009-07-07jquery控制左右箭頭滾動(dòng)圖片列表的實(shí)例
jquery控制左右箭頭滾動(dòng)圖片列表的實(shí)例,需要的朋友可以參考一下2013-05-05Jquery EasyUI Datagrid右鍵菜單實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了Jquery EasyUI Datagrid右鍵菜單的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12jQuery右鍵菜單contextMenu使用實(shí)例
在最近項(xiàng)目中需要頻繁的右鍵菜單操作。我采用了contextMenu這款jQuery插件。2011-09-09jQuery表格插件ParamQuery簡(jiǎn)單使用方法示例
這篇文章主要介紹了jQuery表格插件ParamQuery簡(jiǎn)單使用方法示例,大家參考使用吧2013-12-12基于jquery的修改當(dāng)前TAB顯示標(biāo)題的代碼
在當(dāng)前tab選項(xiàng)卡中單擊鏈接后,新內(nèi)容在當(dāng)前選項(xiàng)卡中顯示,但標(biāo)題內(nèi)容還是上一頁標(biāo)題要改為新的標(biāo)題。2010-12-12jquery對(duì)標(biāo)簽添加只讀(readonly)或者禁用(disabled)屬性
這篇文章主要介紹了jquery對(duì)標(biāo)簽添加只讀(readonly)或者禁用(disabled)屬性,jQuery是一個(gè)JavaScript庫。極大地簡(jiǎn)化了JavaScript編程,下面關(guān)于其詳細(xì)介紹,需要的小伙伴可以參考一下2022-03-03jQuery語法總結(jié)和注意事項(xiàng)小結(jié)
jQuery是繼prototype之后的又一個(gè)優(yōu)秀的Javascript框架,它是一個(gè)簡(jiǎn)潔快速靈活的JavaScript框架,它能讓你在你的網(wǎng)頁上簡(jiǎn)單的操作文檔、處理事件、實(shí)現(xiàn)特效并為Web頁面添加Ajax交互2012-11-11