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 相关文章推荐
jquery获取一组checkbox的值(实例代码)
Nov 04 Javascript
Jquery实现自定义tooltip示例代码
Feb 12 Javascript
Jquery基础之事件操作详解
Jun 14 Javascript
浅谈js常用内置方法和对象
Sep 24 Javascript
基于Vue.js实现简单搜索框
Mar 26 Javascript
jQuery简单实现MD5加密的方法
Mar 03 Javascript
AngularJS service之select下拉菜单效果
Jul 28 Javascript
Vue2仿淘宝实现省市区三级联动
Apr 15 Javascript
微信小程序中this.data与this.setData的区别详解
Sep 17 Javascript
JQuery的加载和选择器用法简单示例
May 13 jQuery
详解Vue的组件中data选项为什么必须是函数
Aug 17 Javascript
JavaScript中的Proxy对象
Nov 27 Javascript
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即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
利用javascript实现一些常用软件的下载导航
2009/08/03 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
2013/08/06 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
python3 线性回归验证方法
2019/07/09 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
怎样写好自荐信和推荐信
2013/12/26 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
趣味运动会简讯
2015/07/20 职场文书
社会实践心得体会范文
2016/01/14 职场文书
安全学习心得体会范文
2016/01/18 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python