Vueモバイル端末は左スライド編集と削除の全プロセスを実現します

Vueモバイル端末は左スライド編集と削除の全プロセスを実現します

序文

プロジェクトのニーズに応じて、Vue-touch を使用して、vue モバイル端末の左スワイプ編集および削除機能を実装します。さっそく、効果図を最初に見てから、コードを見てみましょう。

方法は次のとおりです。

ステップ1: vue-touchをインストールする

npm をインストール vue-touch@next --save

ステップ2: main.jsにインポートする

'vue-touch' から VueTouch をインポートします。
Vue.use(VueTouch, {
  名前: 'v-touch'
});

ステップ3: 使用(v-touchを使用して、左にスワイプして削除するコンテンツをラップします)

<div class="wrap">
      <vタッチ
        スタイル="margin-bottom:10px"
        v-on:panstart="onPanStart(キー)"
        v-on:panmove="onPanMove"
        v-on:panend="onPanEnd"
        v-for="(リスト内の項目、キー)"
        :key="キー"
      >
  <!-- 下の div は、私のページで左にスワイプして削除する必要がある項目の内容です。独自のものに置き換えることができます -->
        <div class="item df_sb item-p" :style="activeId === key ? スワイプ : ''">
          <p class="left-img">
            <img :src="item.image_url" alt>
          </p>
          <p class="url" v-if="item.redirect_url != '' ">{{item.redirect_url}}</p>
          <p class="city nothave" v-else>なし</p>
          <p class="city">{{item.city}}</p>
          <div class="edit-delete df_sad" :ref="'editBtn' + キー">
            <div class="edit" @click="editFun('edit',item.id,item.image_url,item.redirect_url)">
              <img src="../../assets/images/adver/ic_xiugai.png" alt>
            </div>
            <p class="edit-line"></p>
            <div class="ad-delete" @click="deleteFun(key,item.id)">
              <img src="../../assets/images/adver/ic_shanchu.png" alt>
            </div>
          </div>
        </div>
      </v-タッチ>
    </div>

ステップ 4: 変数とメソッドを定義します。次のコードを直接コピーし、不要なものを削除して独自のものに置き換え、必要なものは保持することができます。

<スクリプト>
「../../http/httpApi」からhttpApiをインポートします。
エクスポートデフォルト{
  名前: ""、
  データ() {
    戻る {
      swipe: "", // スライド スタイル wd: 0, // 編集ボタンと削除ボタンの幅の合計 swipeWd: 0, // スライドした距離 activeId: "", // 実際には最後のアクティビティ ID
    //上記の4つの変数は保持する必要があり、次の3つは削除できます。ページ: 1、
      サイズ: 10,
      リスト: []
    };
  },
  メソッド: {
//リストデータをリクエストする getList($state) {
      params = new URLSearchParams();
      params.append("ページ", this.page);
      パラメータを追加します("サイズ", this.size);
      this.$post(httpApi.BANNERLIST、パラメータ)
        .then(res => {
          (res.code == 10000)の場合{
            (res.data)の場合{
              this.list = this.list.concat(res.data.list);
              this.page++;
              (res.data.list.length === 10)の場合{
                $state.loaded();
              } それ以外 {
                $state.complete();
              }
            } それ以外 {
              $state.complete();
            }
          } それ以外 {
            $state.complete();
          }
        })
        .catch(エラー => {
          コンソールログ(エラー);
        });
    },
    // 編集 editFun(type, image_id, image, url) {
      this.$router.push({
        パス: "/issueAdvertising",
      });
    },
    // 削除 deleteFun(index, image_id) {
      this.activeId = ""; // 最後のアクティビティ ID を空にします let params = new URLSearchParams();
      パラメータを追加します("agent_id", this.id);
      パラメータを追加します。
      this.$post(httpApi.DELETEBANNER、パラメータ)
        .then(res => {
          (res.code == 10000)の場合{
// インターフェースを削除するリクエストによりリスト内の項目の 1 つが削除されますが、ページにはまだ項目が残っているため、完璧になるようにローカル配列内の項目も削除する必要があります。次のコード行はより重要であり、インターフェースを正常に削除する場所に記述できます。this.list.splice(index, 1); 
            this.modal.toastFun("正常に削除されました");
          } そうでない場合 (res.code == 20000) {
            this.modal.toastFun(res.message);
          }
        })
        .catch(エラー => {});
    },
 
