首先就是引入swiper

import Swiper from 'react-id-swiper';
一个轮播图首先要考虑到一种情况就是当只有一张图的时候是不是需要按轮播图来处理
一般情况下,一张图是不需要按轮播图来处理的,只需要放一张图片即可。
对传入的图片地址、是否自动播放、高度进行类型规定
其中url是数据中所带的点击图片要跳转的地址
featureImage为图片的url地址
  static propTypes = {
    data: PropTypes.arrayOf(
      PropTypes.shape({
        url: PropTypes.string,
        featuredImage: PropTypes.string,
      })
    ),
    autoplay: PropTypes.bool,
    height: PropTypes.number,
  }
对轮播图进行配置
 rebuildOnUpdate为banner图片发生改变时是否更新盒子
 height为banner高度
 loop为是否循环轮播,也就是重最后一张可以轮播回第一张
 pagination为配置banner底部的轮播导航,其中el写死,type为底部的样式
  type: 'bullets'为小圆点
   bulletClass: 轮播到这一张图是小圆点的样式
   bulletActiveClass: 没有轮播到这一张图小圆点样式
  autoplay 规定是否自动轮播以及轮播时间
 this.params = {
rebuildOnUpdate: true,
height: height,
loop: true,
pagination: {
el: '.swiper-pagination',
type: 'bullets',
bulletClass: styles.bulletClass,
bulletActiveClass: styles.bulletActiveClass,
},
autoplay: autoplay ? {delay: 5000, disableOnInteraction: false} : false,
}

banner所需要的各种数据已经定义好,那么就可以写html骨架了

首先定义单个图片的骨架


对其中的url进行判断,url为点击图片跳转的连接(一般后端返回的数据中会配置
如果有用link将其包裹
window的事件抛发是为了在窗口大小发生改变的时候重新加载图片,使图片立即适应窗口大小
onLoad
class CarouselItem extends Banner {
constructor(props) {
super(props)
}
render() {
return (
<React.Fragment key={this.props.index}>
{this.props.url ? (
<Link href={this.props.url}>
<a style={{display: 'block'}}>
<img
src={`${this.props.featuredImage}`}
onLoad={() => {
window.dispatchEvent(new Event('resize'))
}}
style={{height: this.props.height, width: '100%'}}
/>
</a>
</Link>
) : (
<img
src={`${this.props.featuredImage}`}
onLoad={() => {
window.dispatchEvent(new Event('resize'))
}}
style={{height: this.props.height, width: '100%'}}
/>
)}
</React.Fragment>
)
}
}

接下来就是banner整个组件的骨架结构

当只有一张图的时候就只需要将这个图片渲染出来就ok
当超过一张的时候就需要用到Swiper这个轮子,将规定好的配置params放进去就ok了

render() {
const {data} = this.props
return (
<div className={styles['uni-banner']}>
{data &&
(data.length == 1 ? (
<CarouselItem {...this.props} {...data[0]} />
) : (
<Swiper {...this.params}>
{data.map((info, index) => (
<div key={index}>
<CarouselItem {...this.props} {...info} />
</div>
))}
</Swiper>
))}
</div>
)
}
 
 

在Nuxt中使用react-id-swiper封装公共的轮播图组件(移动端的更多相关文章

  1. reactjs-swiper react轮播图组件基于swiper

    react轮播图组件基于swiper demo地址:http://reactjs-ui.github.io/reactjs-swiper/simple.html 1. 下载安装 npm install ...

  2. 原生JS面向对象思想封装轮播图组件

    原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...

  3. iOS回顾笔记(05) -- 手把手教你封装一个广告轮播图框架

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  4. Ionic4.x 中的 UI 组件(UI Components) Slides 轮播图组件、Searchbar 组件、 Segment 组件

    Slides 轮播图组件 Ionic4.x 中的轮播图组件是基于 swiper 插件,所以配置 slides 的属性需要在 swiper 的 api 中 找 Swiper Api:http://ida ...

  5. vue自定义轮播图组件 swiper

    1.banner 组件 components/Banner.vue <!-- 轮播图 组件 --> <template> <div class="swiper- ...

  6. 用require.js封装原生js轮播图

    index.html页面: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...

  7. vue2.0 + vux (五)api接口封装 及 首页 轮播图制作

    1.安装 jquery 和 whatwg-fetch (优雅的异步请求API) npm install jquery --save npm install whatwg-fetch --save 2. ...

  8. js-BOM之offset家族、移动函数的封装升级(轮播图)

    Obj.style.width/obj.style.height与obj.offsetWidth/obj.offsetHeight的区别: <style> #div1{ height: 2 ...

  9. swiper结合ajax的轮播图

    Swiper 是什么:是纯JavaScript打造的滑动特效插件,能够实现触屏焦点图.触屏tab切换.触屏多图切换等常用效果. 开源.免费.稳定.应用广泛. 这就是swiper简单的介绍,由于是结合a ...

随机推荐

  1. CSS属性(CSS盒子模型)

    1.CSS盒子模型 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=&q ...

  2. kali 系列学习04 - 漏洞扫描

    一.比较三类漏洞扫描工具 1.Rapid7 Nexpose 适合较大网络 2.Nessus 更经济,可以申请个人版,搞之后硬盘占用达到20G 以上2个是商业软件,使用容易上手,输入IP地址就能完成所有 ...

  3. 两年经验拿到蚂蚁金服,字节offer,附上金九银十BAT面试核心知识点整理

    前言 我自己是本科毕业后在老东家干了两年多,老东家算是一家"小公司"(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找 ...

  4. 启动时出现错误:*** Warning - bad CRC or NAND

    前面转自:https://www.cnblogs.com/java20130726/archive/2012/06/15/3218570.html 在对NAND Flash烧写了bootstrap和U ...

  5. Idea中如何导入jar包

    1.首先在idea左上角找到" File ",然后找到 "Project structure" 2.接着选择 " java ",选择后接着会 ...

  6. Unable to locate package python3 错误解决办法

    错误 huny@DESKTOP-N1EBKQP:/mnt/c/Users/Administrator$ sudo apt-get install python3 Reading package lis ...

  7. C语言讲义——快速排序

    快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序 它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod) 基本思想: 1.先从数列中取出一个数作 ...

  8. mq消息

    同步,异步,单向 Message的扩展属性主要包含下面几个: tag:消息tag,用于消息过滤 keys:Message索引键,用多个空格隔开,可以根据这些key快速检索到消息 waitStoreMs ...

  9. Spring Boot 2.4发布了,但Spring Cloud用户不推荐着急升级

    前段时间Spring Boot发布了本年度最后一个重要更新版本:Spring Boot 2.4.0. 最近在社群里也开始有讨论关于Spring Boot 2.4的一些使用问题.我发现有很多Spring ...

  10. 六. Vue CLI详解

    1. Vue CLI理解 1.1 什么是Vue CLI 如果你只是简单写几个Vue的Demo程序, 那么你不需要Vue CLI,如果你在开发大型项目那么你需要它, 并且必然需要使用Vue CLI. 使 ...