1. //该组件目前仅适用于一次移动一张图片的情况
  2. (function ($) {
  3. $.fn.extend({
  4. "scroll": function (options) {
  5. options = $.extend({
  6. prevId: 'prevBtn', //左按钮的Id
  7. nextId: 'nextBtn', //右按钮的Id
  8. moveImgCount: '1', //click一次滚动的图片个数
  9. perImgCount: '1', //每个版面显示的图片个数
  10. speed: '800', //滚动一次的时间
  11. prevBtnClass: '', //左按钮样式
  12. nextBtnClass: '', //右按钮样式
  13. highlightLClass: 'img_onbtnL', //左按钮的高亮效果类名
  14. highlightRClass: 'img_onbtnR', //右按钮的高亮效果类名
  15. highlightTag: 'scroll_tag span',
  16. highlightTagClass: 'on',
  17. isAutoPlay: false,
  18. autoPlayTime: 1000
  19. }, options);
  20. var cur = 1; //版面计数
  21. var moveImgCount = options.moveImgCount;
  22. var imglen = parseInt($(this).css("width")) + parseInt($(this).css("margin-right")) + parseInt($(this).css("margin-left")); //一张图片的宽度
  23. var imgWidth = moveImgCount * imglen; //一次滚动多长距离
  24. var speed = options.speed;
  25. var prevId = $("#" + options.prevId);
  26. var nextId = $("#" + options.nextId);
  27. var isAutoPlay = options.isAutoPlay;
  28. var autoPlayTime = options.autoPlayTime;
  29. var imgs = $(this); //取得图片集合
  30. var direction = 1; //1为右,0为左
  31. var scrollPrevId = -1;
  32. var scrollNextId = -1;
  33. if (imgs.length <= options.perImgCount) {
  34. return;
  35. }
  36. //var totalCur = Math.ceil(imgs.length / moveImgCount);
  37. var totalCur = imgs.length - options.perImgCount + 1;
  38. if (isAutoPlay) {
  39. imgs.touchstart(function () {
  40. if (scrollPrevId != -1) {
  41. clearInterval(scrollPrevId);
  42. scrollPrevId = -1;
  43. }
  44. if (scrollNextId != -1) {
  45. clearInterval(scrollNextId);
  46. scrollNextId = -1;
  47. }
  48. });
  49. imgs.touchend(function () {
  50. bind();
  51. });
  52. }
  53. bind(); //执行函数
  54.  
  55. function scrollPrev() {
  56. direction = 0;
  57. if (cur == 2) { //向前滚到倒二个版面时
  58. if (imgs.length % moveImgCount == 0) { //图片数刚好
  59. imgs.animate({ left: "+=" + imgWidth + "px" }, speed);
  60. } else { //图片数不够
  61. imgs.animate({ left: "+=" + imglen * (imgs.length % moveImgCount) + "px" }, speed);
  62. }
  63. } else {
  64. imgs.animate({ left: "+=" + imgWidth + "px" }, speed); //图片向前滚动
  65. }
  66. cur--; //版面递减
  67. bind();
  68. }
  69. function scrollNext() {
  70. direction = 1;
  71. if (cur == totalCur - 1) { //向后滚到倒二个版面时
  72. if (imgs.length % moveImgCount == 0) { //图片数刚好
  73. imgs.animate({ left: "-=" + imgWidth + "px" }, speed);
  74. } else { //图片数不够
  75. imgs.animate({ left: "-=" + imglen * (imgs.length % moveImgCount) + "px" }, speed);
  76. }
  77. } else {
  78. imgs.animate({ left: "-=" + imgWidth + "px" }, speed); //图片向后滚动
  79. }
  80. cur++; //版面递增
  81. bind();
  82. }
  83. function highlightL() { //左按钮高亮效果
  84. prevId.removeClass(options.prevBtnClass).addClass(options.highlightLClass);
  85. }
  86. function noHighlightL() { //移除左按钮高亮效果
  87. prevId.removeClass(options.highlightLClass).addClass(options.prevBtnClass);
  88. }
  89. function highlightR() { //右按钮高亮效果
  90. nextId.removeClass(options.nextBtnClass).addClass(options.highlightRClass);
  91. }
  92. function noHighlightR() { //移除右按钮高亮效果
  93. nextId.removeClass(options.highlightRClass).addClass(options.nextBtnClass);
  94. }
  95. function bind() {
  96. prevId.unbind("click", scrollPrev); //click事件与swipe事件解绑
  97. nextId.unbind("click", scrollNext);
  98. imgs.unbind("swipeleft", scrollNext);
  99. imgs.unbind("swiperight", scrollPrev);
  100. if (isAutoPlay) {
  101. if (scrollPrevId != -1) {
  102. clearInterval(scrollPrevId);
  103. scrollPrevId = -1;
  104. }
  105. if (scrollNextId != -1) {
  106. clearInterval(scrollNextId);
  107. scrollNextId = -1;
  108. }
  109. }
  110. $("." + options.highlightTag + ":eq(" + (cur - 1) + ")").addClass(options.highlightTagClass).siblings().removeClass(options.highlightTagClass);
  111. if (cur == 1) { //判断是否在第一个版面
  112. nextId.bind("click", scrollNext); //给右按钮绑定click事件
  113. imgs.bind("swipeleft", scrollNext); //触摸屏手指向左移图片向右滚
  114. if (isAutoPlay) {
  115. if (scrollNextId == -1) {
  116. scrollNextId = setInterval(scrollNext, autoPlayTime);
  117. }
  118. }
  119. highlightR(); //右按钮高亮
  120. noHighlightL(); //左按钮移除高亮
  121. } else if (cur == totalCur) { //判断是否在最后一个版面
  122. if (isAutoPlay) {
  123. if (scrollPrevId == -1) {
  124. scrollPrevId = setInterval(scrollPrev, autoPlayTime);
  125. }
  126. }
  127. prevId.bind("click", scrollPrev); //给左按钮绑定click事件
  128. imgs.bind("swiperight", scrollPrev); //触摸屏手指向右移图片向左滚
  129. highlightL(); //左按钮高亮
  130. noHighlightR(); //右按钮移除高亮
  131. } else {
  132. nextId.bind("click", scrollNext); //绑定click事件与swipe事件
  133. prevId.bind("click", scrollPrev);
  134. imgs.bind("swipeleft", scrollNext);
  135. imgs.bind("swiperight", scrollPrev);
  136. if (isAutoPlay) {
  137. if (direction == 0) {
  138. if (scrollPrevId == -1) {
  139. scrollPrevId = setInterval(scrollPrev, autoPlayTime);
  140. }
  141. } else {
  142. if (scrollNextId == -1) {
  143. scrollNextId = setInterval(scrollNext, autoPlayTime);
  144. }
  145. }
  146. }
  147. highlightR(); //右按钮高亮
  148. highlightL(); //左按钮高亮
  149. }
  150. }
  151. }
  152. });
  153. })(jQuery);

