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 Keycode对照表
Oct 24 Javascript
javascript 操作Word和Excel的实现代码
Oct 26 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
Mar 19 Javascript
如何编写高质量JS代码
Dec 28 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
Sep 16 Javascript
js实现的下拉框二级联动效果
Apr 30 Javascript
jQuery插件passwordStrength密码强度指标详解
Jun 24 Javascript
Input文本框随着输入内容多少自动延伸的实现
Feb 15 Javascript
node.js基础知识小结
Feb 26 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
Jan 27 Javascript
jQuery zTree插件使用简单教程
Aug 16 jQuery
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
Aug 13 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缓存技术介绍
2006/11/25 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
PHP中的替代语法简介
2014/08/22 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
前端微信支付js代码
2016/07/25 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
2019/01/09 jQuery
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
Python列表append和+的区别浅析
2015/02/02 Python
解读Django框架中的低层次缓存API
2015/07/24 Python
使用python实现省市三级菜单效果
2016/01/20 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
韩国11街:11STREET
2018/03/27 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
校长岗位职责
2013/11/26 职场文书
本科生导师推荐信范文
2014/05/18 职场文书
嘉宾邀请函
2015/01/31 职场文书
幼师中班个人总结
2015/02/12 职场文书
追悼会答谢词范文
2015/09/29 职场文书
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技