美文网首页
手写图片轮播

手写图片轮播

作者: clinyong | 来源:发表于2016-11-06 15:15 被阅读233次

图片轮播的场景,在 PC 和手机端都是很常见的。最早的时候,都是用的第三方库,比如 Bootstrap,react swipe。但是有时候我们的业务很简单,并不需要这些插件自带的很多其它功能。加上之前在微博看到某前端大神在吐槽。

来面试前端的,麻烦先把图片轮播实现出来。

虽然看完之后,有种躺枪的感觉,但是自己确实没有仔细想过要怎样实现。所以在某个阳光明媚的早晨,决定动手实现一下,最后发现原来这么简单 :)。下面说下这个过程。

先是静态 UI。

<style>
    .container {
        position: relative;
        width: 500px;
        margin: 0 auto;
        height: 300px;
    }
    
    .item {
        height: 100%;
        width: 100%;
        position: absolute;
    }
    
    #item1 {
        background-color: #FD9827;
    }
    
    #item2 {
        background-color: #47B784;
    }
    
    .btn {
        background: rgba(0, 0, 0, 0.28);
        border-radius: 50%;
        display: block;
        color: #fff;
        cursor: pointer;
        font-size: 20px;
        line-height: 40px;
        position: absolute;
        width: 40px;
        text-align: center;
        top: 100px;
    }

    #pre {
        left: 10px;
    }

    #next {
        right: 10px;
    }
</style>

<div class="container">
    <div class="item" id="item1"></div>
    <div class="item" id="item2"></div>

    <span class="btn" id="pre"><</span>
    <span class="btn" id="next">></span>
</div>

然后给两个按钮加上点击事件,此外还要加上两个显示和隐藏的类,以及修改两个背景图的初始化状态。

<style>
    .hide {
        opacity: 0;
    }

    .show {
        opacity: 1;
    }
</style>

<div class="item show" id="item1"></div>
<div class="item hide" id="item2"></div>
<span class="btn" id="pre" onclick="toggle()"><</span>
<span class="btn" id="next" onclick="toggle()">></span>

<script>
function getByID(id) {
    return document.getElementById(id)
}

let index = 1
let item1 = getByID('item1')
let item2 = getByID('item2')

function toggle() {
    if (index === 1) {
        item1.className = 'item hide'
        item2.className = 'item show'
        index = 2
    } else {
        item2.className = 'item hide'
        item1.className = 'item show'
        index = 1
    }
}
</script>

这样子,基本上就能达到切换图片的效果了。当然,我还想加多点动画效果,让图片能从左边滑进来,从右边滑出去。修改下显示和隐藏两个类,以及给父元素加一个 overflow: hidden

<style>
    .container {
        position: relative;
        height: 300px;
        width: 500px;
        margin: 0 auto;
        overflow: hidden;
    }
    
    .hide {
        animation: fadeRightOut 1s forwards;
    }

    .show {
        animation: fadeLeftIn 1s forwards;
    }

    @keyframes fadeRightOut {
        0% {
            transform: translate(0, 0);
            visibility: visible;
        }
        100% {
            transform: translate(100%, 0);
            visibility: hidden;
        }
    }

    @keyframes fadeLeftIn {
        0% {
            transform: translate(-100%, 0);
            visibility: hidden;
        }
        100% {
            transform: translate(0, 0);
            visibility: visible;
        }
    }
</style>

这样,一个基本的轮播组件就算完成了,然后就可以开始去面试了:)。

后记

Github 上面有个库,You-Dont-Need-Javascript,介绍了一些不用 JS 就能实现出来的效果,里面也包含了图片轮播。里面的一些做法,作为加深对 CSS 的理解,开开眼界就好。如果用在了工作的项目当中,无疑加大了代码的维护成本。

相关文章

  • 手写图片轮播

    图片轮播的场景,在 PC 和手机端都是很常见的。最早的时候,都是用的第三方库,比如 Bootstrap,react...

  • 个人博客—轮播器

    个人博客—轮播器 轮播器自动轮播,每张图片淡入淡出 控制按钮和图片描述跟随图片轮播 鼠标悬停图片上方则停止轮播,滑...

  • 沉浸式渐变图片轮播器

    沉浸式渐变图片轮播器 沉浸式渐变图片轮播器

  • JQ实现左右轮播效果

    这篇文章主要是实现图片左右轮播效果,功能:进入页面自动播放图片,鼠标悬浮,暂停图片轮播,鼠标离开,继续图片轮播,点...

  • 常用三方 SDCycleScrollView轮播图

    iOS图片、文字轮播器Git/SDCycleScrollView 滚动轮播图片、文字、可使用本地图片或加载网络图片...

  • 用动画做图片轮播

    图片轮播的新方法,用动画实现轮播: 1.将需要轮播的图片用标签放在同一位置; 2.通过改变各个图片的透明度实现轮播...

  • 第三方库之 banner

    Android 广告图片轮播控件,支持无限循环和多种主题,可以灵活设置轮播样式、动画、轮播和切换时间、位置、图片加...

  • 27.jquery 实战-轮播

    代码 1.实现如下轮播效果 要求:渐变轮播,图片淡入淡出轮播会自动循环像左向右点击会展示前/后图片底部显示轮播当前...

  • 无限图片轮播器 --- Objective-C

    KNBannerView 无限循环轮播器:本地图片,网络图片(图片缓存) 一.功能描述及要点 1.无限图片轮播器,...

  • 轮播

    轮播的原理 滑动轮播1.轮播的图片水平排列2.给出一个与图片相同大小的视窗包裹图片列,设置overflow: hi...

网友评论

      本文标题:手写图片轮播

      本文链接:https://www.haomeiwen.com/subject/fstnuttx.html