自已动手写的轮播图插件,功能不断增加中,可以下载

前,平时总是使用别人的轮播图插件,这次决定自已写一个,功能越多越好。实际现起来,发现并不容易。先实现基本的功能,下两周要丰富起来。

图是别人的图,心是自已的心。直接上代码:

一:结构

<!-- carousel begin -->
<div class="carousel-wrap">
    <div class="carousel-main-wrap">
        <ul class="carousel-scroll-wrap">
            <li><img src="images/1.jpg" ></li>
            <li><img src="images/2.jpg" ></li>
            <li><img src="images/3.jpg" ></li>
            <li><img src="images/4.jpg" ></li>
            <li><img src="images/5.jpg" ></li>
            <li><img src="images/6.jpg" ></li>
            <li><img src="images/7.jpg" ></li>
            <li><img src="images/8.jpg" ></li>
        </ul>
        <span class="carousel-left">向左</span>
        <span class="carousel-right">向右</span>
    </div>
</div>
<!-- carousel end -->

注意,1 必须是三张以上图片,2 最外层carousel-wrap必须要有一个宽高

二:CSS

/* css reset start*/

@charset "UTF-8";
*{
    padding:0;
    margin:0;
    list-style:none;
    border:0;
}
body{
    width: 100%;
    font-family: ‘SimSun‘, ‘Microsoft YaHei‘, Arial;
    font-size: 14px;
    color: #fff;
}
a,a:visited{
    color: #fff;
    text-decoration: none;
}
a:hover{
   text-decoration: none;
}
img{
    display: block;
}
/* css reset end */

/* carousel start */
.carousel-wrap{
    width: 800px;
    height: 504px;
    margin: 0 auto;
    background-color: gray;
}
.carousel-main-wrap{
    overflow: hidden;
    position: relative;
}
.carousel-scroll-wrap{
    position: relative;
}
.carousel-scroll-wrap li{
    overflow: hidden;
    position: absolute;
    top: 0;
    left: 10000px;
}
.carousel-scroll-wrap li img{
    width: 800px;
    height: 504px;
    display: block;
}
.carousel-left{
    width: 50px;
    height: 100px;
    margin-top: -50px;
    line-height: 100px;
    text-align: center;
    color: #fff;
    background-color: teal;
    display: block;
    position: absolute;
    left: 0;
    top: 50%;
    cursor: pointer;
}
.carousel-right{
    width: 50px;
    height: 100px;
    margin-top: -50px;
    line-height: 100px;
    text-align: center;
    color: #fff;
    background-color: teal;
    display: block;
    position: absolute;
    right: 0;
    top: 50%;
    cursor: pointer;
}
.carousel-control{
    height: 10px;
    overflow: hidden;
}
.carousel-control span{
    width: 20%;
    height: 10px;
    display: inline-block;
    background-color: orange;
    cursor: pointer;
}
.carousel-control span.cur{
    background-color: #f60;
}
/* carousel end */

三:JS

基于JQ,

<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>

<script type="text/javascript" src="js/carousel.js"></script>

carousel.js代码如下:

