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 相关文章推荐
AngularJS入门教程之Hello World!
Dec 06 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
Oct 29 Javascript
JavaScript获取对象在页面中位置坐标的方法
Feb 03 Javascript
JS中的forEach、$.each、map方法推荐
Apr 05 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
May 25 Javascript
js删除局部变量的实现方法
Jun 25 Javascript
bootstrap flask登录页面编写实例
Nov 01 Javascript
JS如何生成一个不重复的ID的函数
Dec 25 Javascript
老生常谈angularjs中的$state.go
Apr 24 Javascript
Vue 2.0的数据依赖实现原理代码简析
Jul 10 Javascript
Angular脚手架开发的实现步骤
Apr 09 Javascript
vue中nextTick用法实例
Sep 11 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
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
详解js类型判断
2018/05/22 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
Python re模块介绍
2014/11/30 Python
Python基本语法经典教程
2016/03/11 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
django实现用户登陆功能详解
2017/12/11 Python
python-str,list,set间的转换实例
2018/06/27 Python
Python中文编码知识点
2019/02/18 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
会议邀请书范文
2014/02/02 职场文书
少先队中队工作总结
2015/08/14 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
用Python将GIF动图分解成多张静态图片
2021/06/11 Python
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
KVM基础命令详解
2022/04/30 Servers