<h1 align=center>
  <img width="800" alt="Flicking Logo" src="https://naver.github.io/egjs-flicking/images/flicking.svg"><br/>
  <a href="https://naver.github.io/egjs-flicking/">@egjs/flicking</a>
</h1>

<p align=center style="line-height: 2;">
  <a href="https://www.npmjs.com/package/@egjs/flicking" target="_blank"><img src="https://img.shields.io/npm/v/@egjs/flicking.svg?style=flat-square&color=007acc&label=version&logo=NPM" alt="version" /></a>
  <a href="https://www.npmjs.com/package/@egjs/flicking" target="_blank"><img alt="npm bundle size (scoped)" src="https://img.shields.io/bundlephobia/minzip/@egjs/flicking.svg?style=flat-square&label=%F0%9F%92%BE%20gzipped&color=007acc"></a>
  <a href="https://travis-ci.org/naver/egjs-flicking" target="_blank"><img alt="Travis (.org)" src="https://img.shields.io/travis/naver/egjs-flicking.svg?style=flat-square&label=build&logo=travis%20ci" /></a>
  <a href="https://coveralls.io/github/naver/egjs-flicking?branch=master&style=flat-square" target="_blank"><img alt="Coveralls github" src="https://img.shields.io/coveralls/github/naver/egjs-flicking.svg?style=flat-square&label=%E2%9C%85%20coverage"></a>
  <a href="https://github.com/naver/egjs-flicking/graphs/commit-activity">
<img alt="GitHub commit activity" src="https://img.shields.io/github/commit-activity/m/naver/egjs-flicking.svg?color=08CE5D&label=%E2%AC%86%20commits&style=flat-square"></a>
  <a href="https://www.npmjs.com/package/@egjs/flicking" target="_blank"><img src="https://img.shields.io/npm/dm/@egjs/flicking.svg?style=flat-square&label=%E2%AC%87%20downloads&color=08CE5D" alt="npm downloads per month"></a>
  <a href="https://github.com/naver/egjs-flicking/graphs/contributors" target="_blank"><img alt="GitHub contributors" src="https://img.shields.io/github/contributors/naver/egjs-flicking.svg?label=%F0%9F%91%A5%20contributors&style=flat-square&color=08CE5D"></a>
  <a href="https://github.com/naver/egjs-flicking/blob/master/LICENSE" target="_blank"><img alt="GitHub" src="https://img.shields.io/github/license/naver/egjs-flicking.svg?style=flat-square&label=%F0%9F%93%9C%20license&color=08CE5D"></a>
  <a href="https://github.com/naver/egjs-flicking/blob/master/packages/ngx-flicking/README.md" target="_blank"><img alt="Angular" src="https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&logo=Angular&color=dd0031"></a>
  <a href="https://github.com/naver/egjs-flicking/blob/master/packages/react-flicking/README.md" target="_blank"><img alt="React" src="https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&logo=React&logoColor=white&color=61dafb"></a>
  <a href="https://github.com/naver/egjs-flicking/blob/master/packages/vue-flicking/README.md" target="_blank"><img alt="Vue" src="https://img.shields.io/static/v1.svg?label=&message=Vue&style=flat-square&logo=Vue.js&logoColor=white&color=42b883"></a>
<img src="https://img.shields.io/static/v1.svg?label=&message=TypeScript&color=294E80&style=flat-square&logo=typescript">
<a href="https://deepscan.io/dashboard#view=project&tid=3998&pid=5802&bid=46086"><img src="https://deepscan.io/api/teams/3998/projects/5802/branches/46086/badge/grade.svg" alt="DeepScan grade"></a>
</p>

<h3 align=center>
  <a href="https://naver.github.io/egjs-flicking/">데모</a> / <a href="https://naver.github.io/egjs-flicking/release/latest/doc/index.html">API 문서</a> / <a href="https://naver.github.io/egjs/"><img height="20" src="https://naver.github.io/egjs/img/logo.svg"/> 다른 컴포넌트들</a>
</h3>

<p align=center>
  <b>매일 3천만명이 사용하는 믿을 수 있는, 유연한, 그리고 확장 가능한 캐로셀 컴포넌트</b><br>📱💻🖥
</p>

<p align=center>
  Translations:
  <a href="https://github.com/naver/egjs-flicking/blob/master/README.md">🇺🇸</a>
  <a href="https://github.com/naver/egjs-flicking/blob/master/README_KR.md">🇰🇷</a>
</p>
<p align=center>
  <b>지원하는 프레임워크들</b><br/>
  <a href="https://github.com/naver/egjs-flicking/blob/master/packages/ngx-flicking/README.md"><img width="45" src="https://naver.github.io/egjs-flicking/images/angular.svg" alt="AngularJS" /></a>&nbsp;&nbsp;
  <a href="https://github.com/naver/egjs-flicking/blob/master/packages/react-flicking/README.md"><img width="45" src="https://naver.github.io/egjs-flicking/images/react.svg" alt="React" /></a>&nbsp;&nbsp;
  <a href="https://github.com/naver/egjs-flicking/blob/master/packages/vue-flicking/README.md"><img width="45" src="https://naver.github.io/egjs-flicking/images/vue.svg" alt="Vue.js" /></a>
