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 相关文章推荐
zeroclipboard复制到剪切板的flash
Aug 04 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
Jan 23 Javascript
无刷新预览所选择的图片示例代码
Apr 02 Javascript
js+html5实现的自由落体运动效果代码
Jan 28 Javascript
js选择器全面解析
Jun 27 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
Oct 29 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
Jan 04 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
Feb 21 Javascript
Vue关于数据绑定出错解决办法
May 15 Javascript
JavaScript操作文件_动力节点Java学院整理
Jun 30 Javascript
Vue 之孙组件向爷组件通信的实现
Apr 23 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
基于PHP+MySQL的聊天室设计
2006/10/09 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
JS动态创建元素的两种方法
2016/04/20 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
简单了解python变量的作用域
2019/07/30 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
逻辑链路控制协议
2016/10/01 面试题
农民工创业典型事迹
2014/01/25 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
Python if else条件语句形式详解
2022/03/24 Python
关于的python五子棋的算法
2022/05/02 Python