轮播图组件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 表单验证常见正则
Sep 28 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
Dec 10 Javascript
javascript中parentNode,childNodes,children的应用详解
Dec 17 Javascript
为jQuery添加Webkit的触摸的方法分享
Feb 02 Javascript
html5+javascript制作简易画板附图
Apr 25 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
Aug 31 Javascript
微信jssdk在iframe页面失效问题的解决措施
Mar 03 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
Feb 08 Javascript
zTree树形菜单交互选项卡效果的实现方法
Dec 25 Javascript
单线程JavaScript实现异步过程详解
May 19 Javascript
vue路由权限校验功能的实现代码
Jun 07 Javascript
Node.js中出现未捕获异常的处理方法
Jun 29 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发送邮件类代码附详细说明
2008/07/10 PHP
php处理json时中文问题的解决方法
2011/04/12 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
php关联数组快速排序的方法
2015/04/17 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
JavaScript 异步调用框架 (Part 3 - 代码实现)
2009/08/04 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
学python安装的软件总结
2019/10/12 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
爸爸的花儿落了教学反思
2014/02/20 职场文书
田径运动会开幕式及主持词
2014/03/28 职场文书
白岩松演讲
2014/05/21 职场文书
环保标语大全
2014/06/12 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
学习群众路线的心得体会
2014/11/05 职场文书
绵山导游词
2015/02/05 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js