function carouselPlay(config){

//设置变量默认数据
    var carouselSpeed = config.carouselSpeed || 800;
    var carouselFuncton = config.carouselFuncton || ‘swing‘;
    var imgWidth = config.imgWidth || 400;
    var imgHeight = config.imgHeight || 304;
//以下为常量,一般不必改动
    var carouselLi = $(‘.carousel-scroll-wrap li‘);
    var controlSpan = $(‘.carousel-control span‘);
    var carouselCount = carouselLi.index()+1;
    var curLeft = imgWidth;
    var nextLeft = imgWidth*2;
    var prevLeft = 0;
    var outLeft = 10000;
    var curIndex = 0;
    var nextIndex = 1;
    var prevIndex = carouselCount-1;
//初始化
    var jobInite = function(){
        $(‘.carousel-main-wrap‘).css({
            width: imgWidth,
            height: imgHeight
        });
        $(‘.carousel-scroll-wrap‘).css({
            width: imgWidth*3,
            height: imgHeight,
            left: -imgWidth,
            top: 0
        });        
        carouselLi.eq(curIndex).css(‘left‘, curLeft);
        carouselLi.eq(nextIndex).css(‘left‘, nextLeft);
        carouselLi.eq(prevIndex).css(‘left‘, prevLeft);
    }
    jobInite();
//向右滚动一张的逻辑
    function rightZero(a){
        a++;
        if(a == carouselCount){
            a = 0;
        }
        return a
    }
//向左滚动一张的逻辑
    function leftZero(a){
        a--;
        if(a == -1){
            a = carouselCount-1;
        }
        return a
    }
// 小圆点控制图片切换的逻辑,小点控制功能还未写完,但不影响其它功能!
    function controlZero(a){
        curIndex = a;
        if(a === (carouselCount-1)){
            nextIndex = 0;
        }
        else{
            nextIndex = a+1;
        }
        if(a === 0){
            prevIndex = carouselCount;
        }
        else{
            prevIndex = a-1;
        }        
    }
//滚动函数
    function focusAnimate(carouselLi,index,left){
        carouselLi.eq(index).stop(true,true).animate({‘left‘: left}, carouselSpeed, carouselFuncton);
    }
//处置窗口以外的图片
    function imgOut(carouselLi, index){
        carouselLi.eq(index).css(‘left‘, outLeft);
    }
// 控制按钮函数,功能还未写完,但不影响其它功能!
    function controlPlay(curIndex){
        controlSpan.eq(curIndex).addClass(‘cur‘).siblings().removeClass(‘cur‘);
    }
//向右切换运动
    function rightPlay(){
        //滚动前初始化图片索引
        jobInite();
        //向右切换
        focusAnimate(carouselLi, curIndex, prevLeft);
        focusAnimate(carouselLi, nextIndex, curLeft);
        imgOut(carouselLi, prevIndex);
        //重置索引
        curIndex         = rightZero(curIndex);
        nextIndex         = rightZero(nextIndex);
        prevIndex         = rightZero(prevIndex);
        // 控制小圆点跟随,功能还未写完,但不影响其它功能!
        controlPlay(curIndex);
    }

//向左切换运动
    function leftPlay(){
        //滚动前初始化图片索引
        jobInite();
        //向左
        focusAnimate(carouselLi, curIndex, nextLeft);
        focusAnimate(carouselLi, prevIndex, curLeft);
        imgOut(carouselLi, nextIndex);
        //重置索引
        curIndex         = leftZero(curIndex);
        nextIndex         = leftZero(nextIndex);
        prevIndex         = leftZero(prevIndex);
        // 控制小圆点跟随,功能还未写完,但不影响其它功能!
        controlPlay(curIndex);
    }

// 限制用户频繁点击
    var datePrev = 0;
    var clickFlag = true;
    function clickCheck(minSecond){
        var nowDate = new Date();
        var dateCur = nowDate.getTime();
        var dateInterval = dateCur - datePrev;
        datePrev = dateCur;
        if(dateInterval<minSecond){
            clickFlag = false;
        }
        else{
            clickFlag = true;
        }
        return clickFlag;
    }
// 左右控制切换
    $(‘.carousel-right‘).click(function(event) {
        if(clickCheck(500)){
            rightPlay();
        }        
    });
    $(‘.carousel-left‘).click(function(event) {
        if(clickCheck(500)){
            leftPlay();
        }
    });
// 小圆点控制切换,功能还未写完,但不影响其它功能!
    controlSpan.mouseover(function(event) {
        // 计算新的当前位置索引
        curIndex = $(this).index();
        //重置索引
        controlZero(curIndex);
        // 初始化图片位置
        jobInite();
        // 小圆点位置跟随
        controlPlay(curIndex);
    });
}

四:在页面中调用

<script type="text/javascript">
$(function(){
//配制变量
var config = {
    ‘carouselSpeed‘: 800,
    ‘carouselFuncton‘: ‘swing‘,
    ‘imgWidth‘: 800,
    ‘imgHeight‘: 504
}
//轮播图的执行
var main = carouselPlay;
main(config);
})

//更多调用可参考demo
</script>

四:测试地址

http://game.feiliu.com/zk/new/plugin/default.html

五:demo源码下载

http://files.cnblogs.com/files/zk995/demo.rar

六:后续慢慢再增加完成各种功能,还要更新完整

这周,over...

时间: 2024-08-07 08:15:49

自已动手写的轮播图插件,功能不断增加中,可以下载的相关文章

Javascript知识汇总------手写jq轮播图插件(2018-04-23 17:16)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

自己动手丰衣足食之轮播图一动态修改marginTop属性实现轮播图

