轮播图组件js代码


Posted in Javascript onAugust 08, 2016

本文实例为大家分享了JavaScript轮播图组件代码,供大家参考,具体内容如下

//轮播图组件
function Rolling(o) {
 this.index = ++o.index || 1; //当前滚动的位置,当index大于可轮播的次数listLength或者等于0,为不可滚动状态
 this.num = o.num || 1; //默认滚动一个列表
 this.obj = o.obj || null; //要轮播的对象ul
 this.perObj = o.perObj || null; //向上翻页的按钮对象
 this.nextObj = o.nextObj || null; //向下翻页的按钮对象
 this.focusPoint = o.focusPoint || null; //焦点对象,默认为null。意思不开启焦点对象,如要开启可传入焦点对象可自动开启
 this.focusClass = o.focusClass || 'mien-active'; //当前焦点位置类名
 this.replaceBtn = o.replaceBtn || false;//是否在轮播到第一页或最后一页时替换翻页按钮图片。默认值为true,并替换按钮图片为re+图片名。如:per.png替换成re-per.ping
 console.log(o.replaceBtn)
 this.listLength = Math.ceil(o.obj.find('li').length / this.num); //可轮播的次数
 this.listObj = o.obj.children('li');
 this.listWidth =this.listObj.width() + parseInt(this.listObj.css('margin-left')) + parseInt(this.listObj.css('margin-right')); //列表宽度
 this.init(); //初始化
};
Rolling.prototype.init = function() {
   
  var thisObj = this;
  this.initLeft();
  this.replaceFun();
  if(this.focusPoint !== null) {
   this.createFocusPoint();
  }
  this.perObj.unbind('click').on('click', function() {
   thisObj.rollPrev();
  });
  this.nextObj.unbind('click').on('click', function() {
   thisObj.rollNext();
  });
 }
 //创建焦点,并给当前位置的焦点添加类mien-active
Rolling.prototype.createFocusPoint = function() {
 var str = '',
  thisObj = this;
 for(var i = 0; i < this.listLength; i++) {
  if(i == this.index - 1) {
   str += '<li class="' + this.focusClass + '"></li>';
  } else {
   str += '<li></li>';
  }
 }
 this.focusPoint.append(str);
 this.focusPoint.children().click(function() {
  var oldIndex = $('.' + thisObj.focusClass).index() + 1; //之前的焦点位置
  var index = $(this).index() + 1; //当前点击的焦点
  var sum = index - oldIndex;
  var perObject = thisObj.perObj.find('img');
  var nextObject = thisObj.nextObj.find('img');
  if (index == 1 && !thisObj.replaceBtn){
   perObject.attr('src',perObject.attr('data-src'));
   nextObject.attr('src',nextObject.attr('data-src'));
  }else if (index == thisObj.listLength && !thisObj.replaceBtn){
   perObject.attr('src',perObject.attr('re-src'));
   nextObject.attr('src',nextObject.attr('re-src'));
  }else if (!thisObj.replaceBtn){
   perObject.attr('src',perObject.attr('re-src'));
   nextObject.attr('src',nextObject.attr('data-src'));
  }
  thisObj.index += sum;
  if(sum > 0) {
   thisObj.obj.animate({
    marginLeft: '-=' + Math.abs(sum) * thisObj.num * thisObj.listWidth + 'px'
   });
  }
  if(sum < 0) {
   thisObj.obj.animate({
    marginLeft: '+=' + Math.abs(sum) * thisObj.num * thisObj.listWidth + 'px'
   });
  }
  $(this).addClass(thisObj.focusClass).siblings().removeClass(thisObj.focusClass);
 });
}
Rolling.prototype.initLeft = function() {
 if(this.index == 1) {
  return;
 }
 this.obj.css('margin-left', -(this.index - 1) * this.listWidth); //初始化全屏图片显示的位置
}
Rolling.prototype.rollPrev = function() {
 --this.index;
 //当点击到第一页就return
 if (this.index <= 1 && !this.replaceBtn){
  this.perObj.find('img').attr('src',this.perObj.find('img').attr('data-src'));
 }
 if(!this.thisIndex()) {
  ++this.index;
  return;
 }
 if (!this.replaceBtn){
  this.nextObj.find('img').attr('src',this.nextObj.find('img').attr('data-src'));
 }
 this.obj.animate({
  marginLeft: '+=' + this.num * this.listWidth + 'px'
 });
 if(this.focusPoint !== null) {
  $('.' + this.focusClass).removeClass(this.focusClass).prev().addClass(this.focusClass);
 }
}
Rolling.prototype.rollNext = function() {
 ++this.index;
 if (this.index == this.listLength && !this.replaceBtn){
  this.nextObj.find('img').attr('src',this.nextObj.find('img').attr('re-src'));
 }
 //当点击到最后一页就return
 if(!this.thisIndex()) {
  --this.index;
  return;
 }
 if (!this.replaceBtn){
  this.perObj.find('img').attr('src',this.perObj.find('img').attr('re-src'));
 }
 this.obj.animate({
  marginLeft: '-=' + this.num * this.listWidth + 'px'
 });
  
 if(this.focusPoint !== null) {
  $('.' + this.focusClass).removeClass(this.focusClass).next().addClass(this.focusClass);
 }
}
Rolling.prototype.replaceFun = function(){
 var perObject = this.perObj.find('img'),
  nextObject = this.nextObj.find('img');
 var perSrc = perObject.attr('src'),
  nextSrc = nextObject.attr('src');
 perObject.attr({'data-src':perSrc,'re-src':this.splitSrc(perSrc)});
 nextObject.attr({'data-src':nextSrc,'re-src':this.splitSrc(nextSrc)});
}
 
