JavaScript >> Javascript 文檔 >  >> JavaScript

如何使用 JavaScript 將副本添加到剪貼板按鈕

如何創建一個函數,在調用時接收一串文本以復製到用戶剪貼板。

開始使用

在本教程中,我們將使用 CheatCode 的全棧 JavaScript 框架 Joystick。 Joystick 將前端 UI 框架與用於構建應用的 Node.js 後端結合在一起。

首先,我們要通過 NPM 安裝 Joystick。確保在安裝之前使用 Node.js 16+ 以確保兼容性(如果您需要學習如何安裝 Node.js 或在計算機上運行多個版本,請先閱讀本教程):

終端

npm i -g @joystick.js/cli

這將在您的計算機上全局安裝操縱桿。安裝好之後,接下來我們新建一個項目:

終端

joystick create app

幾秒鐘後,您將看到一條消息已註銷到 cd 進入你的新項目並運行 joystick start

終端

cd app && joystick start

在此之後,您的應用應該可以運行了,我們可以開始了。

添加操縱桿組件

在我們剛剛創建的應用程序中,在 /ui/pages/index/index.js 為我們創建了一個已經連接到我們的路由器的示例頁面組件 .首先,我們將打開這個文件並將其內容替換為一個骨架組件,我們將在該組件上構建複製到剪貼板的功能:

/ui/pages/index/index.js

import ui from '@joystick.js/ui';

const Index = ui.component({
  render: () => {
    return `
      <div>
      </div>
    `;
  },
});

export default Index;

在這裡,我們首先導入 ui @joystick.js/ui 中的對象 包:CheatCode 的操縱桿框架的 UI 框架部分。接下來,我們創建一個變量const Index 並將其分配給對 ui.component() 的調用 .這個方法使用我們作為對像傳遞給它的選項為我們創建了一個新的 Joystick 組件。

在那個對像上,我們添加了一個屬性 render 當我們在應用程序中加載這個組件時,它被分配給返回我們想要在屏幕上呈現的 HTML 的函數。現在,我們只是返回一個帶有空 <div></div> 的字符串 標記。

/ui/pages/index/index.js

import ui from '@joystick.js/ui';

const Index = ui.component({
  css: `
    div {
      display: flex;
    }

    div button {
      margin-left: 10px;
    }
  `,
  render: () => {
    return `
      <div>
        <input type="text" />
        <button class="copy">Copy</button>
      </div>
    `;
  },
});

export default Index;

構建 HTML,接下來,我們要添加一個 <input /> 帶有 type 的標籤 text 和一個帶有 class 的按鈕 copy .我們的目標是將我們輸入的任何內容輸入到輸入中,當我們單擊“複製”按鈕時,將其複製到剪貼板。在此之上,我們添加了一些簡單的 CSS 來清理我們的輸入和按鈕的顯示,使它們在屏幕上彼此相鄰。

將副本添加到剪貼板

接下來,我們需要將處理文本副本的按鈕連接到剪貼板。

/ui/pages/index/index.js

import ui from '@joystick.js/ui';

const Index = ui.component({
  events: {
    'click .copy': (event, component) => {
      const input = component.DOMNode.querySelector('input');
      component.methods.copyToClipboard(input.value);
    },
  },
  css: `...`,
  render: () => {
    return `
      <div>
        <input type="text" />
        <button class="copy">Copy</button>
      </div>
    `;
  },
});

export default Index;

為了處理複製事件,我們需要在我們的按鈕上添加一個事件監聽器,以便當它被點擊時,我們可以獲取當前輸入值,然後將其交給我們的複制函數。

在這裡,我們向組件 events 添加了一個選項 它被分配給一個對象,其中每個屬性名稱是我們要偵聽的 DOM 事件類型和我們要在 <event> <element> 上偵聽的元素的組合 .為該屬性分配一個函數,當在該元素上檢測到該事件時,我們希望操縱桿調用該函數。

對於我們的需要,我們想獲取 <input /> 的當前值 我們在 HTML 中渲染的標籤。為此,我們預計 Joystick 會將發生的原始 DOM 事件作為函數的第一個參數傳遞給我們,並將當前組件實例作為第二個參數傳遞給我們。

