Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React.js简单轮播图组件封装

React.js简单轮播图组件封装

作者头像
用户6379025
发布于 2022-12-26 07:56:12
发布于 2022-12-26 07:56:12
8.4K00
代码可运行
举报
文章被收录于专栏:莫凡莫凡
运行总次数:0
代码可运行
如何使用

https://player.bilibili.com/player.html?aid=370886286

轮播图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 /*
 *  imgUrl : 轮播图数据 
 *  speed  : 动画时间 
 *  step   :初始轮播图的位置
 *  width  :轮播图宽
 *  height :轮播图高 
 *  autoplay:是否自动轮播
 *  
 */
render(
   <div><Banner imgUrl={imgUrl} speed={500} step= {1} width={1170} height={400} interval={2000} autoplay={true}/></div>,
  document.getElementById("root")
)
banner.js
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* eslint-disable react/no-typos */

import React from "react"
import propTypes from "prop-types"
import "../css/banner.less"
export default class Banner extends React.Component {
    constructor(props) {
        super(props)
        let { imgUrl, speed, step, width, height, autoplay } = this.props

        // 克隆数组
        let imgUrlClone = []
        imgUrlClone = imgUrlClone.concat([].concat(imgUrl))
        imgUrlClone.push(imgUrl[0])
        imgUrlClone.unshift(imgUrl[imgUrl.length - 1])
        this.imgUrlClone = imgUrlClone
        this.state = {
            speed,
            step,
            width,
            height
        }
        if (autoplay) {
            this.timer = setInterval(() => {
                this.next()
            }, this.props.interval);
        }
    }