Rolling.prototype.splitSrc = function(str){
 var list = str.split('/');
 var data = list[list.length-1];
 var sub = data.substr(0,data.indexOf('.'));
 return str.replace(sub,'re-' + sub);
}
 
Rolling.prototype.thisIndex = function() {
 if(this.index > this.listLength | this.index <= 0) {
  return false;
 }
 return true;
}
 
function createRolling(o) {
 return new Rolling(o);
}

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

Javascript 相关文章推荐
纯CSS打造的导航菜单(附jquery版)
Aug 07 Javascript
js 代码优化点滴记录
Feb 19 Javascript
javascript学习(二)javascript常见问题总结
Jan 02 Javascript
JavaScript加强之自定义callback示例
Sep 21 Javascript
Node.js和PHP根据ip获取地理位置的方法
Mar 14 Javascript
JQuery实现展开关闭层的方法
Feb 17 Javascript
js实现简单的验证码
Dec 25 Javascript
jQuery常用知识点总结以及平时封装常用函数
Feb 23 Javascript
bootstrap3 兼容IE8浏览器!
May 02 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
May 23 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
Aug 01 Javascript
vue的滚动条插件实现代码
Sep 07 Javascript
JavaScript面试开发常用的知识点总结
Aug 08 #Javascript
Js 获取、判断浏览器版本信息的简单方法
Aug 08 #Javascript
基于BootStrap实现局部刷新分页实例代码
Aug 08 #Javascript
js智能获取浏览器版本UA信息的方法
Aug 08 #Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
Aug 08 #Javascript
一个超简单的jQuery回调函数例子(分享)
Aug 08 #Javascript
Bootstrap Table服务器分页与在线编辑应用总结
Aug 08 #Javascript
You might like
PHP+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
php使用反射插入对象示例分享
2014/03/11 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
jquery 查找新建元素代码
2010/07/06 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
python根据unicode判断语言类型实例代码
2018/01/17 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
python初步实现word2vec操作
2020/06/09 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
党校自我鉴定范文
2013/10/02 职场文书
金融专业个人的自我评价
2013/10/18 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
合作协议书范文
2014/08/20 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
会计求职简历自我评价
2015/03/10 职场文书
大学生求职信怎么写
2015/03/19 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书