【问题标题】:SwiperJS Navigation not showingSwiperJS导航未显示
【发布时间】:2021-05-29 22:05:40
【问题描述】:

我的问题是看不到 SwiperJS 导航。 在文档中是这样写的:

navigation 的 nextEl 是带有 CSS 选择器的字符串或元素的 HTML 元素,在单击它后将像“下一步”按钮一样工作 但是当我这样做时

navigation={{
    nextEl: <div>some text</div>
}}

根本不显示

import React from 'react';
import { Swiper, SwiperSlide } from 'swiper/react';
import SwiperCore, { Navigation } from 'swiper';
import 'swiper/swiper-bundle.min.css'

import classes from './HorizontalSwiper.module.css';

SwiperCore.use([Navigation]);

const HorizontalSwiper = ({title}) => {
    return (
        <section className={classes.hs}>
             <header>
                <div className={classes.hs__title}>{title}</div>
                <div className={classes.hs__seeAll}>see all</div>
            </header>

            <Swiper 
                spaceBetween={10}
                slidesPerView={2} 
                direction='horizontal'
                navigation={{
                    nextEl: <div>next</div>,
                    prevEl: <div>prev</div>
                }}
                className={classes.swiper}>
                {
                    [1,2,3,4,5].map(function showSwiperItem(el, i){
                        return (
                            <SwiperSlide key={`${el}_${i}`} className={classes.swiper__slide}>
                                {el}
                            </SwiperSlide>
                        )
                    })
                }
            </Swiper>

        </section>
    )
}

export default HorizontalSwiper;

【问题讨论】:

    标签: reactjs swiper swiperjs swiper.js


    【解决方案1】:

    nextEl / prevEl :带有 CSS 选择器或 HTML 元素的字符串 单击它后将像“下一个/上一个”按钮一样工作的元素。 https://swiperjs.com/swiper-api#navigation

    代码中的错误:

    1/2。该值应该是一个字符串

    JavaScript Strings 变量写在双引号或单引号内。

    正确:

    nextEl: '.swiper-button-next',
    

    错误:

    nextEl: .swiper-button-next,
    

    2/2。该字符串代表CSSSelector -或- HTMLElement(选择器)

    这不是appendChild 的行为。使用 class - 或 - id - 或 - data attributehtml-element selector.

    正确示例:

    2.1:按类选择:

     navigation={
        nextEl: `.some_class_selector`,
     }
    

    2.2:按 ID:

     navigation={
        nextEl: `#next_btn`,
     }
    

    2.3:attribute

     navigation={
        nextEl: `[data-next-btn]`,
     }
    

    2.4:通过 HTML 元素(不太有用):

     navigation={
        nextEl: `hgroup`,
     }
    

    你的html:

    <hgroup id="next-btn" class="some_class_selector" data-next-btn>next</hgroup>
    

    作为反应道具:

    navigation={{
       prevEl: ".some_class_prev_selector",
       nextEl: ".some_class_next_selector"
    }}
    

    错误(下面的代码不会将&lt;div&gt;next&lt;/div&gt;节点添加到DOM中):

     navigation={
        nextEl: `<div>next</div>`, /* not appendChild*/
     }
    

    SUM:“hello world”演示

    **无法展示 react Demo,因为 swiper react 只能作为 NPM 使用

    • 第 1 步:将下一个/上一个按钮节点添加到 DOM。

    • 第 2 步:选择下一个/上一个节点。

    <!-- Initialize Swiper -->
    const swiper = new Swiper('.swiper-container', {
      loop: true,
      navigation: {
        nextEl: '.custom_next_btn',
        prevEl: '.custom_prev_btn',
      },
    });
    html,
    body {
      position: relative;
      height: 100%;
    }
    
    body {
      background: #eee;
      font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
      font-size: 14px;
      color: #000;
      margin: 0;
      padding: 0;
    }
    
    .swiper-container {
      width: 100%;
      height: 100%;
    }
    
    .swiper-slide {
      text-align: center;
      font-size: 18px;
      background: #fff;
      /* Center slide text vertically */
      display: flex;
      justify-content: center;
      align-items: center;
    }
    <link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css">
    
    <button class="custom_prev_btn">Custom Prev</button>
    <button class="custom_next_btn">Custom Next</button>
    
    <!-- Swiper -->
    <div class="swiper-container">
      <div class="swiper-wrapper">
        <div class="swiper-slide">Slide 1</div>
        <div class="swiper-slide">Slide 2</div>
        <div class="swiper-slide">Slide 3</div>
        <div class="swiper-slide">Slide 4</div>
      </div>
    </div>
    
    
    <script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>

    反应代码示例:

    /* index.js */
    import React from "react";
    import "./style.css";
    
    // import Swiper core and required modules
    import SwiperCore, { Navigation, Pagination, Scrollbar, A11y } from "swiper";
    
    import { Swiper, SwiperSlide } from "swiper/react";
    // Import Swiper styles
    import "swiper/swiper.scss";
    import "swiper/components/navigation/navigation.scss";
    import "swiper/components/pagination/pagination.scss";
    import "swiper/components/scrollbar/scrollbar.scss";
    
    // install Swiper modules
    SwiperCore.use([Navigation, Pagination, Scrollbar, A11y]);
    
    export default function App() {
      return (
        <div>
          <button class="custom_next">Custom Next Btn</button>
          <button class="custom_prev">Custom Next Btn</button>
          <Swiper
            spaceBetween={50}
            slidesPerView={3}
            navigation={{
              nextEl: ".custom_next",
              prevEl: ".custom_prev"
            }}
          >
            <SwiperSlide>Slide 1</SwiperSlide>
            <SwiperSlide>Slide 2</SwiperSlide>
            <SwiperSlide>Slide 3</SwiperSlide>
            <SwiperSlide>Slide 4</SwiperSlide>
          </Swiper>
        </div>
      );
    }
    

    【讨论】:

    • 嗯..不是真的.. 您在这里介绍的是一种方法,如果您仔细查看我的代码,您会发现在 React.js 应用程序和我这样做的方式在官方 SwiperJS 视频中呈现。顺便说一句,如果我 console.log(Navigation) 我得到 Navigation.params.navigation.nextEl 是我制作的
      元素,但它只是没有显示它......
    • React 只是做同样事情的另一种方式(SAME API)。您可以使用道具而不是对象安装。您在文档中的哪里看到将自定义 next/prev 实现为
      next
      (Nowhere) 的方法?...我编辑答案,请尝试下面的代码块。这里有什么问题? stackblitz.com/edit/…
    • 谢谢伙计。这是有帮助的。现在我明白了:))
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签