レコード スクロール 固定

レコード内のフィールドをスクロール固定する方法をご教授お願いします。 レコード表示をした際に 顧客の名前を入れた文字1行フィールドスクロールしても常に上に表示されるようにしたい。 例えばエクセルの画面固定のようにレコード内フィルドを行いたい。

以下で近いことが可能かと思います。途中まで通常通り表示されますが、スクロールした際に画面上部へ残るようになっています。グループ内にあるフィールドには適用できず、同じ行のフィールド全てが対象になっています。

4行目のstickyFieldにはコンソールツール等から確認できる、フィールドに割り振られている番号(Chromeであれば対象のフィールドを右クリックして検証を選択すれば「field-*****」と記載されています)を入力して下さい。

positionをstickyからfixedに変えればスクロール状態に関わらず常に固定させることができますが、スクロールの状態を監視して、という処理を追加する必要があるでしょう。topはお好みで調整して下さい。

(function() {
  'use strict';

let stickyField = ''; //フィールドに割り振られている番号

  kintone.events.on([
    'app.record.detail.show', 'app.record.create.show', 'app.record.edit.show'
  ], (event) => {
    let fieldElement = document.getElementsByClassName('field-' + stickyField)[0];
    let parentRow = fieldElement.parentNode;

    parentRow.style.position = 'sticky';
    parentRow.style.top = '130px';
    parentRow.style.zIndex = '10';
    parentRow.style.backgroundColor = '#F5F5F5';

    return event;
  });
})();

@mls-hashimoto様
ありがとうございます!
業務が効率化され助かりました。

教え頂いたうえにさらにさらに質問申し訳ないのですが…
一文字フィールドの隣にスペースIDで設定した
ボタンがあるのですが…
ボタンも一緒上部に固定したいのですが、
お教え頂いたジャバスクリプトをspaceIDに書き換えても動きませんでした。

お教えいただけると幸いです。
よろしくおねがいします。

https://developer.cybozu.io/hc/ja/community/posts/6549327894169/comments/6628283873049

n さま

そのフィールドと同じ行にあるのであればフィールドと一緒に固定されるはず(フィールドまたはスペースの親要素である行にposition:relativeが適用されているのをstickyに変更しているため)ですが、スペースの場合はkintoneで用意されているgetSpaceElementが使えます。
その場合、parentNodeがもう一つ必要です。

(function() {
  'use strict';

  let stickySpace = ''; //スペースID

  kintone.events.on([
    'app.record.detail.show', 'app.record.create.show', 'app.record.edit.show'
  ], (event) => {
    let spaceElement = kintone.app.record.getSpaceElement(stickySpace);
    let parentRow = spaceElement.parentNode.parentNode;

    parentRow.style.position = 'sticky';
    parentRow.style.top = '130px';
    parentRow.style.zIndex = '10';
    parentRow.style.backgroundColor = '#F5F5F5';

    return event;
  });
})();

@mls-hashimoto様
ありがとうございます。
これがしたかったんです!
無事にフィールドもスペースボタンもスクロール時の固定ができました。
お教え頂きありがとうございました!

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。