首先就是引入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. oracle的三种连接方式

    1.通过sid jdbc:oracle:thin:@host:port:SID Example: jdbc:oracle:thin:@localhost:1521:sid_test 2.通过servi ...

  2. JVM(一)-JVM入门

    JVM的定义: JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的 ...

  3. redis的分布式锁工具LockUtil

    /** * 基于redis的分布式锁工具 * * @author yuyufeng * */ public class LockUtil { // 获取redis static JedisPool j ...

  4. [python学习手册-笔记]003.数值类型

    003.数值类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...

  5. P3287 [SCOI2014]方伯伯的玉米田

    首先可以证明,一定存在一种最优解,每次选择的区间结尾都是 \(n\).因为如果某一个区间结尾不是 \(n\),将其替换成 \(n\) 仍然保持单调不下降.接着都按这个策略拔高玉米. 令 \(f_{i, ...

  6. 容器中实现拉取其它服务器的jar包程序

    缘由:在做接口自动化测试时,若业务场景有一个前置仓库,在该仓库内完成一系列的场景测试,一旦某一场景测试失败,脏数据对环境造成影响则需要清理: 1.我容器的内核系统为Debian GNU/Linux 1 ...

  7. redis cluster下的pipeline

    因为key在cluster分布在不同的slot,可能在不同的机器,部分redis的客户端(比如jedis)是不支持pipeline的 针对jedis我们可能要先把这些key对应的slot手机起来,得到 ...

  8. Kafka作为分布式消息系统的系统解析

    Kafka概述 Apache Kafka由Scala和Java编写,基于生产者和消费者模型作为开源的分布式发布订阅消息系统.它提供了类似于JMS的特性,但设计上又有很大区别,它不是JMS规范的实现,如 ...

  9. 痞子衡嵌入式:一个奇怪的Keil MDK下变量链接强制对齐报错问题(--legacyalign)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是一个奇怪的Keil MDK下变量链接强制对齐报错问题. 痞子衡最近一直在参与恩智浦SBL项目(就是一个适用LPC和i.MXRT的完整OT ...

  10. sitespeedio前端性能测试工具介绍

    很久没有写博客了,今天给大家介绍一款比较好用的前端性能测试工具. sitespeedio简介: sitespeed.io是Jonathan Lee发布的一款可监视和衡量网站前端性能的开源工具. 1.开 ...