//该组件目前仅适用于一次移动一张图片的情况
(function ($) {
$.fn.extend({
"scroll": function (options) {
options = $.extend({
prevId: 'prevBtn', //左按钮的Id
nextId: 'nextBtn', //右按钮的Id
moveImgCount: '1', //click一次滚动的图片个数
perImgCount: '1', //每个版面显示的图片个数
speed: '800', //滚动一次的时间
prevBtnClass: '', //左按钮样式
nextBtnClass: '', //右按钮样式
highlightLClass: 'img_onbtnL', //左按钮的高亮效果类名
highlightRClass: 'img_onbtnR', //右按钮的高亮效果类名
highlightTag: 'scroll_tag span',
highlightTagClass: 'on',
isAutoPlay: false,
autoPlayTime: 1000
}, options);
var cur = 1; //版面计数
var moveImgCount = options.moveImgCount;
var imglen = parseInt($(this).css("width")) + parseInt($(this).css("margin-right")) + parseInt($(this).css("margin-left")); //一张图片的宽度
var imgWidth = moveImgCount * imglen; //一次滚动多长距离
var speed = options.speed;
var prevId = $("#" + options.prevId);
var nextId = $("#" + options.nextId);
var isAutoPlay = options.isAutoPlay;
var autoPlayTime = options.autoPlayTime;
var imgs = $(this); //取得图片集合
var direction = 1; //1为右,0为左
var scrollPrevId = -1;
var scrollNextId = -1;
if (imgs.length <= options.perImgCount) {
return;
}
//var totalCur = Math.ceil(imgs.length / moveImgCount);
var totalCur = imgs.length - options.perImgCount + 1;
if (isAutoPlay) {
imgs.touchstart(function () {
if (scrollPrevId != -1) {
clearInterval(scrollPrevId);
scrollPrevId = -1;
}
if (scrollNextId != -1) {
clearInterval(scrollNextId);
scrollNextId = -1;
}
});
imgs.touchend(function () {
bind();
});
}
bind(); //执行函数 function scrollPrev() {
direction = 0;
if (cur == 2) { //向前滚到倒二个版面时
if (imgs.length % moveImgCount == 0) { //图片数刚好
imgs.animate({ left: "+=" + imgWidth + "px" }, speed);
} else { //图片数不够
imgs.animate({ left: "+=" + imglen * (imgs.length % moveImgCount) + "px" }, speed);
}
} else {
imgs.animate({ left: "+=" + imgWidth + "px" }, speed); //图片向前滚动
}
cur--; //版面递减
bind();
}
function scrollNext() {
direction = 1;
if (cur == totalCur - 1) { //向后滚到倒二个版面时
if (imgs.length % moveImgCount == 0) { //图片数刚好
imgs.animate({ left: "-=" + imgWidth + "px" }, speed);
} else { //图片数不够
imgs.animate({ left: "-=" + imglen * (imgs.length % moveImgCount) + "px" }, speed);
}
} else {
imgs.animate({ left: "-=" + imgWidth + "px" }, speed); //图片向后滚动
}
cur++; //版面递增
bind();
}
function highlightL() { //左按钮高亮效果
prevId.removeClass(options.prevBtnClass).addClass(options.highlightLClass);
}
function noHighlightL() { //移除左按钮高亮效果
prevId.removeClass(options.highlightLClass).addClass(options.prevBtnClass);
}
function highlightR() { //右按钮高亮效果
nextId.removeClass(options.nextBtnClass).addClass(options.highlightRClass);
}
function noHighlightR() { //移除右按钮高亮效果
nextId.removeClass(options.highlightRClass).addClass(options.nextBtnClass);
}
function bind() {
prevId.unbind("click", scrollPrev); //click事件与swipe事件解绑
nextId.unbind("click", scrollNext);
imgs.unbind("swipeleft", scrollNext);
imgs.unbind("swiperight", scrollPrev);
if (isAutoPlay) {
if (scrollPrevId != -1) {
clearInterval(scrollPrevId);
scrollPrevId = -1;
}
if (scrollNextId != -1) {
clearInterval(scrollNextId);
scrollNextId = -1;
}
}
$("." + options.highlightTag + ":eq(" + (cur - 1) + ")").addClass(options.highlightTagClass).siblings().removeClass(options.highlightTagClass);
if (cur == 1) { //判断是否在第一个版面
nextId.bind("click", scrollNext); //给右按钮绑定click事件
imgs.bind("swipeleft", scrollNext); //触摸屏手指向左移图片向右滚
if (isAutoPlay) {
if (scrollNextId == -1) {
scrollNextId = setInterval(scrollNext, autoPlayTime);
}
}
highlightR(); //右按钮高亮
noHighlightL(); //左按钮移除高亮
} else if (cur == totalCur) { //判断是否在最后一个版面
if (isAutoPlay) {
if (scrollPrevId == -1) {
scrollPrevId = setInterval(scrollPrev, autoPlayTime);
}
}
prevId.bind("click", scrollPrev); //给左按钮绑定click事件
imgs.bind("swiperight", scrollPrev); //触摸屏手指向右移图片向左滚
highlightL(); //左按钮高亮
noHighlightR(); //右按钮移除高亮
} else {
nextId.bind("click", scrollNext); //绑定click事件与swipe事件
prevId.bind("click", scrollPrev);
imgs.bind("swipeleft", scrollNext);
imgs.bind("swiperight", scrollPrev);
if (isAutoPlay) {
if (direction == 0) {
if (scrollPrevId == -1) {
scrollPrevId = setInterval(scrollPrev, autoPlayTime);
}
} else {
if (scrollNextId == -1) {
scrollNextId = setInterval(scrollNext, autoPlayTime);
}
}
}
highlightR(); //右按钮高亮
highlightL(); //左按钮高亮
}
}
}
});
})(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. nginx配置返回文本或json

    有些时候请求某些接口的时候需要返回指定的文本字符串或者json字符串,如果逻辑非常简单或者干脆是固定的字符串,那么可以使用nginx快速实现,这样就不用编写程序响应请求了,可以减少服务器资源占用并且响 ...

  2. js_面向对象

    面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装.继承.多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义J ...

  3. ABAP 将单元格设置编辑状态 FORM

    FORM set_style  USING   fieldname                         style TYPE string                 CHANGING ...

  4. PE读写

    // 仿PE文件.cpp : Defines the entry point for the console application.// #include "stdafx.h"# ...

  5. ProtocolBuffers-3 For Objective C (2)-进阶

    先介绍几个常用关键字: equired前缀表示该字段为必要字段,既在序列化和反序列化之前该字段必须已经被赋值.与此同时,在Protocol Buffer中还存在另外两个类似的关键字,optional和 ...

  6. iOS推送小结(证书的生成、客户端的开发、服务端的开发)

    1.推送过程简介 1.1.App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请 ...

  7. css实现容器垂直水平居中的七中方法

    方法一:position加margin 方法二: diaplay:table-cell 方法三:position加 transform 方法四:flex;align-items: center;jus ...

  8. 模拟提交API数据Pyqt版

    其实这个模拟提交数据之前已经写过篇: Python requests模拟登录 因为现在在做的项目中需要一个debug请求调试API,用PHP的CURL写了一个,又因Pyqt更能直观灵活的显示请求的参数 ...

  9. Power服务器中KVM克隆新虚拟机

    查看当前所有虚拟机:virsh list --all 克隆新虚拟机:virt-clone  -o guest01 -n guest02 -f /var/lib/libvirt/images/guest ...

  10. AOJ 0033 Ball【DFS】

    有一个筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B管或C管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B管和C管中的球从下往上标号递增. 输入: 第一行输 ...