轮播图组件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 相关文章推荐
js字符编码函数区别分析
Dec 28 Javascript
基于js disabled=&quot;false&quot;不起作用的解决办法
Jun 26 Javascript
JavaScript中九种常用排序算法
Sep 02 Javascript
jquery结婚电子请柬特效源码分享
Aug 21 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
May 18 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
Jun 13 Javascript
解决select2在bootstrap modal中不能正常使用的问题
Aug 09 Javascript
Vue.directive使用注意(小结)
Aug 31 Javascript
详解webpack4.x之搭建前端开发环境
Mar 28 Javascript
React+TypeScript+webpack4多入口配置详解
Aug 08 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 jQuery
js正则表达式简单校验方法
Jan 03 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下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
解析php时间戳与日期的转换
2013/06/06 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
html数组字符串拼接的最快方法
2009/09/16 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
JS 获取HTML标签内的子节点的方法
2016/09/21 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
python实现通过shelve修改对象实例
2014/09/26 Python
在Python下尝试多线程编程
2015/04/28 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
巡警年度自我鉴定
2014/02/21 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
初二学生评语大全
2014/12/26 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python
python析构函数用法及注意事项
2021/06/22 Python