</p>

-----
<table style="table-layout: fixed; overflow-wrap: break-word;">
  <tbody>
    <tr>
      <td><a href="https://codepen.io/egjs/pen/vqYyPO" target="_blank"><img width="240" src="https://user-images.githubusercontent.com/26213435/59833703-a2a07600-9381-11e9-8d3e-b1d2af8b1b96.gif" alt="iPhone demo" style="max-width: 100%;" /></a></td>
      <td><a href="https://codepen.io/woodneck/pen/ydNvYy" target="_blank"><img width="240" src="https://user-images.githubusercontent.com/26213435/59832836-cf538e00-937f-11e9-9e65-ec43c1bde5de.gif" alt="Music app demo" style="max-width: 100%;" /></a></td>
      <td rowspan="2" style="vertical-align: middle;"><a href="https://codepen.io/egjs/full/MMYQRE" target="_blank"><img width="480" src="https://user-images.githubusercontent.com/26213435/59832834-cf538e00-937f-11e9-8f3a-97e806bb37b1.gif" alt="Full page demo" style="max-width: 100%;" /></a></td>
    </tr>
    <tr>
      <td colspan="2"><a href="https://codepen.io/egjs/pen/vqYjrr" target="_blank"><img width="480" src="https://user-images.githubusercontent.com/26213435/59832835-cf538e00-937f-11e9-99a5-10f24da4c242.gif" alt="Parallax demo" style="max-width: 100%;" /></a></td>
    </tr>
    <tr>
      <td colspan="3"><a href="https://codepen.io/woodneck/pen/agoWOj" target="_blank"><img width="960" src="https://user-images.githubusercontent.com/26213435/59832832-cebaf780-937f-11e9-883c-06ba3890ec16.gif" alt="Cabinet demo" style="max-width: 100%;" /></a></td>
    </tr>
  </tbody>
</table>
<h6 align=center>
  🖱️각 이미지를 클릭해서 소스를 확인하거나 <a href="https://naver.github.io/egjs-flicking/">다른 데모들</a>을 확인해보세요.
</h6>

<p align=center>
  <img width="300" src="https://user-images.githubusercontent.com/26213435/59832831-cebaf780-937f-11e9-84cd-e21f8cf1fd07.gif" />
</p>