在這種情況下,操縱桿讓我們可以訪問當前組件,因為它在瀏覽器中的 component.DOMNode 處呈現 .這是一個普通的 JavaScript DOM 節點對象,這意味著我們可以對其執行任何標準的 JavaScript 方法。在這裡,我們調用 querySelector() 說“在這個元素內——component.DOMNode — 查找名為 input 的元素 。”

有了這個元素,接下來,我們調用 component.methods.copyToClipboard() 傳入 value 我們的 input 的屬性 (這將包含當前輸入中的文本值)。

我們的最後一步是連接那個 methods.copyToClipboard() 使這項工作發揮作用的功能。

/ui/pages/index/index.js

import ui from '@joystick.js/ui';

const Index = ui.component({
  methods: {
    copyToClipboard: (text = '') => {
      const textarea = document.createElement("textarea");
      textarea.value = text;
      document.body.appendChild(textarea);
      textarea.select();
      document.execCommand("copy");
      document.body.removeChild(textarea);
    },
  },
  events: {
    'click .copy': (event, component) => {
      const input = component.DOMNode.querySelector('input');
      component.methods.copyToClipboard(input.value);
    },
  },
  css: `...`,
  render: () => {
    return `
      <div>
        <input type="text" />
        <button class="copy">Copy</button>
      </div>
    `;
  },
});

export default Index;

這是重要的部分。在 Joystick 組件上,我們可以在 methods 下定義我們想要的任意函數 目的。在這裡,我們添加了 copyToClipboard() 作為這些方法之一(“方法”只是 JavaScript 中定義在對像上的函數的專有名稱),接受 text 字符串 (這裡是我們剛剛從輸入中提取的值,但可能是我們想要復製到剪貼板的任何字符串)。

由於 JavaScript 缺少原生的“複製到剪貼板”功能,為了實現這一點,我們需要做一些小改動。

在這個函數內部,首先我們要動態創建一個<textarea></textarea> 內存中的元素。接下來,我們分配那個 textarea 的值 text 的元素 我們傳入 copyToClipboard() .設置好後,我們會動態附加 textarea<body></body> 我們瀏覽器的標籤,然後立即調用 .select() 方法就可以了。

接下來,我們使用 document.execCommand() 傳遞字符串 "copy" 的函數 告訴瀏覽器執行複制命令,該命令會將瀏覽器中當前選擇的內容複製到剪貼板。最後,我們調用 document.body.removeChild(textarea) 刪除 <textarea></textarea> 我們剛剛注入。

而已!現在,如果我們在瀏覽器中打開我們的應用程序 http://localhost:2600 ,當我們點擊我們的按鈕時,我們輸入的當前值將被傳遞給 methods.copyToClipboard() 並自動複製到剪貼板。

總結

在本教程中,我們學習瞭如何創建一個簡單的函數來將文本複製到剪貼板。我們學習瞭如何使用操縱桿連接一個簡單的 UI 組件,然後在單擊按鈕時將輸入的當前文本複製到剪貼板。


Tutorial JavaScript 教程
  1. JavaScript 提升新手指南

  2. 部署應用程序的最簡單方法!

  3. 如何使 textarea 填充其父寬度的寬度?

  4. 模塊化 Hyperapp - 第 2 部分

  5. 可選鏈如何使 React App 開發更容易?

  6. 隨機十六進制顏色代碼生成器 | HTML、CSS 和 JavaScript

  7. 監控代碼性能如何影響視頻通話質量

  1. 在 JavaScript 中按值傳遞

  2. Nodejs 中的 Redis 入門

  3. JavaScript Katas:查找奇數

  4. 待辦事項 JavaScript

  5. 訪問 JS 對像中的動態嵌套鍵

  6. 使用 Axios 的多參數請求

  7. 為 Web 開發設置 WSL 2

  1. 100 個 Web 項目創意

  2. 使用 Backbone.js 構建聯繫人管理器:第 1 部分

  3. 如何創建一個新的 Django 項目:分步指南

  4. 使用 GraphQL 和 Hasura 在 React 中構建 Instagram 克隆 - 第二部分