jQuery图片滚动插件的更多相关文章

  1. 【精心推荐】12款很好用的 jQuery 图片滚动插件

    这里收集了12款很好用的 jQuery 图片滚动插件分享给大家.jQuery 作为最流行的 JavaScript 框架,使用简单灵活,同时还有许多优秀的插件可供使用.其中最令人印象深刻的应用之一就是各 ...

  2. 10款很好用的 jQuery 图片滚动插件

    jQuery 作为最流行的 JavaScript 框架,使用简单灵活,同时还有许多优秀的插件可供使用.其中最令人印象深刻的应用之一就是各种很酷的图片效果,它可以让的网站更具吸引力.这里收集了10款很好 ...

  3. jQuery全能图片滚动插件

    插件开发背景 随着前端开发领域越来越受到重视,前端开发也变得越来越火热.各种优秀的前端组件层出不穷.尤其是jQuery插件,很多前端组件都是基于jQuery开开发的. 图片滚动是前端开发中可以说是非常 ...

  4. 利用jQuery无缝滚动插件liMarquee实现图片(链接)和文字(链接)向右无缝滚动(兼容ie7+)

    像新闻类的版块经常要求一条条的新闻滚动出现,要实现这种效果,可以使用jQuery无缝滚动插件liMarquee. 注意: 1. 它的兼容性是IE7+,及现代浏览器. 2. 引用的jquery的版本最好 ...

  5. 分享22款响应式的 jQuery 图片滑块插件

    响应式(Responsive)设计的目标是要让产品界面能够响应用户的行为,根据不同终端设备自动调整尺寸,带给用户良好的使用体验.这篇文章收集了22款优秀的响应式 jQuery 幻灯片插件,它们能够帮助 ...

  6. 一款超炫的jquery图片播放插件[Cloud Carousel]

    今天给大家介绍一个jquery图片播放插件,也可以说是一款幻灯片放映插件,它叫Cloud Carousel,支持自动播放.图片预览.鼠标滚轮滚动,非常酷,下图是效果预览. 该jquery图片播放项目演 ...

  7. 一款手机端的jQuery图片滑块插件

    今天我们要介绍一款比较特别的jQuery图片滑块插件,它不仅在PC浏览器上可以使用,而且更适合在手机端的网页中使用.这款jQuery插件不仅可以定义图片切换的方向,而且可以即时切换图片切换的动画方式, ...

  8. 十个jQuery图片画廊插件推荐

    jQuery的画廊插件可以将分组图像和多媒体资料转成类似Flash的图像或照片.当幻灯片已经成为网站的重要组成部分,jQuery的重要性不能被忽视.下面为你介绍了10个最有美感,创新性和创造性的jQu ...

  9. jquery图片播放插件Fancybox使用详解

    今天给大家介绍的jquery图片播放插件叫Fancybox,相比LightBox来说,Fancybox相对庞大点,配置也更丰富一些,相信你会喜欢的. Fancybox的项目主页地址:http://fa ...

