js实现移动端导航点击自动滑动效果


Posted in Javascript onJuly 18, 2017

本文实例为大家分享了js实现移动端导航点击滑动效果的具体代码,供大家参考,具体内容如下

移动端模拟导航可点击自动滑动 0.1.4。

导航可左右滑动,可点击边缘的一个,自动滚动下一个到可视范围【依赖于iscroll.js】。

废话不多说直接上代码:

/* 
 * 移动端模拟导航可点击自动滑动 0.1.4 
 * Date: 2017-01-11 
 * by: xiewei 
 * 导航可左右滑动,可点击边缘的一个,自动滚动下一个到可视范围【依赖于iscroll.js】 
 */ 
(function ($) { 
 $.fn.navbarscroll = function (options) { 
 //各种属性、参数 
 var _defaults = { 
 className:'cur', //当前选中点击元素的class类名 
 clickScrollTime:300, //点击后滑动时间 
 duibiScreenWidth:0.4, //单位以rem为准,默认为0.4rem 
 scrollerWidth:3, //单位以px为准,默认为3,[仅用于特殊情况:外层宽度因为小数点造成的不精准情况] 
 defaultSelect:0, //初始选中第n个,默认第0个 
 fingerClick:0, //目标第0或1个选项触发,必须每一项长度一致,方可用此项 
 endClickScroll:function(thisObj){}//回调函数 
 } 
 var _opt = $.extend(_defaults, options); 
 this.each(function () { 
 //插件实现代码 
 var _wrapper = $(this); 
 var _win = $(window); 
 var _win_width = _win.width(),_wrapper_width = _wrapper.width(),_wrapper_off_left = _wrapper.offset().left; 
 var _wrapper_off_right=_win_width-_wrapper_off_left-_wrapper_width; 
 var _obj_scroller = _wrapper.children('.scroller'); 
 var _obj_ul = _obj_scroller.children('ul'); 
 var _obj_li = _obj_ul.children('li'); 
 var _scroller_w = 0; 
 _obj_li.css({"margin-left":"0","margin-right":"0"}); 
 for (var i = 0; i < _obj_li.length; i++) { 
 _scroller_w += _obj_li[i].offsetWidth; 
 } 
 _obj_scroller.width(_scroller_w+_opt.scrollerWidth); 
 var myScroll = new IScroll('#'+_wrapper.attr('id'), { 
 eventPassthrough: true, 
 scrollX: true, 
 scrollY: false, 
 preventDefault: false 
 }); 
 _init(_obj_li.eq(_opt.defaultSelect)); 
 _obj_li.click(function(){ 
 _init($(this)); 
 }); 
 //解决PC端谷歌浏览器模拟的手机屏幕出现莫名的卡顿现象,滑动时禁止默认事件(2017-01-11) 
 _wrapper[0].addEventListener('touchmove',function (e){e.preventDefault();},false); 
 function _init(thiObj){ 
 var $this_obj=thiObj; 
 var duibi=_opt.duibiScreenWidth*_win_width/10,this_index=$this_obj.index(),this_off_left=$this_obj.offset().left,this_pos_left=$this_obj.position().left,this_width=$this_obj.width(),this_prev_width=$this_obj.prev('li').width(),this_next_width=$this_obj.next('li').width(); 
 var this_off_right=_win_width-this_off_left-this_width; 
 if(_scroller_w+2>_wrapper_width){ 
  if(_opt.fingerClick==1){ 
  if(this_index==1){ 
  myScroll.scrollTo(-this_pos_left+this_prev_width,0, _opt.clickScrollTime); 
  }else if(this_index==0){ 
  myScroll.scrollTo(-this_pos_left,0, _opt.clickScrollTime); 
  }else if(this_index==_obj_li.length-2){ 
  myScroll.scrollBy(this_off_right-_wrapper_off_right-this_width,0, _opt.clickScrollTime); 
  }else if(this_index==_obj_li.length-1){ 
  myScroll.scrollBy(this_off_right-_wrapper_off_right,0, _opt.clickScrollTime); 
  }else{ 
  if(this_off_left-_wrapper_off_left-(this_width*_opt.fingerClick)<duibi){ 
  myScroll.scrollTo(-this_pos_left+this_prev_width+(this_width*_opt.fingerClick),0, _opt.clickScrollTime); 
  }else if(this_off_right-_wrapper_off_right-(this_width*_opt.fingerClick)<duibi){ 
  myScroll.scrollBy(this_off_right-this_next_width-_wrapper_off_right-(this_width*_opt.fingerClick),0, _opt.clickScrollTime); 
  } 
  } 
  }else{ 
  if(this_index==1){ 
  myScroll.scrollTo(-this_pos_left+this_prev_width,0, _opt.clickScrollTime); 
  }else if(this_index==_obj_li.length-1){ 
  if(this_off_right-_wrapper_off_right>1||this_off_right-_wrapper_off_right<-1){ 
  myScroll.scrollBy(this_off_right-_wrapper_off_right,0, _opt.clickScrollTime); 
  } 
  }else{ 
  if(this_off_left-_wrapper_off_left<duibi){ 
  myScroll.scrollTo(-this_pos_left+this_prev_width,0, _opt.clickScrollTime); 
  }else if(this_off_right-_wrapper_off_right<duibi){ 
  myScroll.scrollBy(this_off_right-this_next_width-_wrapper_off_right,0, _opt.clickScrollTime); 
  } 
  } 
  } 
 } 
 $this_obj.addClass(_opt.className).siblings('li').removeClass(_opt.className); 
 _opt.endClickScroll.call(this,$this_obj); 
 } 
 }); 
 }; 
})(jQuery);

截图:

js实现移动端导航点击自动滑动效果

提供demo地址:

更多关于滑动效果的专题,请点击下方链接查看:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
网页常用特效代码整理
Jun 23 Javascript
JavaScript 数组运用实现代码
Apr 13 Javascript
javascript forEach通用循环遍历方法
Oct 11 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
Feb 04 Javascript
JS的Document属性和方法小结
Sep 17 Javascript
修改或扩展jQuery原生方法的代码实例
Jan 13 Javascript
javascript中sort()的用法实例分析
Jan 30 Javascript
Bootstrap每天必学之轮播(Carousel)插件
Apr 25 Javascript
微信小程序获取用户openId的实现方法
May 23 Javascript
Angular数据绑定机制原理
Apr 17 Javascript
微信小程序实现列表的横向滑动方式
Jul 15 Javascript
Vue实现省市区三级联动
Dec 27 Vue.js
JS实现点击Radio动态更新table数据
Jul 18 #Javascript
Angularjs的启动过程分析
Jul 18 #Javascript
关于javascript sort()排序你可能忽略的一点理解
Jul 18 #Javascript
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 #jQuery
ES6中的rest参数与扩展运算符详解
Jul 18 #Javascript
ES6学习之变量的两种命名方法示例
Jul 18 #Javascript
vue实现表格增删改查效果的实例代码
Jul 18 #Javascript
You might like
编写PHP的安全策略
2006/10/09 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
[00:35]DOTA2上海特级锦标赛 MVP.Phx战队宣传片
2016/03/04 DOTA
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
Python 中的with关键字使用详解
2016/09/11 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
python利用拉链法实现字典方法示例
2017/03/25 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
编辑个人求职信范文
2013/09/21 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
低碳环保标语
2014/06/12 职场文书
办理收楼委托书范本
2014/10/09 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
python实现简单反弹球游戏
2021/04/12 Python
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
Python集合set()使用的方法详解
2022/03/18 Python
APP界面设计技巧和注意事项
2022/04/29 杂记