// 以下の 3 つのメソッドはすべて変更せずにコピーされます // スライド位置 onPanStart(id) {
      イベントをデフォルトにしない();
      // 右ボタンの幅を取得します。let str = "editBtn" + id;
      this.wd = 1.2 * this.$refs[str][0].offsetWidth;
      // 初期化 if (this.activeId != id) {
        this.swipe = "transform:translateX(0px)";
        this.swipeWd = 0;
      }
      this.activeId = id;
    },
//スライド位置 onPanMove(event) {
      イベントをデフォルトにしない();
      deltaX = event.deltaX; とします。
      // コンポーネントは最大距離まで左に移動します if (deltaX < 0 && deltaX > -this.wd) {
        //左にスライド this.swipe = "transform:translateX(" + deltaX + "px)";
        this.swipeWd = deltaX;
      }
 
      deltaX > 0 && deltaX <= this.wd && this.swipeWd < 0 の場合 {
        //右にスワイプ let wx = deltaX + this.swipeWd;
        this.swipe = "transform:translateX(" + wx + "px)";
      }
    },
 // 終了位置 onPanEnd(event) {
      イベントをデフォルトにしない();
      // 左に移動した距離が半分より大きいかどうかを判断します。let deltaX = event.deltaX;
      (デルタX < 0)の場合{
        (デルタX <= -this.wd / 2)の場合{
          // 半分以上左にスライドします this.swipe = "transform:translateX(" + -this.wd + "px)";
          this.swipeWd = -this.wd;
        } それ以外 {
          this.swipe = "transform:translateX(0px)";
          this.swipeWd = 0;
        }
      } それ以外 {
        (this.swipeWd < 0 && deltaX >= this.wd / 2)の場合{
          // 半分以上左にスライドします this.swipe = "transform:translateX(0px)";
          this.swipeWd = 0;
        } それ以外 {
          this.swipe = "transform:translateX(" + this.swipeWd + "px)";
        }
      }
    }
  },
 
};
</スクリプト>

スタイル

上記のコードのCSSスタイルのみを掲載しました。必要に応じて削除してください。必要なものは残し、不要なものは削除し、変更が必要な場合は自分で修正してください。

