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 相关文章推荐
js正确获取元素样式详解
Aug 07 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
Apr 25 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
Jul 17 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
Oct 17 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
Jun 21 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
Sep 04 Javascript
在vue项目中引用Iview的方法
Sep 14 Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 Javascript
小程序文字跑马灯效果
Dec 28 Javascript
jQuery控制input只能输入数字和两位小数的方法
May 16 jQuery
初试vue-cli使用HBuilderx打包app的坑
Jul 17 Javascript
JavaScript canvas绘制折线图
Feb 18 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异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
js加解密 脚本解密
2008/02/22 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
关于jquery form表单序列化的注意事项详解
2017/08/01 jQuery
vue中的scope使用详解
2017/10/29 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
nodejs中方法和模块用法示例
2018/12/24 NodeJs
javascript的this关键字详解
2019/05/20 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
2020/02/21 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
python生成IP段的方法
2015/07/07 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
python小白学习包管理器pip安装
2020/06/09 Python
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
实习鉴定评语
2014/01/19 职场文书
团日活动总结书
2014/05/08 职场文书
护林防火标语
2014/06/27 职场文书
物业保安岗位职责
2014/07/02 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
担保书范本
2015/01/20 职场文书
初中语文教学研修日志
2015/11/13 职场文书
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android