随机推荐

  1. iOS CocoaPods 版本安装问题

    今天安装salesforce中的pods,这是里面的podfile # Uncomment this line to define a global platform for your project ...

  2. selenium 常见面试题以及答案(Java版)

    1.怎么 判断元素是否存在? 判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException 这样就可以使用try catch,如 ...

  3. 「C++11」Lambda 表达式

    维基百科上面对于 lambda 的引入是如下描述的: 在标准 C++,特别是当使用 C++ 标准程序库算法函数诸如 sort 和 find.用户经常希望能够在算法函数调用的附近定义一个临时的述部函数( ...

  4. 基于ACE的c++线程封装

    1. 基本需求 1) 一个基类,其某个方法代表一个线程的生命运行周期.之后通过继承自这个基类来实现个性化线程类: 2) 具备类似QObject的定时器设置功能: 3) 提供在线程对象中同步和异步执行方 ...

  5. php中通过DOM操作XML

    DOM文档在js里早就接触过,知道DOM不但可以操作html文档,还可以操作XHTML,XML等文档,有着极强的通用性,下面我们通过两个小例子,看看在PHP中是如何用DOM操作XML文档的,和js中差 ...

  6. 3*n/2 - 2

    求区间范围最小值最大值 用分治法(Divide and Conquer)求n元数组最小元与最大元,当n=1时,不用比较,最大元和最小元都是这个数:当n=2时,一次比较就可以找出两个数据元素的最大元和最 ...

  7. vnc远程运行3D游戏

    使用的版本:VNC-5.2.3-Windows.exe   vnc官网 安装的过程中需要输入license key,以下给出一些enterprise license(最大权限的License): K5 ...

  8. c#3.0新特性

    1.自动属性 public int ID { get; set; } // 上面的ID属性(自动属性)等同于下面的ID属性 // private int _id; // public int ID / ...

  9. 【leetcode】Path Sum

    题目简述: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding ...

  10. Python-断言

    断言: assert这个关键字称之为断言,当这个关键字后面的条件为假的时候,程序自动崩溃并抛出AssertionError的异常 例子: >>>assert 3 < 4 Tra ...