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 パッケージ スクリプトの例

推薦する

VMware ESXi 6.0 および仮想マシンのインストール チュートリアルの展開 (画像とテキスト)

社内には以前からアイドル状態だった、構成の整ったサーバーがあったので、EXSI 6.0 を使って複数...

MySQL可視化ツールNavicatへの接続方法

Navicatをインストールした後次のエラーが発生する場合があります: Client does no...

spring-boot と docker-java に基づいて Docker コンテナの動的な管理と監視を実装します [完全なソース コードのダウンロード付き]

Docker入門Docker はオープンソースのアプリケーション コンテナ エンジンです。従来の仮...

docker に openjdk をインストールして jar パッケージを実行する方法

画像をダウンロード docker プル openjdkデータボリュームの作成java_appデータボ...

CSS3は、Transformを使用して動く2D時計を作成します。

これでtransformコースは終了です。例を見てみましょう。transform transform...

DockerのTLS(SSL)証明書の有効期限の問題を解決する

問題現象: [root@localhost ~]# docker イメージをプル xxx.com.c...

Windows 64 ビットでの MySQL 8.0.13 のインストールと設定方法のグラフィック チュートリアル

この記事では、MySQL 8.0.13のインストールと設定のチュートリアルを参考までに紹介します。具...

ccs3に基づくタイムライン実装方法

Web プロジェクトでは、タイムライン コントロールをよく使用します。この記事では、項目ごとに展開で...

HTML チュートリアル: よく使われる HTML タグのコレクション (4)

関連記事:初心者が学ぶ HTML タグ (3)導入された HTML タグは、必ずしも XHTML 仕...

JavaScriptのvar let constの違いは何ですか?

目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...

Reactプロジェクトで画像を導入するいくつかの方法

imgタグは画像を導入しますreactは実際にはjsリーダー関数を介してページをレンダリングするため...

CentOS に Redis と MySQL をインストールする

1|0MySQL(MariaDB) 1|11. 説明MariaDB データベース管理システムは My...

ウェブデザインのグラフィック構成と組版機能の紹介

すべてには基礎が必要です。家を建てるには基礎が必要です。方程式を解くには、まず九九を覚える必要があり...

MySQL クエリのソートとクエリ集計関数の使用法の分析

この記事では、例を使用して、MySQL クエリのソート関数とクエリ集計関数の使用方法を説明します。ご...

HTML シンプルな Web フォーム作成例の紹介

<input> はユーザー情報を収集するために使用され、終了ステートメントはありません。...