kintone に紙吹雪を降らせよう！

[kintone Advent Calendar 2019](https://qiita.com/advent-calendar/2019/kintone) 14日目の記事です。
## はじめに
kintoneで案件管理やタスク管理をしている方は多いのではないでしょうか？
タスクが完了したときや、案件が受注できた時、達成感味わいたくないですか？(((突然)))

そんな方のために、
レコードのステータスが完了になったらレコード詳細画面に紙吹雪をふらせてお祝いしてくれるカスタマイズをしてみました🎊
## アプリの準備
アプリストアから「案件管理」アプリを追加しましょう。
「プロセス管理有効にする」に☑するのをお忘れずに！
![プロセス管理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214243/d479d68b-2e22-ee9f-f083-89502b36d2d0.png)
## カスタマイズ
紙吹雪が舞う処理は[Snowfall](https://github.com/loktar00/JQuery-Snowfall)というライブラリを使っています。
Githubからソースコードをダウンロードします。
### snowfall.jquery.js
デフォルトの設定だと、

- 画像が複数設定できない
- 画像は回転しない  
と少し味気ないので、少し「snowfall.jquery.js」に変更を加えます。

####1. 画像を複数指定する
##### 変更部分
// Snow flake object の上あたりに以下のコードを追加します。

```snowfall.jquery.js
function randArray(_str) {
  var i = _str.length;
  while (i) {
    var y = Math.floor(Math.random() * i);
    var t = _str[--i];
    _str[i] = _str[y];
    _str[y] = t;
  }
  return _str;
}

// Snow flake object
```
そして、以下の部分を変更します。
###### 変更前

```snowfall.jquery.js
if (options.image) {
  flakeMarkup = document.createElement("img");
  flakeMarkup.src = options.image; //←この行を変更
} else {
  flakeMarkup = document.createElement("div");
  $(flakeMarkup).css({ background: options.flakeColor });
}
```
###### 変更後
```snowfall.jquery.js
if (options.image){
  flakeMarkup = document.createElement("img");
  flakeMarkup.src = options.image[random(0,options.image.length-1)]; //←この行を変更
}else{
  flakeMarkup = document.createElement("div");
  $(flakeMarkup).css({'background' : options.flakeColor});
}
```

####2. 画像を回転させる

##### 変更部分
snowfall.jquery.jsの中で、位置を決めているのは以下部分です。
###### 変更前
```snowfall.jquery.js
// Update function, used to update the snow flakes, and checks current snowflake against bounds
this.update = function(){
    this.y += this.speed;

    if (this.y > (elHeight) - (this.size  + 6)){
        this.reset();
    }

    this.element.style.top = this.y + 'px';
    this.element.style.left = this.x + 'px';
```
以下の2行を追加します。

```.js
this.element.style.transform = 'rotateY('+(this.x+this.y)%360 + 'deg)'; //←この行を追加
this.element.style.transform = 'rotateX('+(this.x+this.y)%360 + 'deg)'; //←この行を追加
```

###### 変更後
```snowfall.jquery.js
// Update function, used to update the snow flakes, and checks current snowflake against bounds
this.update = function(){
    this.y += this.speed;

    if (this.y > (elHeight) - (this.size  + 6)){
        this.reset();
    }

    this.element.style.top = this.y + 'px';
    this.element.style.left = this.x + 'px';
    this.element.style.transform = 'rotateY('+(this.x+this.y)%360 + 'deg)'; //←この行を追加
    this.element.style.transform = 'rotateX('+(this.x+this.y)%360 + 'deg)'; //←この行を追加
```


### kintone
ステータスが「完了」になったときの処理を書きます。
Snowfallのオプションはお好みで変更してください。

```js:kamifubuki.js
(function() {
  "use strict";

  kintone.events.on("app.record.detail.process.proceed", function(event) {
    var status = event.nextStatus.value;
    if (status === "完了") {
      $(document).ready(function() {
        $(document).snowfall({
          // 紙吹雪の量
          flakeCount: 100,
          // z-indexの値
          flakeIndex: "888",
          // 最小サイズ
          minSize: 8,
          // // 最大サイズ
          maxSize: 10,
          // 最低速度
          minSpeed: 1,
          // 最高速度
          maxSpeed: 3,
          // 影をつける
          shadow: false,
          // 画像
          image: [
            // "画像へのパス"
          ]
        });
      });
    }

    return event;
  });
})();

```
### PC用のJavaScriptファイル
以下の3つを適用します。

- https://js.cybozu.com/jquery/3.4.1/jquery.min.js
- snowfall.jquery.js
- kamifubuki.js

![image06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214243/368f28bd-33a6-a17d-dae6-5682fe558417.png)


## 結果
ステータスを完了に進めると・・・
![kamifubuki.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214243/9f11422e-0f2f-8a5a-39f9-a120fc991886.gif)

わ～！　紙吹雪が降ってきました！
よくみると、星とかハートとかも散ってます
おめでとうございます 🥳🎊

## 終わりに
実用性はきっとあまりないですが、なんだか楽しい気分を味わえたのでいいのです！
[ポータル画面が表示された時のイベント](https://developer.cybozu.io/hc/ja/articles/360028785452)もありますし、kintoneのポータル画面に桜や落ち葉を降らせたりしても季節を感じられていいかも、と思いました。

## 参考サイト
- [ページに雪を降らせよう！『JQuery-Snowfall』の使い方](http://www.hp-stylelink.com/news/2014/10/20141007.php)
- [【jQuery】snowfallプラグインで複数画像対応](https://qiita.com//marchin13momo/items/d4d8b9ec8e63beedb829)
- [雪が舞うようなヒラヒラ落下するSnowfall jquery pluginを複数画像対応に改造](https://heppoko-room.net/archives/927#i-2)
- [【jQuery】snowfallプラグインをカスタマイズする](https://qiita.com/Namy/items/1326705d5f7f892231cc)