Vueは不規則なスクリーンショットを実装する

Vueは不規則なスクリーンショットを実装する

これまで見てきたもののほとんどは通常のスクリーンショットであり、ほとんどのアプリケーション シナリオに対応できます。ただし、画像処理の場合、ルールをユーザーに引き渡す必要がある場合、通常のスクリーンショットではユーザーを満足させることはできません。では、フロントエンドで任意の定期的な画像キャプチャを実装できるでしょうか。一緒に話し合いましょう。

SVG による画像キャプチャ

SVGのclipPath画像タグを使用して、IDマッピングと動的位置ポリゴンの座標を通じて画像をキャプチャします。

    <div>
        <div class="content" @mousemove="mousemove" @mouseup="(e) => {mouseup(e);}">
          <!-- キャンバス表示 -->
          <svg
            ref="blackSvg"
            クラス="blackSvg"
            xmlns="http://www.w3.org/2000/svg"
            幅="300"
            高さ="300"
          >
            <定義>
              <clipPath id="クリップパス">
                <ポリゴン :points="ポイント"></ポリゴン>
              </クリップパス>
            </defs>
            <画像
              xmlns:link="http://www.w3.org/1999/xlink"
              href="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3228549874,2173006364&fm=26&gp=0.jpg" rel="外部nofollow" 
              幅="300"
              高さ="300"
              preserveAspectRatio="なし"
              スタイル="クリップパス: url(#clippath)"
            </画像>
          </svg>
          <!-- ポイントをドラッグ -->
          <ul class="インターセプション">
            <li
              v-for="4 内の項目"
              :ref="`li${item}`"
              :key="アイテム"
              @mousedown="(e) => {mousedown(e, 項目);}"
            </li>
          </ul>
          <!-- ベースマップの表示 -->
          <画像
            クラス="blackImge"
            src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3228549874,2173006364&fm=26&gp=0.jpg"
            代替案=""
          />
          <!-- マスクレイヤー-->
          <div class="blackDiv"></div>
    </div>
  </div>

CSS部分

<スタイル lang="sass">
.blackDiv
    幅: 100%
    高さ: 100%
    位置: 絶対
    トップ: 0
    Zインデックス: 2
    背景: rgba(0,0,0, 1)
。コンテンツ
    幅:300ピクセル
    高さ:300ピクセル
    テキスト配置: 左
    位置: 相対
    .blackSvg
        位置: 絶対
        トップ: 0
        Zインデックス: 3
    .black画像
        位置: 絶対
        トップ: 0
        残り: 0
        幅: 300ピクセル
        高さ: 300ピクセル
    。傍受
        リストスタイル: なし
        位置: 絶対
        トップ: 0
        マージン: 0
        パディング: 0
        Zインデックス: 3
        >リ
            位置: 絶対
            幅: 10ピクセル
            高さ: 10ピクセル
            背景: 青
            境界線の半径: 50%
            カーソル: ポインタ
            &:ホバー
                変換: スケール(1.2)
                遷移期間: .2
        >li:n番目の子(1)
            上: 10ピクセル
            左: 10ピクセル
        >li:n番目の子(2)
            上: 10ピクセル
            左: 100ピクセル
        >li:n番目の子(3)
            上: 100ピクセル
            左: 100ピクセル
        >li:n番目の子(4)
            上: 100ピクセル
            左: 10ピクセル
</スタイル>
<スクリプト>

