横向滚动轮播图

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title></title>
    <link rel="stylesheet" type="text/css" href="css/reset.css" />
    <style type="text/css">
    .slider_main {
        width: 790px;
        height: 340px;
        margin: 20px auto;
        position: relative;
        overflow: hidden;
    }

    .slider_list {
        position: relative;
        left: 0px;
    }

    .item {
        float: left;
    }

    .item:first-child {
        display: block;
    }

    .item a img {
        display: block;
    }

    .circle_dot {
        position: absolute;
        left: 50%;
        bottom: 20px;
        margin: auto;
        font-size: 0;
        padding: 4px 8px;
        border-radius: 12px;
        background-color: hsla(0, 0%, 100%, .3);
        z-index: 1;
        transform: translateX(-50%);
    }

    .dot {
        display: inline-block;
        margin: 0 5px;
        width: 12px;
        height: 12px;
        border-radius: 100%;
        background-color: #fff;
        cursor: pointer;
    }

    .dot.active {
        background-color: #db192a;
    }

    .arrow {
        display: none;
        position: absolute;
        z-index: 1;
        top: 50%;
        margin-top: -30px;
        width: 30px;
        height: 60px;
        background-color: rgba(0, 0, 0, .1);
        line-height: 60px;
        text-align: center;
        color: #fff;
        font-size: 20px;
        cursor: pointer;
    }

    .arrow:hover {
        background-color: rgba(0, 0, 0, 0.5);
    }

    .prev {
        left: 0;
    }

    .next {
        right: 0;
    }
    </style>
</head>

<body>
    <div id="slider" class="slider_main">
        <ul class="slider_list clearfix">
            <li class="item">
                <a href="#">
                    <img class="item_img" src="img/1.jpg" />
                </a>
            </li>
            <li class="item">
                <a href="#">
                    <img class="item_img" src="img/2.jpg" />
                </a>
            </li>
            <li class="item">
                <a href="#">
                    <img class="item_img" src="img/3.jpg" />
                </a>
            </li>
            <li class="item">
                <a href="#">
                    <img class="item_img" src="img/4.jpg" />
                </a>
            </li>
            <li class="item">
                <a href="#">
                    <img class="item_img" src="img/5.jpg" />
                </a>
            </li>
            <li class="item">
                <a href="#">
                    <img class="item_img" src="img/6.jpg" />
                </a>
            </li>
            <li class="item">
                <a href="#">
                    <img class="item_img" src="img/7.jpg" />
                </a>
            </li>
            <li class="item">
                <a href="#">
                    <img class="item_img" src="img/8.jpg" />
                </a>
            </li>
        </ul>
        <!--指示器-->
        <div class="circle_dot">
        </div>
        <!--箭头-->
        <div class="prev arrow">&lt;</div>
        <div class="next arrow">&gt;</div>
    </div>
</body>
<script src="js/jquery-3.2.1.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
function Slider(option) {
    // 默认参数
    this.defaultOpt = {
        //容器
        wrap: ".slider_main",
        //轮播间隔
        duration: 3000,
        //切换速度
        speed: 1000
    }
    this.opt = $.extend({}, this.defaultOpt, option);

    this.wrap = $(this.opt.wrap);
    this.$list = this.wrap.find(‘.slider_list‘);
    this.prevBtn = this.wrap.find(‘.prev‘);
    this.nextBtn = this.wrap.find(‘.next‘);
    this.dotBox = this.wrap.find(‘.circle_dot‘);
    this.li = this.$list.find(‘li‘);
    //定时器obj
    this.time = null;
    //当前图片停留时的索引
    this.index = 0;
    //自动运行
    this.init();
}
Slider.prototype = {
    constructor: Slider,
    init: function() {
        var self = this;
        this.createDot();
        //取得每次移动距离
        this.step = this.wrap.width();
        //设置list的总宽度
        this.$list.width(this.step * (this.li.length + 1));
        //获取指示器li数组
        this.dot = this.dotBox.find(‘.dot‘);
        this.indicator(this.index);
        //取得第一个元素,插入到末尾
        var $copyLi = this.li.eq(0).clone(true);
        this.$list.append($copyLi);
        //绑定事件
        this.bindEvent();
        //自动轮播
        this.play();
    },
    createDot: function() {
        var self = this;
        this.li.each(function(i) {
            //生成指示器的点
            var $li = $(‘<div class="dot"></div>‘);
            self.dotBox.append($li);
        });
    },
    animate: function(step) {
        var now = this.$list.position().left;
        var hope = now + step;
        // 第一张
        if (hope > 0) {
            this.$list.stop(true, true).animate({
                left: this.step * (1 - this.li.length)
            }, this.opt.speed);
            return;
        }
        // 最后一张
        if (hope <= -this.step * this.li.length) {
            this.$list.animate({
                left: hope
            }, this.opt.speed, function() {
                $(this).css({
                    left: 0
                });
            });
            return;
        }
        this.$list.stop(true, true).animate({
            left: hope
        }, this.opt.speed);
    },
    bindEvent: function() {
        var self = this;
        //右边箭头点击
        this.nextBtn.click(function() {
            self.index++;
            if (self.index > (self.li.length - 1)) {
                self.index = 0;
            }
            self.animate(-self.step);
            self.indicator(self.index);
        });
        //左边箭头点击
        this.prevBtn.click(function() {
            self.index--;
            //判断临界值
            if (self.index < 0) {
                self.index = self.li.length - 1;
            }
            self.animate(self.step);
            self.indicator(self.index);
        });
        //轮播图hover事件
        this.wrap.hover(function() {
            self.prevBtn.stop(true, true).fadeIn();
            self.nextBtn.stop(true, true).fadeIn();
            self.stop();
        }, function() {
            self.prevBtn.stop(true, true).fadeOut();
            self.nextBtn.stop(true, true).fadeOut();
            self.play();
        });
        //指示器点击事件
        this.dotBox.on("click", ".dot", function() {
            //计算需要位移的距离,self.index当前图片索引,$(this).index()点击的指示器索引
            var index = $(this).index();
            self.indicator(index);
            var distance = self.step * (self.index - index);
            self.animate(distance);
            //存放鼠标点击后的位置,用于小圆点的正常显示
            self.index = index;
        });
    },
    stop: function() {
        clearInterval(this.time);
    },
    play: function() {
        var self = this;
        this.time = setInterval(function() {
            self.nextBtn.trigger("click");
        }, this.opt.duration);
    },
    indicator: function(index) {
        //修改指示器的样式
        this.dot.removeClass(‘active‘);
        this.dot.eq(index).addClass(‘active‘);
    }
}
$(document).ready(function() {
    var mySlider = new Slider({
        duration:1600
    });
});
</script>

