【问题标题】:ReactJS - Hide a div with specific background imageReactJS - 隐藏具有特定背景图像的 div
【发布时间】:2019-07-11 18:11:52
【问题描述】:

我有这个 React 组件

    import React, { Component } from 'react'    
    import Lightbox from 'react-lightbox-component';    

    const LightBoxTest = () => (

      <div>

        <Lightbox images={[
          {
            src: '../images/pic_01.jpg'       
          },
          {
            src: '../images/pic_02.jpg'
          },
          {
            src: '../images/pic_03.jpg'        
          },
          {
            src: '../images/decorative_pic.jpg'        
          },
          {
            src: '../images/decorative_pic.jpg'        
          },
          {
          src: '../images/decorative_pic.jpg'  
          }
        ]} />
      </div>
    );

这种依赖 'react-lightbox-component' 呈现两个 css 类:一个用于图像缩略图,另一个用于每个放大的图像:“lightbox-image”类。当图片点击放大后,会变成Div,scr变成background-image。

如何为所有在其背景图像中包含“decorative.jpg”的图像删除此类?

我想这样做是因为我不希望这些名为“decorative.jpg”的图像被放大。我只希望它们作为缩略图。我该如何解决?

【问题讨论】:

  • 我用这些 CSS 规则解决了放大的图像不出现的问题: .lightbox-image[style*='decorative'] { display:none;现在图像没有出现,但相应图像的箭头通过显示透明图像继续存在。我该如何解决?
  • 对于您的示例,我将使用与 CSS 不同的方法。在他们的示例页面上,您可以手动将功能绑定到缩略图。我会禁用它,而不是添加 CSS 规则来隐藏内容
  • 请更具体地显示代码
  • 我会的,我只需要在我的机器上创建一个项目,因为 react-lightbox-component 没有 cdnjs 可以在 jsFiddle 中使用它
  • 谢谢你,我会在这里等着我在电脑上尝试解决其他问题。

标签: javascript css reactjs


【解决方案1】:

使用他们的示例,为了禁用单击缩略图,您可以使用以下代码

import React, { Component } from 'react';
import Lightbox from 'react-lightbox-component';

class LightBoxTest extends Component {
  constructor(props) {
    super(props);
    this.state = {
      images: [
          {
            src: '../images/pic_01.jpg'       
          },
          {
            src: '../images/pic_02.jpg'
          },
          {
            src: '../images/pic_03.jpg'        
          },
          {
            src: '../images/decorative_pic.jpg'        
          },
          {
            src: '../images/decorative_pic.jpg'        
          },
          {
          src: '../images/decorative_pic.jpg'  
          }
       ]
    }
  }

  render() {
    const { images } = this.state;
    return (
      <div>
        <Lightbox
          images={images}
          renderImageFunc={(idx, image, toggleLightbox, width, height) => {
            let onClick = () => null;
            const patt = /decorative/g;
            if(!patt.test(image.src)) onClick = toggleLightbox.bind(null, idx);
            return (
              <img
                key={idx}
                src={image.src}
                style={{width: width, height: height}}
                onClick={onClick} />
            )
          }}/>
      </div>
    )
  }
}

export default LightBoxTest;

在这里,在渲染方法中,您可以手动绑定缩略图的操作,在您的情况下,有一个正则表达式检查图像文件 src 是否包含单词decorative,如果它包含returns null 在onClick 事件处理程序,否则将打开图像。

LE

我已经修改了第一个示例以满足您的需求...

import React, { Component } from 'react';
import Lightbox from 'react-lightbox-component';

class LightBoxTest extends Component {
  constructor(props) {
    super(props);
    this.state = {
      images: [
        {
          src: '../images/pic_01.jpg'
        },
        {
          src: '../images/pic_02.jpg'
        },
        {
          src: '../images/pic_03.jpg'
        }
      ]
    }
  }

  render() {
    const { images } = this.state;
    return (
      <div style={{ display: 'flex', flexDirection:'row' }}>
        <div>
          <Lightbox
            images={images}
            thumbnailWidth='150px'
            thumbnailHeight='150px'
          />
        </div>
        <div>
          <img src="../images/decorative_pic.jpg" style={{ width: '150px', height: '150px' }} />
          <img src="../images/decorative_pic.jpg" style={{ width: '150px', height: '150px' }} />
          <img src="../images/decorative_pic.jpg" style={{ width: '150px', height: '150px' }} />
        </div>
      </div>
    )
  }
}

export default LightBoxTest;

【讨论】:

  • 谢谢您,我会尝试实施您的解决方案,然后我会回来将您的答案标记为正确或提出其他问题
  • 它根本不起作用。它只阻止了装饰图像的点击。我之前用这些 css 规则解决了这个问题: img[src*='decorative']{ cursor:default;指针事件:无; } 但您的解决方案是继续显示放大的装饰图像
  • 我明白你现在想要做什么。但我不认为这个插件是正确的,因为你不能禁用特定图像的nextprev 操作...
  • 如果你想要和那个一样的精确布局,但有 6 张图片,我仍然会使用 Lightbox 仅用于那些可以工作的图片,其余的我会使用普通的 &lt;img&gt; 和相同的 @987654329 @props 与 thumbnails 一样,因此它们在 style 中看起来都一样,但装饰性的没有任何行为
  • 答案基于您的初始代码。我猜不出您还有什么其他代码..您可以根据需要调整答案。但是在组件的普通版本中,代码可以工作......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-17
相关资源
最近更新 更多