eripusisu
Version:
Text truncation library
195 lines (134 loc) • 7.31 kB
Markdown
# Eripusisu
テキスト省略表示ライブラリ。
Text truncation library.
## 特長
- 指定行数より後のテキストを省略表示する
- 指定行数がリンクやリストの途中でも大丈夫
- 内容の一部が float していても大丈夫
- 省略文字列を指定可能(複数文字可)
- アクセシビリティに配慮
- RTL 言語サポート
## 動作例
[デモ Demo](https://tsmd.github.io/eripusisu/examples.html)
## インストール
### script 要素で読み込む
```html
<script src="https://unpkg.com/eripusisu@1.3.1/dist/eripusisu.umd.js"></script>
```
### npm パッケージを利用する
```
npm install --save Eripusisu
```
```js
var Eripusisu = require("eripusisu");
```
## 使いかた
次のような HTML を想定して解説しています。
```html
<div class="container">
<!-- 任意の省略対象の要素(群) -->
</div>
<button class="button">開閉</button>
<div class="container">
<!-- 任意の省略対象の要素(群) -->
</div>
<button class="button">開閉</button>
:
:
```
### シンプルな省略表示
省略表示をしたいコンテンツを含むコンテナー要素を取得し、`Eripusisu` コンストラクタ―の第1引数に渡します。第2引数には省略表示にする行数を指定します。
```js
// 省略表示をしたいコンテンツを含むコンテナー要素を取得する
var container = document.querySelector(".container");
// Eripusisu を実行する(3行で省略)
new Eripusisu(container, 3);
```
jQuery:
```js
new Eripusisu($container$(".container")[0], 3);
```
### クラス名から複数のコンテナーを省略表示
```js
// 省略表示をしたいコンテンツを含むコンテナー要素を取得する
var containers = document.querySelectorAll(".container");
// ループを利用して Eripusisu を実行する
for (var i = 0; i < containers.length; i += 1) {
new Eripusisu(containers[i], 3);
}
```
jQuery:
```js
$(".containers").each(function () {
new Eripusisu(this, 3);
})
```
### 開閉ボタン
第3引数の `toggleButton` プロパティに要素を渡すことで開閉ボタンが動作します。
```js
// 省略表示をしたいコンテンツを含むコンテナー要素を取得する
var container = document.querySelector(".container");
// ボタン要素を取得する
var button = document.querySelector(".button");
// Eripusisu を実行する
new Eripusisu(container, 3, { toggleButton: button });
```
jQuery:
```js
// 省略表示をしたいコンテンツを含むコンテナー要素を取得する
var container = document.querySelector(".container");
// ボタン要素を取得する
var button = document.querySelector(".button");
// Eripusisu を実行する
new Eripusisu(container, 3, { toggleButton: button });
```
### 幅の変化に追随させる
設計上、幅の変化には自動的に追随しません。必要があれば、`resize` イベントをハンドリングするなどして `refresh()` メソッドを呼び出します。
```js
var eripusisu = new Eripusisu(container, 3);
window.addEventListener("resize", function () {
eripusisu.refresh();
})
```
## API
### コンストラクタ
```js
new Eripusisu(container, lines, options);
```
| パラメーター | 必須 | 説明 |
| ------------ | :---: | ---------------------------------------------- |
| `container` | ✔ | 省略表示をしたいコンテンツを含むコンテナー要素 |
| `lines` | ✔ | 省略表示する行数 |
| `options` | | オプション。後述 |
#### オプション
`Eripusisu` コンストラクタは第3引数にオプションを受け取ります。
| オプション名 | 型 | 説明 |
| -------------- | ----------- | ------------------------------------------------------------------------------------------------- |
| `expanded` | boolean | 初期状態の開閉状態をあらわします。`true` にすると初期状態で開いた状態になります。初期値は `false` |
| `ellipsisText` | string | 省略をあらわす文字列。複数文字を指定することも可能です。初期値は `"…"` |
| `toggleButton` | HTMLElement | 開閉に使用するボタン。初期値は `undefined` |
| `rtl` | boolean | RTL 言語(右から左に記述する言語)のときに `true` にする。初期値は `false` |
### メソッド
| メソッド名 | 説明 |
| ---------- | ----------------------------------------------------------------------------------------------------------------- |
| `toggle` | 呼び出すごとに交互に開閉します。引数に boolean を渡すと開閉方向を指定できます。 |
| `expand` | 開きます。すでに開いている場合、何もしません。 |
| `collapse` | 閉じます。すでに閉じている場合、何もしません。 |
| `refresh` | 画面表示にあわせて省略位置を算出しなおします。画面や要素の大きさが変わったら `refresh` を呼び出す必要があります。 |
| `rebuild` | DOM の変化には自動的に追随しません。コンテナーに含まれる要素が変わったら `rebuild` を呼び出す必要があります。 |
### プロパティ
| プロパティ名 | 説明 |
|---------------------|---------------------------------------------------|
| `visuallyCollapsed` | 閉じているかどうかを表します。コンテンツが少なく閉じる必要がない場合は `false` を返します。 |
| `needsCollapse` | コンテンツを閉じる必要があるかどうかを返します。コンテンツ量に応じて変動します。 |
## イベント
| イベント名 | 説明 |
| ------------------ | ------------------------------------------------------------------------------------------------------------------ |
| `eripusisu-toggle` | 開閉状態がトグルされたときに発火します。<br />イベントオブジェクトの `detail` プロパティから開閉状態がわかります。 |
## サポートブラウザ
- 各種モダンブラウザ
- Internet Explorer 11
## 利用上の注意
最大限のパフォーマンスを発揮するように設計していますが、仕組み上、極めて軽快に動作するとは言えません。ページ内に多数の折りたたみ要素があるとユーザー体験を損ねる可能性があります。
## ライセンス License
MIT