</html>

原文地址:https://www.cnblogs.com/150536FBB/p/9678811.html

时间: 2024-10-08 14:08:41

横向滚动轮播图的相关文章

简单的左右滚动轮播图

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .slide { width: 100%; height: 100%; } .slider{ width: 100%; height: 100%; position: relative; cursor:

js原生选项(自动播放无缝滚动轮播图)二

今天分享一下自动播放轮播图,自动播放轮播图是在昨天分享的轮播图的基础上添加了定时器,用定时器控制图片的自动切换,函数中首先封装一个方向的自动播放工能的小函数,这个函数中添加定时器,定时器中可以放向右走的代码,也可以放向左走的代码,然后在js加载的时候先执行一次,保证页面加载的时候轮播图是自动播放的,当然在鼠标悬停在遮罩层的时候我们需要清除这个定时器,让自动播放功能关闭,然后在鼠标再次移出遮罩层的时候再次开启定时器,这样就实现了自动播放的功能.然后今天的轮播图中我添加了开关的功能,这个开关是为了避

水平滚动轮播图

1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 2 "http://www.w3.org/TR/html4/strict.dtd"> 3 4 <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 5 <head> 6 <meta http-equiv="Content

vue慕课网音乐项目手记:5-手写滚动轮播图(上)

在这一节,会封装一些公用的函数来添加classname,改变image的宽度. 具体如下: 首先:封装一个slider的组件 <template> <div class="slider" ref="slider"> <div class="slider-group" ref="sliderGroup"> <slot></slot> </div> <d

jQuery无缝滚动轮播图

//html部分<div class="lunbo right"> <div class="show"> <a href="#"><img src="images/cbda425ea72ec5013b8388ae982e9a52.jpg" alt=""/></a> <a href="#"><img src=&q

js原生选项(包含无缝滚动轮播图)一

原生js选项卡的几种写法,整片文章我会由简及难的描述几种常用的原生选项卡的写法: Improve little by little every day! 1>基本选项卡: 思路:循环中先清除再添加,注意this的指向和自定义属性的应用 html代码: <div id="tab"> <input class="on" type="button" value="aaa"> <input type

vue慕课网音乐项目手记:6-手写滚动轮播图(中)

active的样式 &.active width: 20px border-radius: 5px background: $color-text-ll 这里有一个问题就是betterscroll在1.0以后的是没有snapLoop的. 所以我安装了0.1.15版本 自动轮播如下 原文地址:https://www.cnblogs.com/catbrother/p/9181079.html

js 实现横向滚动轮播并中间暂停下

效果: html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> <title>滚动+停顿</ti

无缝滚动轮播图

代码: 1 $(function() { 2 var index = 1; 3 var index1 = 0; 4 $('.right').click(function() {// 点击显示下一张 5 index++; 6 index1++; 7 if (index1 > 4) { 8 index1 = 0; 9 } 10 // console.log(-100*index+'%'); 11 $('#img').animate({ 12 left: -100 * index + '%' 13 }