ホームページ > ウェブフロントエンド > jsチュートリアル > ObservableTypes を使用した CSS クラスを使用しないドラッグ&#n&#ドロップ

ObservableTypes を使用した CSS クラスを使用しないドラッグ&#n&#ドロップ

Mary-Kate Olsen
リリース: 2024-11-09 07:07:02
オリジナル
357 人が閲覧しました

Drag

多くの UI ライブラリと CSS フレームワークは、CSS クラスを利用して特別な機能を有効にするために使用されていました。これは、jQuery プラグインの時代に特に流行していました。

非常に人気のある選択肢であるにもかかわらず、これは間違いなくプログラミングのアンチパターンです。

今日はいくつかの代替方法があります。機能反応性ランドからのアプローチの 1 つは、既存の要素に機能を単に「マージ」することを可能にします。 CSS クラスや ID 属性の悪用はありません。

自由に追加または削除できる別の再利用可能なモジュールを使用して、HTML リストでドラッグ アンド ドロップを有効にするとします。

  <ul ...${Sortable({onOrderChange: todoList.move})}>
    <li>item 1</li>
    <li>item 2</li>
    <li>item 3</li>
    <li>item 4</li>
    <li>item 5</li>
  </ul>
ログイン後にコピー

Sortable は、Mixin として知られるもので実装される予定です。これが行うことは、属性、スタイル、クラス、イベント ハンドラーをいわゆる「DOM オブジェクト」にエクスポートすることです。そこに含まれるものはすべて、ターゲット要素にマージされます。

// sortable.ts
import { Subject, map, withLatestFrom } from 'rxjs';

export const Sortable = ({ onOrderChange }) => {
  const dragStart = new Subject<HTMLLIElement>();
  const drop = new Subject<HTMLLIElement>();

  drop.pipe(
    withLatestFrom(dragStart),
    map(([dropEvt, dragEvt]) => {
      const list = [...dragEvt.target.closest('ol,ul').children];
      return [ list.indexOf(dragEvt.target), list.indexOf(dropEvt.target.closest('li')) ]
    }),
  ).subscribe(([src, dst])=>onOrderChange(src, dst));

  // Export a DOM Object for a framework or UI library
  // to take care of and merge into the target element
  return {
    ondragstart: dragStart,
    ondragover: e=>e.preventDefault(),
    ondrop: drop,
  };
};
ログイン後にコピー

最終的なアプリケーション コードは次のようになります:

import { rml } from 'rimmel';

const List = () => {

  return rml`
      <ul ...${Sortable({onOrderChange: todoList.move})}>
        <li>item 1</li>
        <li>item 2</li>
        <li>item 3</li>
        <li>item 4</li>
        <li>item 5</li>
      </ul>
  `;
}
ログイン後にコピー

ここで完全に動作する例を試してみましょう:

以上がObservableTypes を使用した CSS クラスを使用しないドラッグ&#n&#ドロップの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート