轮播图组件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 相关文章推荐
Javascript非构造函数的继承
Apr 27 Javascript
JavaScript中join()方法的使用简介
Jun 09 Javascript
不使用script导入js文件的几种方法
Oct 27 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
Dec 12 Javascript
JS组件系列之JS组件封装过程详解
Apr 28 Javascript
微信小程序删除处理详解
Aug 16 Javascript
浅谈Vuex的状态管理(全家桶)
Nov 04 Javascript
vue 实现滚动到底部翻页效果(pc端)
Jul 31 Javascript
Vue数字输入框组件使用方法详解
Feb 10 Javascript
js 执行上下文和作用域的相关总结
Feb 08 Javascript
canvas绘制折线路径动画实现
May 12 Javascript
js实现自动锁屏功能
Jun 02 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列出mysql表所有行和列的方法
2015/03/13 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
深入探讨前端框架react
2015/12/09 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
python通用读取vcf文件的类(复制粘贴即可用)
2020/02/29 Python
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
如何获得EntityManager
2014/02/09 面试题
马丁路德金演讲稿
2014/05/19 职场文书
物理课外活动总结
2014/08/27 职场文书
六五普法心得体会2016
2016/01/21 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
Python 制作自动化翻译工具
2021/04/25 Python