。包む {
  幅: 100%;
  高さ: 100%;
  オーバーフロー: 非表示;
}
。アイテム {
  左パディング: 40px;
  高さ: 120px;
  背景: #ffffff;
  アイテムの位置を中央揃えにします。
  flex-direction: 継承;
  .left-img {
    幅: 120ピクセル;
    高さ: 100px;
    オーバーフロー: 非表示;
    画像 {
      最小幅: 120px;
      高さ: 100px;
    }
  }
}
.url {
  幅: 400ピクセル;
  パディング: 10px 30px 0;
  ボックスのサイズ: 境界線ボックス;
  単語折り返し: 単語を区切る;
  テキスト配置: 中央;
  オーバーフロー: 非表示;
  テキストオーバーフロー: 省略記号;
  空白: ラップなし;
}
。市 {
  テキスト配置: 中央;
  最小幅: 100px;
}
.item-p {
  色: #333333;
  フォントサイズ: 22px;
}
.nothave {
  色: #999999;
}
.ヒント{
  高さ: 40px;
  アイテムの位置を中央揃えにします。
  下部マージン: 30px;
}
。ライン {
  幅: 250ピクセル;
  高さ: 1px;
  背景: #999999;
  不透明度: 0.5;
}
。アイテム {
  width: 120%; // 100%以上
  transition: 0.1s ease 0s; // トランジション効果}
.編集行 {
  幅: 2px;
  高さ: 80px;
  背景: rgba(255, 255, 255, 1);
}
.編集削除{
  幅: 160ピクセル;
  高さ: 100%;
  背景: rgba(255, 126, 34, 1);
  不透明度: 0.8;
  アイテムの位置を中央揃えにします。
}
。編集、
.ad-delete {
  画像 {
    幅: 42px;
    高さ: 42px;
  }
}
.add-btn {
  幅: 200ピクセル;
  高さ: 80px;
  背景: rgba(255, 126, 34, 1);
  ボックスの影: 0px 0px 5px 0px rgba(221, 221, 236, 1);
  境界線の半径: 40px;
  テキスト配置: 中央;
  行の高さ: 80px;
  色: #ffffff;
  フォントサイズ: 30px;
  位置: 固定;
  下位:8%
  左: 50%;
  変換: translateX(-50%);
}

要約する

必要に応じて、必要に応じて少し変更を加えることができます。非常に詳細に書かれています。これは、vueモバイル端末で左スワイプ編集と削除を実装するプロセス全体に関するこの記事の終わりです。より関連性の高いvue左スワイプ編集と削除コンテンツについては、123WORDPRESS.COMで以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も123WORDPRESS.COMを応援してください。

以下もご興味があるかもしれません:
  • Vue は QQ の左スワイプでコンポーネントを削除する機能を模倣します
  • VueはMint UIを使用して左スワイプ削除効果CellSwipeを実装します
  • Vue.js モバイル左スワイプ削除コンポーネント実装コード
  • vue2 をベースに左スワイプ削除機能を実装する
  • Vueを使用して、ソースコードでモバイル端末の左スワイプ削除効果を実装する
  • MpvueアプレットはQQの左スワイプを模倣して上部のコンポーネントを削除します
  • Vue 左スワイプ削除機能のサンプルコード
  • Vue プロジェクトは左スワイプ削除機能を実装します (完全なコード)

<<:  MySQL で指定した桁数の乱数を生成する方法と、バッチで乱数を生成する方法

>>:  Dockerイメージをインポートおよびエクスポートする方法

推薦する

Apache SkyWalkingのセルフモニタリングを素早く有効にする方法を説明します

1. Prometheusテレメトリデータを有効にするデフォルトでは、テレメトリは次のように無効にな...

ページング効果を実装するミニプログラム

この記事の例では、ページング効果表示を実現するためのミニプログラムの具体的なコードを参考までに共有し...

MySQL サーバーにおける SSD パフォーマンスの問題の詳細な分析とテスト

【質問】 HP サーバーを使用しています。SSD が IOPS 約 5000 を書き込むと、%uti...

docker を使用して crownblog プロジェクトを Alibaba Cloud にデプロイする方法

フロントエンドプロジェクトのパッケージ化.env.productionを見つけて、自分のIPまたはド...

HTML テーブル マークアップ チュートリアル (18): テーブル ヘッダー

<br />ヘッダーはテーブルの最初の行を参照します。ヘッダー内のテキストは中央揃えで太...

静的ページと動的ページの実行メカニズムの説明

1. 静的ページとは、Web ページ内に HTML タグのみが含まれるページです。WEB 開発者がこ...

Vue.js ソースコード解析のカスタム手順の詳細な説明

序文コア機能のデフォルトの組み込みディレクティブ (v-model および v-show) に加えて...

角度付き双方向バインディングの詳細な説明

目次双方向バインディングの原理ngモデルレンダリングカスタム双方向バインディングプロパティコンポーネ...

突然外部ネットワークからDockerにアクセスできなくなる問題の解決方法

マスターのメソッドによると、原因は sysctl net.ipv4.ip_forward であること...

クリックして認証コードと認証を切り替えるJavaScript

この記事では、クリックして切り替える認証コードと認証を実装するためのJavaScriptの具体的なコ...

protobuf の簡単な紹介と Ubuntu 16.04 環境でのインストールチュートリアル

protobufの簡単な紹介Protobuf は、Google のオープンソースのシリアル化プロトコ...

Linux/Mac MySQL パスワードを忘れた場合のパスワード変更コマンドラインメソッド

すべての前提条件にはルート権限が必要です1. MySQLプロセスを終了する //Linux sudo...

MySQL InnoDB のロック機構の詳細な説明

前面に書かれたデータベースは本質的に共有リソースであるため、同時アクセスのパフォーマンスを最大化する...

Linuxサーバ侵入緊急対応記録(概要)

最近、お客様から支援の依頼を受けました。管理されている通信コンピュータ ルームから、サーバーの 1 ...

TypeScript で時間を費やした場所の概要

TS で時間を過ごした場所をいくつか記録します。 (まず、文句を言わせてください。stackover...