Referance Code
import React from 'react';
import Images from './components/Images';
import './App.css';
function App() {
return (
<div className="App">
<Images />
</div>
);
}
export default App;
src/ components/Images.jsx
import React, { Component } from 'react';
import './Images.css';
import Img from './Img';
import LargeImage from './LargeImg';
class Images extends Component {
constructor(props) {
super(props)
this.state = {
imgLst: [
{
imgSrc: '../img/1.jpg',
title: 'Shayon Image One',
details: "Shayon Image One. This is image details <br/> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ex accusantium ut neque inventore voluptates, vitae maiores magnam corporis necessitatibus beatae."
},
{
imgSrc: '../img/2.jpg',
title: 'Shayon Imege Two',
details: "Shayon Imege Two. This is image details <br/> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ex accusantium ut neque inventore voluptates, vitae maiores magnam corporis necessitatibus beatae."
},
{
imgSrc: '../img/3.jpg',
title: 'Shayon Image Three',
details: "Shayon Image Three. This is image details <br/> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ex accusantium ut neque inventore voluptates, vitae maiores magnam corporis necessitatibus beatae."
},
{
imgSrc: '../img/4.jpg',
title: 'Shayon Image Four',
details: "Shayon Image Four. This is image details <br/> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ex accusantium ut neque inventore voluptates, vitae maiores magnam corporis necessitatibus beatae."
}
],
imgStyle: {
lrgImgConStyle: {
display: 'none'
},
imgListConStyle: {
display: 'flex'
}
},
lrgImg: {
imgSrc: '',
title: '',
details: ''
}
}
}
handleClick = (e) => {
console.log("this is working fine");
e.preventDefault();
if (this.state.imgStyle.imgListConStyle.display === 'flex') {
console.log("Large Image title: " + this.state.lrgImg.title);
this.setState({
imgStyle: {
lrgImgConStyle: {
display: 'block'
},
imgListConStyle: {
display: 'none'
}
},
});
Object.values(this.state.imgLst).forEach(element => {
console.log(element.imgSrc);
let sourceString = '..' + e.target.src.toString().slice(21);
console.log(sourceString);
if (element.imgSrc === sourceString) {
console.log("Source is matched");
console.log("Elelment title: " + element.title);
this.setState({
lrgImg: {
imgSrc: e.target.src,
title: element.title,
details: element.details
}
});
} else {
console.log("Source didn't match");
}
});
} else {
console.log("Something went wrong");
}
}
closeLargeImage = (e)=>{
e.preventDefault();
console.log("close button is working fine");
this.setState({
imgStyle: {
lrgImgConStyle: {
display: 'none'
},
imgListConStyle: {
display: 'flex'
}
},
});
}
buttonStyle = {
background: 'none',
border: 'none'
}
render() {
let imageItemList = this.state.imgLst.map(image => {
return (
<button onClick={this.handleClick} style={this.buttonStyle} key={image.imgSrc} ><Img src={image.imgSrc}></Img></button>
);
})
return (
<React.Fragment >
<div className="lg-img-con" style={this.state.imgStyle.lrgImgConStyle}>
<LargeImage closeButton={this.closeLargeImage} title={this.state.lrgImg.title} details={this.state.lrgImg.details} src={this.state.lrgImg.imgSrc}></LargeImage>
{/* <LargeImage title={this.state.lrgImg.title} details={this.state.lrgImg.details} src={this.state.lrgImg.imgSrc} > <LargeImage/> */}
</div>
<div className="wrapper" style={this.state.imgStyle.imgListConStyle}>
{imageItemList}
</div>
</React.Fragment>
);
}
}
export default Images;
src/ components/Img.jsx
import React, { Component } from 'react';
class Img extends Component {
constructor(props){
super(props);
}
render() {
return (
<div className="img-holder" >
<h3>Img Title {this.props.title}</h3>
<p>{this.props.details}</p>
<img src={this.props.src} alt=""/>
</div>
)
}
}
export default Img;
src/ components/LargeImg.jsx
import React, {Component} from 'react';
const LargeImg =(props)=>{
return(
<div className="lg-img-hldr">
<div className="top-bar">
<a href="#"><img onClick={props.closeButton} className="close-icon" src="../icon/close-svg.svg" alt=""/></a>
</div>
<img src={props.src} alt=""/>
<div className="bottom-bar">
<h3 className="title">{props.title}</h3>
<div className="descriptions">
{props.details}
{/* <div>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Officiis, quasi?</div> */}
</div>
</div>
</div>
);
}
export default LargeImg;
src/ components/Images.css
.wrapper{
display: flex;
justify-content: space-around;
flex-basis: 90%;
flex-wrap: wrap;
}
.img-holder{
width: 300px;
object-position: center;
}
.img-holder img{
cursor: pointer;
object-position: center;
object-fit: cover;
height: 150px;
width: 300px;
border: 6px solid white;
transition: all 1s ;
}
src/ public/icon/close-svg.svg
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 496 496" style="enable-background:new 0 0 496 496;" xml:space="preserve">
<g>
<g>
<g>
<path d="M248,0C111.033,0,0,111.033,0,248s111.033,248,248,248s248-111.033,248-248C495.841,111.099,384.901,0.159,248,0z
M248,480C119.87,480,16,376.13,16,248S119.87,16,248,16s232,103.87,232,232C479.859,376.072,376.072,479.859,248,480z"/>
<path d="M361.136,134.864c-3.124-3.123-8.188-3.123-11.312,0L248,236.688L146.176,134.864c-3.069-3.178-8.134-3.266-11.312-0.197
c-3.178,3.069-3.266,8.134-0.197,11.312c0.064,0.067,0.13,0.132,0.197,0.197L236.688,248L134.864,349.824
c-3.178,3.07-3.266,8.134-0.196,11.312c3.07,3.178,8.134,3.266,11.312,0.196c0.067-0.064,0.132-0.13,0.196-0.196L248,259.312
l101.824,101.824c3.178,3.07,8.242,2.982,11.312-0.196c2.995-3.1,2.995-8.016,0-11.116L259.312,248l101.824-101.824
C364.259,143.052,364.259,137.988,361.136,134.864z"/>
</g>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
YouTube Tutorial
VIDEO
Good work here but where is the code for "icon/close-svg.svg"? It is not in the description of the YouTube video as well.
ReplyDeleteCheck once again
Deletegithub profile link
ReplyDeleteGot a creative information. Understand well in this. This gives the easy technique of experiment. New technologies are developed more. so techniques are also improved. Thank you for this information.
ReplyDeleteHire Best ReactJS Developer - Inwizards LLC
Hire Best ReactJS Developer
Reactjs Native App Development
Hire Reactjs Developer
Reactjs Native App Development Company
Hire Reactjs Developers
Thank You!