Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析


Posted in Javascript onJanuary 18, 2016

引言

在诺亚财富项目中,使用到了通讯录,如果只是简单的查看,我个人觉得可能过于单调,于是就在查看的基础上,增加了点击滑动的效果。目的有两个:1.体验不错。2.通讯录的数据量较大,我们在点击一个模块的同时,使这个模块滑动至最上层,可视范围也会变大。

效果

点击一个模块,页面即开始向上滑动,直到这个模块至于页面最上层。
这是点击前的地方,我们点击运营中心:

Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析

点击后就会有一个滑动的动画使这个模块滑动到顶部:

Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析实现

获取元素,动态生成id
我们在点击一个元素的同时,我们需要让程序知道我们点击了哪里,是具体到一个div,而不是我们手指点击的地方。
在之前的wiki中有介绍到,接口返回的数据格式是一维数组,在转成多维数组的同时需要对数据进行一次遍历,在这个时候我们就可以对各条数据加上id了:

Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析

在前端页面这样绑定id

<div ng-repeat="x in contacts_list" id="{{x.id}}">

Jquery中的scrolltop

Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析

一般大家都会想到使用jquery的这个方法,

使用方法是:

$(selector).scrollTop(offset)

这样可以实现滑动,但是在使用过程中发现:点击同一个模块,不同的滑动位置点击滑动的距离也不一样,而且滑动到上层的内容就不能再滑动回去的,这与我们的需求严重不符。
并且也研究了一些其他的插件,都不能实现我们想要的效果,那就像如此强大的ionic框架,是否会给我们提供这样一个方法呢?

$ionicScrollDelegate

授权控制滚动视图(通过ion-centent和 ion-scroll指令创建)。
该方法直接被$ionicScrollDelegate服务触发,来控制所有滚动视图。用 $getByHandle方法控制特定的滚动视图。

这里包含了较多的方法,其中resize()方法将在ng-if中经常被使用到,另外

它提供了一个获取屏幕当前滚动高度的方法getPositionScroll():

getScrollPosition()

• 返回: 对象 滚动到该视图的位置,具有一下属性:
o {数值} left 从左侧到用户已滚动的距离(开始为 0)。
o {数值} top 从顶部到用户已滚动的距离 (开始为 0)。

这里我们只需要用到垂直高度,所以使用$ionicScrollDelegate. getPositionScroll().top即可获取当前滚动高度。

ScrollTo与scrollBy

这两个方法就类似于绝对路径(scrollTo)与相对位置(scrollBy)的关系。

我们获取当前点击模块的位置使用如下方法:

document.getElementById(x.id).offsetTop

这里获取的是此div距离顶部的位置,但是我们每次的需求是希望我们点击的模块滑动到屏幕的最上方,而不是整个内容的顶部,所以这里我们使用scrollBy比较好。

这样的话,每次只需要移动屏幕顶部到点击模块的距离即可,方法是:

var scroll = document.getElementById(x.id).offsetTop - $ionicScrollDelegate.getScrollPosition().top;

然后在点击的方法中调用ionic自带的scrollBy方法:

$ionicScrollDelegate.resize();
$ionicScrollDelegate.scrollBy(0,scroll,true);

至此,此功能已经实现,希望对大家有帮助。

本文所述到此结束,Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析已经实现了,希望对大家有所帮助。

Javascript 相关文章推荐
replace()方法查找字符使用示例
Oct 28 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
Nov 25 Javascript
详解JavaScript for循环中发送AJAX请求问题
Jun 23 Javascript
浅析Javascript的自动分号插入(ASI)机制
Sep 29 Javascript
最常见和最有用的字符串相关的方法详解
Feb 06 Javascript
jQuery手风琴的简单制作
May 12 jQuery
vue mint-ui学习笔记之picker的使用
Oct 11 Javascript
原生JS实现自定义下拉单选选择框功能
Oct 12 Javascript
jQuery实现的老虎机跑动效果示例
Dec 29 jQuery
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
Feb 20 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 Javascript
微信小程序个人中心的列表控件实现代码
Apr 26 Javascript
jQuery实现多级联动下拉列表查询框
Jan 18 #Javascript
jquery validate表单验证的基本用法入门
Jan 18 #Javascript
jQuery添加删除DOM元素方法详解
Jan 18 #Javascript
AngularJS仿苹果滑屏删除控件
Jan 18 #Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
Jan 18 #Javascript
jquery.validate 自定义验证方法及validate相关参数
Jan 18 #Javascript
实例详解jQuery表单验证插件validate
Jan 18 #Javascript
You might like
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
Jvascript学习实践案例(开发常用)
2012/06/25 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
浅谈python可视化包Bokeh
2018/02/07 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
Python OpenCV实现视频分帧
2019/06/01 Python
Django文件存储 自己定制存储系统解析
2019/08/02 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
毕业学生推荐信
2013/12/01 职场文书
《夏夜多美》教学反思
2014/02/17 职场文书
小学端午节活动方案
2014/03/13 职场文书
请假条范文大全
2014/04/10 职场文书
2014年会计工作总结
2014/11/27 职场文书
写景作文评语集锦
2014/12/25 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang