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 相关文章推荐
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
Aug 08 Javascript
js jquery验证银行卡号信息正则学习
Jan 21 Javascript
仿JQuery输写高效JSLite代码的一些技巧
Jan 13 Javascript
js实现按钮颜色渐变动画效果
Aug 20 Javascript
javascript类型系统——日期Date对象全面了解
Jul 13 Javascript
分享javascript、jquery实用代码段
Oct 20 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
angularjs实现过滤并替换关键字小功能
Sep 19 Javascript
Vue精简版风格指南(推荐)
Jan 30 Javascript
react router4+redux实现路由权限控制的方法
May 03 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
Feb 28 Javascript
微信小程序实现传递多个参数与事件处理
Aug 12 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
php 连接mssql数据库 初学php笔记
2010/03/01 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
javascript数据类型示例分享
2015/01/19 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
JS数组中对象去重操作示例
2019/06/04 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
python字符串的常用操作方法小结
2016/05/21 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
浅析Python的命名空间与作用域
2020/11/25 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
Python爬取某拍短视频
2021/06/11 Python