エクスポートデフォルト{
  名前: 'キャンバス'、
  データ() {
    戻る {
      ポイント: '0 0,300 0,300 300,0 300', // 画像表示初期化ステータス: false,
      インデックス: 0,
      ディスX: 0,
      ディスY: 0,
      座標: { // ドラッグポイント1を初期化: [0, 0],
        2: [300, 0],
        3: [300, 300],
        4: [0, 300],
      },
    };
  },
  マウント() {
    this.$nextTick(() => {
      for (let key in this.coordinates) {
        const left = this.coordinates[key][0];
        const top = this.coordinates[key][1];
        this.$refs[`li${key}`].style.left = `${left}px`;
        this.$refs[`li${key}`].style.top = `${top}px`;
        (キー == 2 || キー == 3) の場合 {
          this.$refs[`li${key}`].style.left = `${left - 10}px`;
        }
        (キー == 3 || キー == 4) の場合 {
          this.$refs[`li${key}`].style.top = `${top - 10}px`;
        }
      }
      ドキュメント.onmouseup = () => {
        this.status = false;
      };
    });
  },
  メソッド: {
    //マウスダウン mousedown(e, index) {
      this.status = true;
      this.index = インデックス;
      this.disX = e.clientX - this.$refs[`li${index}`].offsetLeft;
      this.disY = e.clientY - this.$refs[`li${index}`].offsetTop;
    },
    // マウスアップ mouseup(e) {
      this.status = false;
    },
    //マウスの移動 mousemove(e) {
      if (this.status) {
        left = e.clientX - this.disX とします。
        top = e.clientY - this.disY とします。
        this.$refs[`li${this.index}`].style.left = `${left}px`;
        this.$refs[`li${this.index}`].style.top = `${top}px`;
        this.coordinates[this.index] = [左、上];
        const pointsArr = [];
        for (let item in this.coordinates) {
          ポイントArr.push(
            Array.from(this.coordinates[item], (e) => {
              e + 5 を返します。
            })
          );
        }
        this.points = pointsArr.join(' ');
      }
    },
  },
};

エフェクト画像表示

ソースコードアドレス

GitHub アドレス --> github.com/lgxin/captu…

以上がVueのイレギュラースクリーンショットの実装内容の詳細です。Vueのイレギュラースクリーンショットの詳細については、123WORDPRESS.COMの他の関連記事にも注目してください!

以下もご興味があるかもしれません:
  • Vueをベースにドラッグ効果を実現
  • Vue ベースのドラッグ アンド ドロップ機能を実装する
  • Vue.js でドラッグ アンド ドロップ効果を実装する例
  • Vue.js は画像のランダムドラッグを実装します
  • Vueはdivドラッグアンドドロップを実装します
  • Vue カスタム ディレクティブ ドラッグ関数の例
  • Vueのドラッグスクリーンショット機能を実装する簡単な方法

<<:  MySQLにおける静的変数の役割の詳細な説明

>>:  Linux 編集の開始、停止、再起動の Springboot jar パッケージ スクリプトの例

推薦する

MySQL 5.7 スレーブノードからマルチスレッド マスター スレーブ レプリケーションを構成する方法の詳細な説明

序文MySQL は MySQL 5.6 からマルチスレッド レプリケーションをサポートしていますが、...

MySQL8.0.18 複数マスターと 1 スレーブの構成

目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...

js を使用してネットワークカメラを呼び出し、一般的なエラーを処理します

最近、業務上の理由により、Web ページ上のさまざまなネットワーク カメラにアクセスしてデバッグする...

将来最も成功する企業はテクノロジー企業でしょうか、それともデザイン企業でしょうか?

ムーアの法則はもはや適用されない2004年にフレックストロニクスがフロッグデザインを買収したのを皮切...

nginxのデフォルトポートを変更する方法の詳細な説明

まず設定ファイルがどこにあるか調べる nginx.confはどこにありますかこれらのディレクトリを調...

CSS3 テキストアニメーション効果

効果 html <div class="sp-container">...

Linux CentOS 7.7 システムの VMware インストールに関する詳細なチュートリアル

Linux CentOS 7.7 システムを Vmware にインストールする方法。最小限のインスト...

表示しているページのスナップショットを Baidu が保存できないように設定する方法

今日、Baidu でページを検索したところ、ページが削除されていたため、当然 Baidu スナップシ...

HTML iframe で親ページと子ページ間の双方向メッセージングを実装する例

ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...

CSSのマッチング問題を解決する

問題の説明ご存知のとおり、CSS を記述する場合、HTML のクラスの定義または ID の定義に従っ...

MySQL の重要なパフォーマンス インデックスの計算と最適化方法の概要

1 QPS 計算 (1 秒あたりのクエリ数) MyISAMエンジンベースのDBの場合 MySQL&g...

HTML 挿入画像の例 (HTML 追加画像)

HTML に画像を挿入するには、画像を表示するための HTML タグが必要です。これは、img タ...

Tomcat 経由で JMX 監視を有効にする方法

シミュレーション環境を構築する:オペレーティングシステム: centos7メモリ: 1G 1.8.0...

HTML ハイパーリンク スタイル (4 つの異なる状態) の設定例

コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...

jQuery ベースのカレンダー効果

この記事では、カレンダー効果を実現するためのjQueryの具体的なコードを例として紹介します。具体的...