    static propTypes = {
        dataUrl: propTypes.array,
        speed: propTypes.number,
        spep: propTypes.number,
        width: propTypes.number,
        height: propTypes.number,

    }
    static defaultProps = {
        imgUrl: [],
        speed: 200,
        spep: 1,
        width: 1170,
        height: 400,
        autoplay: true
    }
    render() {
        let { width, height, step, speed } = this.state
        let swiperBoxSty = {
            width: `${this.imgUrlClone.length * width}px`,
            left: `${-step * width}px`,
            height: height + "px",
            transition: `all ${speed}ms linear`
        }
        this.swiperBoxSty = swiperBoxSty
        let commom = {
            width: width + "px",
            height: height + "px"
        }
        return <div className="container" style={commom} ref="box" onMouseEnter={this.removeInte} onMouseLeave={this.addInter}>
            <div className="swiper-box" style={swiperBoxSty}>
                {this.imgUrlClone.map((item, index) => {
                    return <div className="swiper-item" key={index}><img src={item} alt="" /></div>
                })}

            </div>
            <div className="swiper-arrow">
                <div className="arrowLeft iconfont iconqianjin1" ref="pre" onClick={this.prev}></div>
                <div className="arrowRight iconfont iconqianjin" ref="next" onClick={this.next}></div>
            </div>
            <div className="focus">
                {this.props.imgUrl.map((item, index) => {
                    if (step === this.imgUrlClone.length - 1) {
                        step = 1
                    }
                    if (step === 0) {
                        step = this.imgUrlClone.length - 2
                    }
                    return <div className={index + 1 === step ? "active" : ""} key={index}></div>
                })}

            </div>
        </div>
    }
    next = () => {
        let { step } = this.state
        if (step >= this.imgUrlClone.length - 1) {
            this.setState({
                step: 1,
                speed: 0
            })
        }
        setTimeout(() => {
            this.setState({
                step: this.state.step + 1,
                speed: this.props.speed
            })
        }, 0)

    }
    prev = () => {
        let { step } = this.state
        if (step <= 0) {
            this.setState({
                step: this.imgUrlClone.length - 2,
                speed: 0
            })
        }
        setTimeout(() => {
            this.setState({
                step: this.state.step - 1,
                speed: this.props.speed
            })
        }, 0)

    }
    removeInte = () => {
        clearInterval(this.timer)
    }
    addInter = () => {
        if(!this.props.autoplay)return
        this.timer = setInterval(() => {
            this.next()
        }, this.props.interval);
    }
   
}
banner.less
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@font-face {
  font-family: "iconfont";
  src: url('//at.alicdn.com/t/font_1483779_y95pc2rnssm.eot?t=1591265219045');
  /* IE9 */
  src: url('//at.alicdn.com/t/font_1483779_y95pc2rnssm.eot?t=1591265219045#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAALoAAsAAAAABqwAAAKZAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDBgqBEIENATYCJAMMCwgABCAFhG0HPBvZBcg+QRxjO4CWBEKoqC5QYQo700fuN3/uDcc0D29tBG9jb/N2twTk6jm+qqkCVGwkUHzjD+z5E+Y0xgMKd/n/u3S/Y0t4PpJ511Yyt5pq3vhJ0xu5lwtjD4eQGIWjwkElitKAzN76+msYvV4+QJk1gMDAv2SE/M2PYv8EOIHMk5CPXAMA9nmuyVdAB1L7NptTpUXH80jACQ60A9dkG8kAfIPuIkYlfZ0nUG9Yi8jm0MQ0pBVgWiDOODMgbYUVpcjVCtUTa4t4JqE23fgFPPHvx2/FSJNUZWDu1umgDT3f+v2MMUetPF/nRLGJjEWgELuT6R0xUbAx9cb4cmm1IqSrYg9X9ubqj/7xElENVDeC2TiT+AZLCb61QQIZVMvsCLCUMJ1PC6m6qfGA0Wm02ct+D3u9fP3SaT9dnPzy/vauC5/3Xr37+Dh4wFbCFwLq96r+b/1XSbR/Ddv7l8//kla7Kuj4XgJ/DFCR3/wDlb1eiCC4/PAbOq7NFfD15MGKAtu8oPbtnuBvqTZ2lV4DLLm0SqwcvVnfQWcilpc+lYC/XfW4uWtzNaFWl0ZSYwhZrUmiMIuo0mAZ1WqtoN6C4c0NOkgxUeow7zhCaPWBpNl7ZK0qRGF+UKVbDdVaI4Z621G3Z4Pp4Nl+iYZCm5jrhFvCp8imsqJ2Etmya0hTw7lZlCGPkYKWd3PD6KO8YkG4wopKUUKl8MhQdBm6riCBFGW0lFZSKmjTdTr1Js0SHmRtkJBBQTbCtI7gLIKP0sFK1vv8JMQscxnkQt1OdhaSQnx4okCT30AMG/1Ndb9yTWgFU6QoFEFJgocYikYhl0sggulRZciiaEoHkoE2OuxHtxq1583eD1QUTYDNOVLkKGquueGXuZ/mrgIAAAAA') format('woff2'), url('//at.alicdn.com/t/font_1483779_y95pc2rnssm.woff?t=1591265219045') format('woff'), url('//at.alicdn.com/t/font_1483779_y95pc2rnssm.ttf?t=1591265219045') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url('//at.alicdn.com/t/font_1483779_y95pc2rnssm.svg?t=1591265219045#iconfont') format('svg');
  /* iOS 4.1- */
}
.iconfont {
  font-family: "iconfont" !important;
  font-size: 16px;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.iconqianjin:before {
  content: "\e61f";
}
.iconqianjin1:before {
  content: "\e6c5";
}
* {
  margin: 0;
  padding: 0;
}
.container {
  position: relative;
  width: 1170px;
  margin: 0 auto;
  overflow: hidden;
  height: 400px;
}
.container .swiper-box {
  display: flex;
  height: 400px;
  position: absolute;
  transition: all 1s linear;
}
.container .swiper-box .swiper-item {
  width: 100%;
  height: 100%;
}
.container .swiper-box .swiper-item img {
  width: 100%;
  height: 100%;
}
.container .swiper-arrow {
  width: 100%;
  display: flex;
  justify-content: space-between;
  align-items: center;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}
.container .focus {
  height: 15px;
  position: absolute;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 10;
  display: flex;
  justify-content: space-evenly;
  align-items: center;
}
.container .focus div {
  width: 10px;
  height: 10px;
  border-radius: 5px;
  opacity: 1;
  background-color: white;
  margin-left: 10px;
}
.container .focus .active {
  background-color: black;
  opacity: 0.8;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
写一个简单的轮播组件
直接上代码 App.js文件 let list = [ { id: 1, img: require('./static/image/one.jpg') }, { id: 2, img: require('./static/image/two.jpg') }, { id: 3, img: require('./static/image/three.jpg') } ]
柴小智
2020/02/13
6010
基于后端云的吉他谱小程序开发
人的一生90%的时间都在做着无聊的事情,社会的发展使得我们的闲暇时间越来越多,我们把除了工作的其他时间放在各种娱乐活动上。
D2
2020/08/12
9710
基于后端云的吉他谱小程序开发
三种方式实现轮播图功能
使用position的绝对定位与相对定位实现轮播图,首先将图片全部拼接成为一行,使用overflow: hidden;将其他图片隐藏,将这一行图片加入定时任务不断进行左移,从而只显示中间的图片,对于边缘特殊处理,将第一张轮播图追加到一行图片之后,当切换到最后一张轮播图时,下一张即播放第一张图,当此图轮播完成后,将所有图片归位,提供两个DEMO,第一个是单纯的轮播不存在任何控制按钮,第二个则比较完善。
WindRunnerMax
2020/08/27
2K0
mpvue小程序轮播图绑定动态点击事件
文采不佳,话不多说。分享一个mpvue小程序轮播图绑定动态点击跳转页面,这个源码可以直接引用。用微信原生的轮播图也可,不过由于设计稿需要,我才改写了指示点的样式。
全栈程序员站长
2022/08/31
1.2K0
JS实现超简易轮播图
预览地址: https://codepen.io/klren0312/full/ymvEbr
治电小白菜
2020/08/25
10.9K0
JS实现超简易轮播图
微信小程序轮播图实现(超简单)「建议收藏」
微信小程序的轮播图可以用官方给的swiper组件。 下图是官方给出的swiper属性,我截取了比较常用的一些属性。
全栈程序员站长
2022/08/31
5.8K0
微信小程序轮播图实现(超简单)「建议收藏」
基于antd实现一个轮播图
关于antd的使用这里就不多说了,前面已经写过了,从零开始学习React-引入Ant Design 组件(八):https://www.jianshu.com/p/e7e905d89673,现在为了对组件的熟悉,来根据文档写一个常见的轮播图吧。
王小婷
2019/12/11
2.6K0
小程序 轮播图
swiper小圆点 默认样式修改 (以下代码 上面都有 这里只是做个截屏说明一下)
全栈程序员站长
2022/08/25
6190
小程序 轮播图
Vue3.0入门 + Vant3.0移动端实践(二)轮播图模块封装及首页完善
接着上一篇的来,上一篇介绍了环境搭建及做好了底部的导航栏模块,接下来继续完善首页。
杨永贞
2021/02/22
1.4K0
Vue3.0入门 + Vant3.0移动端实践(二)轮播图模块封装及首页完善
逐步拆解React组件—Swipe轮播图
核心思想是利用视觉上的感觉,在用户无感的情况下切换回去,这里有一个思路和以前有点不同,切换回去这个动作改在了切换的时候进行复位重置并且弃用用了之前的absolute布局,改用了flex布局的方式,移动主要还是依靠通过改变外层容器transform来实现,无缝轮播的思路步骤如下
gary12138
2022/10/05
3.5K0
逐步拆解React组件—Swipe轮播图
实战SSM_O2O商铺_40【前端展示】首页轮播图和一级商铺View层的实现
在完成了后端 实战SSM_O2O商铺_39【前端展示】首页轮播图和一级商铺Dao+Service+Controller层的开发 的开发之后,我们来实现View层的部分
小小工匠
2021/08/17
2650
Vue 自定义轮播
划分标题、轮播区、指示点三块,在轮播区使用 display: inline-block; ​使子元素横向排列,
我不是费圆
2022/11/02
4020
Vue 自定义轮播
微信小程序轮播图实现详解
大体框架: 主要运用swiper组件,swiper作为轮播图外层容器,swiper-item用于存放轮播图片,最后加上各种属性即完成轮播图
全栈程序员站长
2022/08/31
1.2K0
微信小程序轮播图实现详解
【微信小程序】轮播图——swpier组件
哈喽大家好,本期是微信小程序专栏第六期,本期主要内容是文章列表页面。文章列表页面主体分为轮播图和文章列表两部分。本期主要通过轮播图来学习swiper组件。 注意:每期内容是连载呢,建议大家可以看看往期内容,更好理解噢~
颜颜yan_
2022/12/01
6K0
【微信小程序】轮播图——swpier组件
用javascript实现轮播图效果
程序媛夏天
2024/01/18
2260
微信小程序----gallery slider(图片轮播)组件
DEMO下载 先上效果图: wxml <scroll-view scroll-y="true" style="height:200px" class="page-body" bindscro
Rattenking
2021/02/01
9050
微信小程序----gallery slider(图片轮播)组件
实战为王,从零封装 Icon 组件
在实践应用中,图标的使用无处不在。小到编辑器的功能按钮,大到 chrome 浏览器的任务栏,都有大量的图标需要处理。每个稍微大一点点的项目都必然需要一个图标组件。
用户6901603
2022/05/24
1.4K0
实战为王,从零封装 Icon 组件
小程序 轮播图之自动适应宽高度
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143452.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/03
2K0
小程序 轮播图之自动适应宽高度
Svg矢量图封装使用
炑焽
2024/08/30
3960
【小程序】view视图,swiper轮播图,scroll-view滑动列表 (在线详细手册)
书接上文 【小程序 – 启航篇】一文打通任督二脉 小程序宿主环境构成,上文已介绍了关于宿主环境的通信模式和运行机制,本文着重介绍关于宿主环境的视图容器和基础内容组件
计算机魔术师
2022/08/23
1.4K0
【小程序】view视图,swiper轮播图,scroll-view滑动列表 (在线详细手册)
推荐阅读
相关推荐
写一个简单的轮播组件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验