728x90
반응형
flicking 버전이 4가 되면서 flicking의 css 효과로 제어 해야한다. 이전 버전에서는 flikcing이 보여지는 화면이 자동으로 이미지 하나씩만 보였지만 버전 4 이상이 되면서 css를 제어를 해야한다.
# flicking-viewport와 flicking-camera 는 css에서 class로 제어가 가능하다.(기본적으로 flicking component를 사용하면 제공됨)
flicking-viewport에서 overflow: hidden으로 내가 원하는 부분만 보여줄 수 있다.
.flicking-viewport {
overflow: hidden;
width: 97.23%;
}
.flicking-camera {
display: flex;
}
##code
import React, { useRef, useState } from "react";
import Flicking from "@egjs/react-flicking";
import arrow_right from "./image/arrow_right.png";
import image1 from "./image/giphy.gif";
import image2 from "./image/heart.png";
import image3 from "./image/unheart.png";
import "./App.css";
function App() {
const flickingRef = useRef();
const [diabled, setDisalbed] = useState<boolean>(false);
const onClick = (e: React.MouseEvent<HTMLButtonElement>) => {
e.preventDefault();
setDisalbed(true);
if (flickingRef) {
//@ts-ignore
flickingRef.current.next();
}
setTimeout(() => {
setDisalbed(false);
}, 500);
};
return (
<div className="galleryImageContainer">
<Flicking
autoResize={true}
align={"prev"}
defaultIndex={0}
duration={300}
circularFallback={"bound"}
circular={true}
//@ts-ignore
ref={flickingRef}
>
<div className="galleryImageBox">
<img className="galleryImage" src={image1} alt="" />
</div>
<div className="galleryImageBox">
<img className="galleryImage" src={image2} alt="" />
</div>
<div className="galleryImageBox">
<img className="galleryImage" src={image3} alt="" />
</div>
</Flicking>
<button
className="galleryArrowButton"
onClick={onClick}
disabled={diabled}
>
<img className="galleryArrowImage" src={arrow_right} alt={""} />
</button>
</div>
);
}
export default App;
##CSS 파일
.galleryImageContainer {
width: 370px;
margin-bottom: 15px;
display: flex;
justify-content: center;
position: relative;
}
.galleryBox {
background-color: #fafafa;
border-radius: 10px;
padding: 30px;
position: relative;
min-width: 370px;
}
.flicking-viewport {
overflow: hidden;
width: 97.23%;
}
.flicking-camera {
display: flex;
}
.galleryImageBox {
min-width: 350px;
max-width: 350px;
height: 350px;
margin-right: 15px;
}
.galleryImage {
width: 100%;
height: 100%;
}
.galleryArrowButton {
border: none;
background-color: transparent;
padding: 0;
width: 24px;
height: 24px;
position: absolute;
top: 163.23px;
right: -30px;
cursor: pointer;
}
.galleryArrowImage {
width: 100%;
height: 100%;
}
##동작화면
728x90
반응형
'Coding > React' 카테고리의 다른 글
React - material ui input element error (0) | 2022.04.14 |
---|---|
React Native - While trying to resolve module `@apollo/client` from file (0) | 2022.04.02 |
React - flicking(version >= ^4.0.0) 바뀐점 정리 (0) | 2022.03.01 |
React - BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default (0) | 2022.02.28 |