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总体架构的理解分析
Mar 07 Javascript
js图片实时加载提供网页打开速度
Sep 11 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
Jun 08 Javascript
老生常谈javascript的类型转换
Oct 12 Javascript
ReactNative踩坑之配置调试端口的解决方法
Jul 28 Javascript
javascript input输入框模糊提示功能的实现
Sep 25 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
Nov 22 Javascript
浅谈Vue中render中的h箭头函数
Nov 07 Javascript
JS实现音乐导航特效
Jan 06 Javascript
微信小程序入门之绘制时钟
Oct 22 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
Nov 07 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
Dec 04 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获得当前的脚本网址
2007/12/10 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
JavaScript 继承的实现
2009/07/09 Javascript
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
js实现双色球效果
2020/08/02 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
Python自动发邮件脚本
2017/03/31 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
关于热爱祖国的演讲稿
2014/05/04 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
财务会计实训报告
2014/11/05 职场文书
会议开幕词
2015/01/28 职场文书
欠条格式范本
2015/07/03 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python