【JavaScript】使用js實現滑塊驗證碼功能與瀏覽器打印

滑塊驗證碼

效果圖:

實現思路:

根據滑塊的最左側點跟最右側點,?是否在規定的距離內【頁面最左側為原點】,來判斷是否通過

html代碼:

<!DOCTYPE html>
<html><head><title>滑動圖片驗證碼</title><style>.captcha-container {position: relative;width: 300px;height: 300px;overflow: hidden;}#captcha-image {position: absolute;width: 100%;height: 100%;background-color: #f2f2f2;background-image: url('./img/text.png');background-size: cover;}#slider {position: absolute;top: 48%;left: 0;transform: translateY(-50%);width: 80px;height: 80px;background-color: #007bff;border-radius: 50%;cursor: pointer;z-index: 999;}</style>
</head><body><div class="captcha-container"><div id="captcha-image"></div><div id="slider"></div></div><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script src="./js/captcha.js"></script>
</body></html>

js代碼:

$(document).ready(function() {var isDragging = false; // 判斷是否正在拖動滑塊var slider = $("#slider");var captchaContainer = $(".captcha-container");var captchaWidth = captchaContainer.width();var maxOffset = captchaWidth - slider.width(); // 滑塊最大可移動距離// 鼠標按下觸發slider.mousedown(function(e) {isDragging = true;});// 鼠標移動觸發$(document).mousemove(function(e) {// 判斷是否可以拖動if (isDragging) {// e.pageX 是鼠標當前所在位置相對于整個文檔(document)左側的水平位置// captchaContainer.offset().left 是容器左側邊界相對于文檔左側的水平位置。var leftOffset = e.pageX - captchaContainer.offset().left; // console.log(e.pageX,captchaContainer.offset().left)if (leftOffset >= 0 && leftOffset <= maxOffset) {slider.css("left", leftOffset);}}});// 鼠標釋放觸發$(document).mouseup(function(e) {if (isDragging) {var captchaPassed = false; // 是否通過驗證的標志var leftOffset = e.pageX - captchaContainer.offset().left; // 滑塊距離容器左側距離if (leftOffset >= 195 && leftOffset <= 280) { //滑塊要到達的目標位置captchaPassed = true;}if (captchaPassed) {// 驗證通過,執行你的相關操作console.log("驗證碼驗證通過!");} else {// 驗證失敗,重置滑塊位置console.log("驗證碼驗證失敗!");slider.animate({ left: 0 }, 200);}isDragging = false;}});});

注解:圖片需要自己放一張,然后滑塊驗證的距離通過下面代碼規定:

if (leftOffset >= 195 && leftOffset <= 280) { //滑塊要到達的目標位置xxxxxxx
}

瀏覽器打印

一開始編寫的代碼如下:

<!DOCTYPE html>
<html><head><title>打印頁面</title><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head><body><button id="printButton">打印</button><!-- 頁面內容 --><h1>歡迎打印該頁面</h1><p>這是要打印的頁面內容。</p><script>$(document).ready(function () {// 點擊按鈕觸發打印事件$("#printButton").click(function () {window.print(); // 調用window.print()方法打印頁面});});</script>
</body></html>

發現這樣會打印整個頁面的內容,不符合需求:

后來進行改進,打印指定的div下的內容:

新建一個臨時頁面,然后將指定內容賦值到臨時頁面進行打印,打印之后再關閉臨時頁面,這樣就不會打印無關的內容了

<!DOCTYPE html>
<html><head><title>打印頁面</title><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head><body><button id="printButton">打印</button><!-- 指定內容 --><div id="customDiv"><h1 style="color: red;">歡迎打印該頁面</h1><p style="background-color: aqua; font-size: 88px;">這是要打印的頁面內容。</p></div><script>$(document).ready(function () {// 點擊按鈕觸發打印事件$("#printButton").click(function () {var printContents = $("#customDiv").html(); // 獲取要打印的內容var printWindow = window.open("", "_blank"); // 打開一個新窗口printWindow.document.write('<html><head>');printWindow.document.write('<title>打印</title>');printWindow.document.write('</head><body>');printWindow.document.write(printContents); // 將要打印的內容寫入新窗口printWindow.document.write('</body></html>');printWindow.document.close();printWindow.print(); // 在新窗口中調用 print() 方法打印內容printWindow.close(); // 關閉新窗口});});</script>
</body></html>

但是這樣打印,一些樣式就無法進行打印了

注解:
printWindow.document.close() 是用于關閉在新窗口中打開的文檔流

printWindow.document.write() 方法向新窗口的文檔流中寫入了 HTML 內容。然而,在將內容添加到文檔流后,我們需要調用 printWindow.document.close() 來關閉文檔流

于是又進行修改,想著能不能對指定內容進行一個截屏,然后將截屏的圖片進行打印,這樣就可以保留跟打印內容一樣的樣式了:

<!DOCTYPE html>
<html><head><title>截屏并打印</title><script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.0/html2canvas.min.js"></script><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head><body><div id="customDiv" style="background-color: #f1f1f1; padding: 10px;"><h2 style="color: red;">要截屏和打印的內容</h2><p style="background-color: chocolate;">這是示例文本</p></div><button id="printButton">截屏并打印</button><script>$(document).ready(function () {// 點擊按鈕觸發截屏和打印事件$("#printButton").click(function () {var targetDiv = document.getElementById("customDiv");var printWindow = window.open("", "_blank"); // 打開一個新窗口html2canvas(targetDiv).then(function (canvas) {var imageData = canvas.toDataURL(); // 獲取截圖數據var imageElement = new Image();imageElement.src = imageData;printWindow.document.write('<html><head>');printWindow.document.write('<title>打印</title>');printWindow.document.write('</head><body>');printWindow.document.write(imageElement.outerHTML); // 將截圖添加到新窗口printWindow.document.write('</body></html>');printWindow.document.close();setTimeout(function () {printWindow.print(); // 在新窗口中調用 print() 方法打印內容printWindow.close(); // 關閉新窗口}, 1000); // 延遲 1 秒等待圖像加載完成(可根據需要調整延遲時間)});});});</script>
</body></html>

效果如下:

注解:

引入了 html2canvas 庫,它可以將指定元素(這里是 <div>)轉換為 <canvas>,從而實現截屏功能

當我們點擊按鈕時,使用 html2canvas 函數將指定 <div>(在代碼中被稱為 targetDiv)轉換為 <canvas>。然后,我們使用 toDataURL()<canvas> 中的圖像數據轉換為 URL 格式

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42472.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42472.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python爬蟲常用:谷歌瀏覽器驅動——Chromedriver 插件安裝教程

前言 大家早好、午好、晚好吖 ? ~歡迎光臨本文章 我們在做爬蟲的時候經常要使用谷歌瀏覽器驅動&#xff0c;今天分享下這個Chromedriver 插件的安裝方法。 話不多說&#xff0c;直接開搞&#xff0c;如果有什么疑惑/資料需要的可以點擊文章末尾名片領取源碼 第一步、打開谷…

使用Dockker創建vwas容器時報錯的解決方法

執行命令 docker run -it -d -p 13443:3443 --cap-add LINUX_IMMUTABLE secfa/docker-awvs沒有詳細看報錯之前找了各種各樣的解決辦法&#xff0c;都無法解決。因此以后在看報錯提示的時候耐心一點看關鍵詞Error 后來才發現啟動vwas時docker報了這個錯&#xff1a; OSError: …

CANoe自動化工程的搭建

基于XMLCAPL建立自動化工程 1、導入ini文件2、新建 Test Environment3、報告類型4、代碼編寫 1、導入ini文件 工程的配置的文件&#xff0c;配置DUT相關信息&#xff0c;具體視工程而編寫內容。 2、新建 Test Environment 1、新建XML測試用例環境 2、導入XML測試用例文件 …

Jmeter常用功能-參數化介紹

JMeter也有像LR中的參數化&#xff0c;本篇就來介紹下JMeter的參數化如何去實現。 參數化&#xff1a;錄制腳本中有登錄操作&#xff0c;需要輸入用戶名和密碼&#xff0c;假如系統不允許相同的用戶名和密碼同時登錄&#xff0c;或者想更好的模擬多個用戶來登錄系統。 這個時…

mac M1安裝opencv方法及類型報錯解決

安裝opencv: pip install opencv-python pip install --user opencv-contrib-python pip install opencv-python 4.5.2.54 numpy 1.25.2 安裝過程中報錯如下&#xff1a; python-類型錯誤&#xff1a;“numpy._DTypeMeta”對象不可下標 TypeError: ‘numpy._DTypeMeta’ obje…

虛擬機/雙系統Ubuntu擴容

虛擬機Ubuntu擴容 1.需要刪除所有的快照 2.擴展虛擬機磁盤大小 虛擬機(M)→設置(s)→硬盤(SCSI)→擴展磁盤容量 3.Ubuntu內調整分區大小 安裝gparted分區工具&#xff1a;sudo apt-get install gparted 啟動gparted并resize分區 4.最后最好建一個快照&#xff0c;不然gg了…

WinPlan經營大腦垂直大模型行業報告

一、引言 在當前高度信息化的時代,企業經營管理決策的重要性已經得到了廣泛的認可。然而,在實際操作中,許多企業仍然在憑經驗、拍腦袋進行經營決策,缺乏數據工具與專職分析團隊,導致決策難、效率低等問題。針對這一問題,近年來,一種名為“WinPlan”的經營決策產品逐漸嶄…

[測試報告] 愛搜Blog 自動化測試報告

目錄 項目背景 項目功能 測試詳情 一、設計測試用例 二、功能測試步驟結果 1. 登錄頁面 2. 個人博客頁面 3. 博客詳情頁 4. 博客編輯頁 三、自動化測試及測試結果 1. 測試環境 2. 登錄測試用例&#xff1a; 3. 個人詳情頁測試用例&#xff1a; 4. 寫博客并發布測試…

Android免打包多渠道統計如何實現

摘要&#xff1a; 實際上只要完成1-2步即可實現多渠道打包&#xff0c;這也意味著&#xff0c;只要每次更新App時給出一個原始包&#xff0c;運營人員就能在后臺自己進行操作管理&#xff0c;簡單快捷到全程無需開發人員參與。 我們都知道&#xff0c;Android 市場被分割成幾十…

Go學習筆記之數據類型

文章目錄 GO數據類型數組array切片slice集合map結構體make和new GO數據類型 在go語言中&#xff0c;定義的全局數據結構不使用不會報錯&#xff0c;定義的局部數據結構必須使用&#xff0c;否則報錯&#xff1b;建議定義的數據類型就要使用&#xff0c;要么不定義。 數組array …

使用Alien對.deb包與.rpm包相互轉換

目錄 1、切換到root 2、更新yum&#xff08;更新比較耗時&#xff0c;不更新沒試行不&#xff0c;自行斟酌是否跳過這一步&#xff09; 3、卸載ibus 4、安裝Alien及其依賴包 5、安裝Alien 6、將.deb轉換成.rpm包 7、安裝RPM包 8、如果報錯 9、將.rpm轉換成.deb包 10、安…

在 Visual Studio 中編譯 Qt 資源文件和 UI 文件教程

在 Visual Studio 中編譯 Qt 資源文件和 UI 文件教程 Qt 是一個跨平臺的 C 庫&#xff0c;用于開發圖形界面和應用程序。在 Qt 開發中&#xff0c;資源文件和 UI 文件是常見的兩種資源&#xff0c;需要將它們編譯成可用的形式&#xff0c;以便在應用程序中使用。本教程將指導您…

MongoDB(三十九)

目錄 一、概述 &#xff08;一&#xff09;相關概念 &#xff08;二&#xff09;特性 二、應用場景 三、安裝 &#xff08;一&#xff09;編譯安裝 &#xff08;二&#xff09;yum安裝 1、首先制作repo源 2、軟件包名&#xff1a;mongodb-org 3、啟動服務&#xff1a…

Java工程師修煉手冊:Java數據結構面試題

Java數據結構面試題一直都是面試官喜歡問到的問題&#xff0c;在我們去面試Java的相關崗位時&#xff0c;肯定會被提問到&#xff0c;所以我們就需要提前做好準備&#xff0c;輕松的去應對&#xff1a; 1. 數據結構定義 數據結構是計算機存儲、組織數據的方式。數據結構是指相…

asp.net core讀取request內容

在Startup.cs中定義Middleware&#xff0c;設置緩存Http請求的Body數據。代碼如下。自定義Middleware請放到Configure方法的最前面。 app.Use(next > new RequestDelegate(async context > {context.Request.EnableBuffering();await next(context);})); GET請求 HttpC…

詳解23種設計模式優缺點以及解決方案

1. 單例模式&#xff08;Singleton Pattern&#xff09;&#xff1a; 優點&#xff1a;確保一個類只有一個實例&#xff0c;提供全局訪問點&#xff0c;節省資源。缺點&#xff1a;可能引入全局狀態&#xff0c;難以擴展和測試。解決方法&#xff1a;使用依賴注入來替代直接訪…

通過 Amazon SageMaker JumpStart 部署 Llama 2 快速構建專屬 LLM 應用

來自 Meta 的 Llama 2 基礎模型現已在 Amazon SageMaker JumpStart 中提供。我們可以通過使用 Amazon SageMaker JumpStart 快速部署 Llama 2 模型&#xff0c;并且結合開源 UI 工具 Gradio 打造專屬 LLM 應用。 Llama 2 簡介 Llama 2 是使用優化的 Transformer 架構的自回歸語…

【JavaEE基礎學習打卡04】JDBC之MySQL數據庫安裝

目錄 前言一、JDBC與數據庫二、MySQL數據庫1.MySQL數據庫2.MySQL服務下載安裝3.MySQL服務啟動停止4.MySQL命令 三、MySQL客戶端安裝總結 前言 &#x1f4dc; 本系列教程適用于JavaWeb初學者、愛好者&#xff0c;小白白。我們的天賦并不高&#xff0c;可貴在努力&#xff0c;堅持…

【 Cocos Creator 項目實戰】益智游戲《2048》(附帶完整源碼工程)

本文乃Siliphen原創&#xff0c;轉載請注明出處 目錄 游戲介紹 概述 游戲整體流程 游戲框架設計 主要流程控制類 本文項目的代碼組織結構 構建游戲世界 數字方塊 地圖 觸摸手勢識別 防觸摸抖動 判斷用戶輸入的方向 地圖 任意大小的地圖 初始化地圖大小 地圖繪制…

數據結構----結構--線性結構--棧,隊列

數據結構----結構–線性結構–棧&#xff0c;隊列 一.棧&#xff1a;Stack 1.棧的特點&#xff1a; ? 先進后出&#xff1a;FILO&#xff08;對一組數據有倒敘要求時可以用棧&#xff09; 2.棧的實現 順序存儲&#xff1a;數組實現&#xff1a; ? 缺點&#xff1a;空間…