引言 学习jQuery有年头了,刚开始学习时自己动手写过轮播图,放的久了以至于忘了大致思路了.现在转而做前端,抽空把jquery轮播图拿出来写一写,把各种思路都自己练习练习,这里主要使用动态修改marginTop来实现. 实现原理 1.除第一张图片外,其余图片全部隐藏,4张图片重叠起来. 2.导航按钮添加mouseover和mouseleave事件. 3.设置interval函数,启动定时器调用ShowImg函数. 4.动态修改marginTop属性达到上下轮播的效果,说道动态修改margin属

封装一个简单的原生js焦点轮播图插件

轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放.本篇文章的主要目的是分享封装插件的思路. 轮播图的我一开始是写成非插件形式实现的效果,后来才改成了封装成插件的形式. 首先要明白轮播图的实现原理和基本布局,大概就是外面有一个容器包裹着(通常是div),容器设置宽高,以及overflow为hidden,超出宽高部分隐藏, 容器里面又包含着另一个容器,包裹着所有的图片,宽为所有图片的总宽度,ul的position为absolute,通过改变ul的left

10个免费的响应式jQuery Carousel 轮播图插件

jQuery Carousel 轮播图插件可以给网站创建华丽的动画效果,这里列出的10个jQuery Carousel 轮播图插件都是响应式的,并且可以免费使用. 1. ItemSlide.js 简单的触摸式Carousel 轮播图插件,提供多种样式的旋转动画,如向上滑动,基于全屏的触摸滑动,左右滑动等. 2. Liquid 每当Liquid 容器的大小改变时,都会重新调整列表中的项目数,以适应新的宽度. 3. jCarousel jCarousel 是一个用来控制水平或垂直方向上列表项的jQu

学习笔记: js插件 —— SuperSlide 2 (轮播图插件,PC用)

SuperSlide 2  轮播图插件,较老.但还好用. 适用于PC,是绑定到jquery上的方法: $.slide(); 如果在实际中找不到.slide方法,请检查jquery等.js文件的引入次序.(另外切忌不要引入两次jquery.js,会把$的方法洗掉而导致失效的) http://www.superslide2.com/ 官网 http://www.superslide2.com/SuperSlide.2.1.2/jquery.SuperSlide.2.1.2.js jquery.Sup

图片轮播图插件的使用 unslider!!!

1.百度图片轮播图unslider,第一个就会出现jquery unslider轮播图,点击进去,下载网站提供的文件,解压,内部有我们需要使用的各种js,图片等. 2.在自己的eclipse或者intellij idea中搭建一个可以正常运行的web工程 3.在WEB-INF下创建一个jsp文件夹,jsp文件夹下创建一个lunbo.jsp,颜色标记的代码是需要注意的!在WebRoot下创建js和img文件夹,存放js和所需要的图片. 页面的代码: <%@ page language="ja

第124天:移动web端-Bootstrap轮播图插件使用

Bootstrap JS插件使用 > 对于Bootstrap的JS插件,我们只需要将文档实例中的代码粘到我们自己的代码中> 然后作出相应的样式调整 Bootstrap中轮播图插件叫作Carousel 一.基本的轮播图实现 HTML代码 1 <!-- 2 以下容器就是整个轮播图组件的整体, 3 注意该盒子必须加上 class="carousel slide" data-ride="carousel" 表示当前是一个轮播图 4 bootstrap.js

如何用面向对象的思维去封装一个小型轮播图插件

1.面向对象与面向过程 既然说到面向对象的思维,那就免不了要对面向过程的编程思维与面向对象的思维做一番比较. 笔者有 一段时间天真的认为有一个类,然后new一个对象就是面向对象编程了,现在想想还是太naive了呀. 其实面向对象的编程思维和面向过程的编程思维重要的不是对象和过程,而是思维. 比如说在生活中我们要做一道西红柿炒鸡蛋,很多人的第一反应就是西红柿炒鸡蛋第一步.第二步.第三步应该怎么做,每一步放什么调料.然后在做的过程中找每一步需要的调料.这就是很典型的面向过程的思维方式:怎么做,需要什

用jQuery写的轮播图

效果图: 与前一篇写的轮播图实现的效果一致,这个是用jQuery写的,相对简单一点的吧. 这个是js代码,我先粘上去. <script src="../jquery-3.3.1.min.js"></script> <script> var index = 1; var newLeft = 0; var interval; var buttSpan = $(".butt").children(); function nextPage