轮播图小案例

原理

总的容器:

 幻灯片容器:

里面的图片大小与总的容器大小相同

 

 移动的距离:索引*幻灯片的宽度

代码:

 <div id="slider" class="slider">
        <div class="slider-item-container">
            <div class="slider-item">
                <a href="###" class="slider-link">
                    <img src="img/1.jpg" alt="slider" class="slider-img">
                </a>
            </div>
            <div class="slider-item">
                <a href="###" class="slider-link">
                    <img src="img/2.jpg" alt="slider" class="slider-img">
                </a>
            </div>
            <div class="slider-item">
                <a href="###" class="slider-link">
                    <img src="img/3.jpg" alt="slider" class="slider-img">
                </a>
            </div>
            <div class="slider-item">
                <a href="###" class="slider-link">
                    <img src="img/4.jpg" alt="slider" class="slider-img">
                </a>
            </div>
            <div class="slider-item">
                <a href="###" class="slider-link">
                    <img src="img/5.jpg" alt="slider" class="slider-img">
                </a>
            </div>
        </div>
    </div>
 <script src="js/hammer.min.js"></script>
    <script src="js/slider.js"></script>
    <script>
        var slider = new Slider(document.getElementById('slider'), {
            initIndex: 0, // 初始显示第几张幻灯片,从0开始
            speed: 300, // 幻灯片的切换速度
            hasIndicator: true // 是否需要指示器indicator
        });

        var hammer = new Hammer(slider.getItemContainer());

        // 是否在滑动
        var isSwiping = false;

        // 拖动时--手指拖动时
        hammer.on('panmove', function(ev) {

            // 求出移动是距离
            var distance = ev.deltaX + slider.getDistanceByIndex(slider.getIndex());

            // 让幻灯片移动
            slider.move(distance);
        });

        // 拖动完成后--手指抬起后
        hammer.on('panend', function(ev) {
            if (isSwiping) return;

            // deltaX-手指开始拖动到拖动完成手指抬起后所移动的x的距离
            var distance = ev.deltaX + slider.getDistanceByIndex(slider.getIndex());

            var index = getIndexByDistance(distance);

            slider.to(index);
        });

        // 根据容器移动的距离获取索引
        function getIndexByDistance(distance) {
            if (distance > 0) {
                return 0;
            } else {
                return Math.round(-distance / slider.getDistancePerSlide());
            }
        }

        // 快速左滑动切换
        hammer.on('swipeleft', function(ev) { // next
            isSwiping = true;
            slider.next(function() {
                isSwiping = false;
            });
        });

        // 快速右滑动切换
        hammer.on('swiperight', function(ev) { // prev
            isSwiping = true;
            slider.prev(function() {
                isSwiping = false;
            });
        });
    </script>
/*css reset*/

* {
    box-sizing: border-box;
    padding: 0;
    margin: 0;
}

img {
    border: none;
    vertical-align: top;
}

a {
    -webkit-tap-highlight-color: transparent;
}


/*slider*/

.slider {
    overflow: hidden;
    position: relative;
    width: 100%;
    height: 183px;
}

.slider-item-container,
.slider-item,
.slider-link,
.slider-img {
    width: 100%;
    height: 100%;
}

.slider-item-container {
    display: flex;
    transition: transform 0;
}

.slider-item {
    flex-shrink: 0;
}

.slider-link {
    display: block;
}

.slider-indicator-container {
    position: absolute;
    bottom: 10px;
    width: 100%;
    text-align: center;
}

.slider-indicator {
    display: inline-block;
    width: 8px;
    height: 8px;
    background-color: #000;
    opacity: 0.2;
    border-radius: 50%;
    margin-right: 8px;
}

.slider-indicator-active {
    background-color: #007aff;
    opacity: 1;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白小白从不日白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值