- 사용하기 쉬우면서도 뛰어난 성능의 무한 캐로셀을 지원합니다.
  - 3가지 [옵션](https://naver.github.io/egjs-flicking/release/latest/doc/eg.Flicking.html#.FlickingOptions)들(`renderOnlyVisible`, `isEqualSize`, `isConstantSize`)을 이용하여 더욱 뛰어난 성능을 얻을 수 있습니다.
- 모든 옵션을 결합하여 사용 가능합니다.
  - 옵션들이 상호배타적인 경우를 제외합니다 (`circular`와 `bound` 같은 경우).
- 다양한 스크롤 동작 방식을 제공합니다.
- 쉽고 빠르게 적용 가능한 플러그인들을 제공합니다.
- 주요 프레임워크들을 지원합니다 (Angular, React, Vue).

## ⚙️ 설치방법
### npm
```bash
$ npm install --save @egjs/flicking
```

#### CDN
- jsDelivr: https://cdn.jsdelivr.net/npm/@egjs/flicking/dist/
- unpkg: https://unpkg.com/@egjs/flicking/dist/
- cdnjs: https://cdnjs.com/libraries/egjs-flicking

## 🏃 시작하기
#### Typescript
```ts
import Flicking from "@egjs/flicking";

const flicking = new Flicking("#el", { circular: true });
```

#### Browser
```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/egjs-flicking/3.x.x/flicking.js"></script>
```
```js
var flicking = new eg.Flicking("#el", { circular: true });
```

#### DOM 구조에 대해
⚠️ NOTICE: 플리킹을 올바르게 초기화하기 위해서 최소한의 구조가 필요합니다.

플리킹이 패널들에 `position: absolute`를 설정하기 때문에, 래퍼 엘리먼트나 패널에 고정된 높이값을 설정해주셔야만 합니다.

✅
```html
<div id="wrapper" style="height: 120px">
  <div class="panel"></div>
  <div class="panel"></div>
  <div class="panel"></div>
</div>
```
```html
<div id="wrapper">
  <!-- 적어도 하나의 패널이 고정된 크기를 가지고 있어야 합니다 -->
  <div class="panel" style="height: 120px;"></div>
  <div class="panel"></div>
  <div class="panel"></div>
</div>
```

❌
```html
<div id="wrapper"> <!-- 래퍼 크기가 패널 크기에 종속적인 상황입니다 -->
  <div class="panel" style="height: 100%;"></div>
  <div class="panel" style="height: 100%;"></div>
  <div class="panel" style="height: 100%;"></div>
</div>
```

#### 사용자 지표의 수집

Flicking 은 Google Analytics(GA) 를 통해 사용자가 어떤 기능들을 유용하게 활용하고 있는지 지표를 수집하고 있습니다. 예를 들어 `freeScroll` 옵션의 사용 유무 혹은 `gap` 옵션의 수치 값이 수집 지표에 해당합니다. GA 를 통해 수집하는 지표는 오직 사용 통계만을 수집하며 더 좋은 제품을 만들기 위한 기준 지표로 활용될 예정입니다. 또한 수집 지표는 개인을 식별할 수 있는 어떠한 정보도 포함하고 있지 않습니다. GA 를 비활성화 하기 위해서는 다음과 같이 `collectStatistics` 옵션을 `false` 로 설정합니다.

```js
var flicking = new eg.Flicking("#el", { collectStatistics: false });
```

## 📦 관련 패키지
|Package|Version|Description|
|:-----:|:-----:|:-----:|
|[**@egjs/flicking-plugins**](https://github.com/naver/egjs-flicking-plugins)|<a href="https://www.npmjs.com/package/@egjs/flicking-plugins" target="_blank"><img src="https://img.shields.io/npm/v/@egjs/flicking-plugins.svg?style=flat-square&color=007acc&label=%F0%9F%94%96" alt="version" /></a>|쉽게 붙여쓸 수 있는 캐로셀 효과 모음|
|[**@egjs/ngx-flicking**](https://github.com/naver/egjs-flicking/blob/master/packages/ngx-flicking/README.md)|<a href="https://www.npmjs.com/package/@egjs/ngx-flicking" target="_blank"><img src="https://img.shields.io/npm/v/@egjs/ngx-flicking.svg?style=flat-square&color=b52e31&label=%F0%9F%94%96" alt="version" /></a>|<img width="15" src="https://naver.github.io/egjs-flicking/images/angular.svg" valign="middle" alt="Angular" /> [Angular](https://angular.io/) 버젼의 @egjs/flicking|
|[**@egjs/react-flicking**](https://github.com/naver/egjs-flicking/blob/master/packages/react-flicking/README.md)|<a href="https://www.npmjs.com/package/@egjs/react-flicking" target="_blank"><img src="https://img.shields.io/npm/v/@egjs/react-flicking.svg?style=flat-square&color=00d8ff&label=%F0%9F%94%96" alt="version" /></a>|<img width="15" src="https://naver.github.io/egjs-flicking/images/react.svg" valign="middle" alt="React" /> [React](https://reactjs.org/) 버젼의 @egjs/flicking|
|[**@egjs/vue-flicking**](https://github.com/naver/egjs-flicking/blob/master/packages/vue-flicking/README.md)|<a href="https://www.npmjs.com/package/@egjs/vue-flicking" target="_blank"><img src="https://img.shields.io/npm/v/@egjs/vue-flicking.svg?style=flat-square&color=42b883&label=%F0%9F%94%96" alt="version" /></a>|<img width="15" src="https://naver.github.io/egjs-flicking/images/vue.svg" valign="middle" alt="Vue.js" /> [Vue.js](https://vuejs.org/v2/guide/index.html) 버젼의 @egjs/flicking|

## 🌐 지원 브라우저
|<img width="20" src="https://simpleicons.org/icons/internetexplorer.svg" alt="Internet Explorer" />|<img width="20" src="https://simpleicons.org/icons/googlechrome.svg" alt="Chrome" />|<img width="20" src="https://simpleicons.org/icons/mozillafirefox.svg" alt="Firefox" />|<img width="20" src="https://simpleicons.org/icons/safari.svg" alt="Safari" />|<img width="20" src="https://simpleicons.org/icons/apple.svg" alt="iOS" />|<img width="20" src="https://simpleicons.org/icons/android.svg" alt="Android">|
|:---:|:---:|:---:|:---:|:---:|:---:|
|10+|Latest|Latest|Latest|7+|4+|

## 📼 데모
[데모](https://naver.github.io/egjs-flicking/) 페이지를 확인해보세요!

## 📖 문서
[API 문서](https://naver.github.io/egjs-flicking/release/latest/doc/index.html) 페이지를 확인해보세요!

## 🙌 기여하기
[CONTRIBUTING.md](https://github.com/naver/egjs-flicking/blob/master/CONTRIBUTING.md)를 확인해보세요!

## 📝 피드백
[이슈](https://github.com/naver/egjs-flicking/issues)를 남겨주세요!

## 🛣️ 로드맵
저희 [로드맵](https://github.com/naver/egjs-flicking/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%F0%9F%9B%A3%EF%B8%8FRoadmap+)을 확인해보세요!

## 📜 라이센스
egjs-flicking은 [MIT license](https://github.com/naver/egjs-flicking/blob/master/LICENSE) 하에 배포됩니다.

```
Copyright (c) 2015-present NAVER Corp.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
```

<p align=center>
  <a href="https://naver.github.io/egjs/"><img height="50" src="https://naver.github.io/egjs/img/logotype1_black.svg" ></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://github.com/naver"><img height="50" src="https://naver.github.io/OpenSourceGuide/book/assets/naver_logo.png" /></a>
</p>
