CRUD Lab. Tech Blog

ギークス株式会社の沖縄開発拠点CRUDLab. (クラッドラボ)のIT技術(テック)ブログ。kintoneやAngularJSによる開発を行っています。

【kintone】jquery_knobを使ってダイアルのようなUIを実装する

f:id:crud_lab:20160217130127p:plain

0. 目次

1. 概要

ギークス株式会社CRUD Lab.のKUNISADAです! jQueryを使ったcanvasベースのUIライブラリ jQuery Knobを使ってkintone上にダイアル(ノブ)のようなUIを実装してみます。

anthonyterrien.com

GitHub - aterrien/jQuery-Knob: Nice, downward compatible, touchable, jQuery dial

2. 完成イメージ

ボリュームとトーンの値をダイアルを回して変更、保存することを目標とします。

http://f.hatena.ne.jp/crud_lab/20160126184747f:id:crud_lab:20160126182927g:plain

3. フィールド

利用するフィールドとスペースを用意します。 スペースの中にjQuery_knobを使ってUIを実装します。

フィールド名 フィールドコード 初期値 その他
(スペース) volume_dial - -
(スペース) tone_dial - -
ボリューム volume 50 max 100 min 0
トーン tone 50 max 100 min 0

フォーム 2.png

4. javascript/CSSでカスタマイズ

アプリの設定の詳細設定、JavaScript/CSSでカスタマイズからCDNやライブラリを読み込む設定を行います。

JavaScript___CSSでカスタマイズ.png

kintoneでjQueryを利用する注意点についてはcybozu.com developer networkの以下のリンクが参考になります。 https://cybozudev.zendesk.com/hc/ja/articles/204695384-%E7%AC%AC12%E5%9B%9E-jQuery%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86

jQUery_knobは以下のファイルをダウンロードして、kintoneにアップロードします。

https://github.com/aterrien/jQuery-Knob/blob/master/dist/jquery.knob.min.js

今回はdial.jsでjavascriptの実装を行なっていきます。

5. javascriptの実装

jQuery(function($){
    'use strict';

    //初期値を50に設定
    var _volume = 50,
        _tone = 50;

    //レコードの詳細、追加、編集の際にダイアルUIを実装
    kintone.events.on(['app.record.create.show',
                        'app.record.edit.show',
                        'app.record.index.edit.show',
                        'app.record.detail.show'
                        ], function (event) {

        var rec        = event.record;
        
        //UIの実装
        var keys = ['volume', 'tone'];
        for (var key in keys) {
            var mySpaceFieldButton = document.createElement('input');
                mySpaceFieldButton.id = keys[key] + '_dial';
                mySpaceFieldButton.className = keys[key] + '_dial';
                mySpaceFieldButton.setAttribute('value', rec[keys[key]]['value']);
                kintone.app.record.getSpaceElement(keys[key] + '_dial').appendChild(mySpaceFieldButton);
        };

        $(function() {
            $(".volume_dial").knob({
                'width': 100,
                'height': 100,
                'displayPrevious': true,
                'step': 10,
                'release': function(v){
                    _volume = v;
                    console.info('volume changed to' + _volume);
                }
            });
        });
        $(function() {
            $(".tone_dial").knob({
                'width': 100,
                'height': 100,
                'displayPrevious': true,
                'step': 10,
                'release': function(v){
                    _tone = v;
                    console.info('tone changed to' + _tone);
                }
            });
        });

    });


    //保存時の処理実装 
   kintone.events.on(['app.record.create.submit',
                        'app.record.edit.submit',
                        'app.record.index.edit.submit'], function(event){

        var rec = event.record;

        rec['volume']['value'] = _volume;
        rec['tone']['value'] = _tone;

        return event;
    });
});

6. まとめ

kintoneでは便利なフィールドが用意されていますが、アイデア次第でより場面に適したUIを実装することも可能です。 上記の例ではvolumeとtoneのフィールドをそのまま表示させていますが、グループで囲み「system用」や 「管理者用」として通常時畳んでおけば利用者はダイアル部のみを使って作業を進めることができます。よりユーザーエクスペリエンスを意識した機能実装を進めていきたいところです。