用 Javascript 生成二维码

用 Javascript 生成二维码用Javascript生成二维码#javascript#Webdev的#节点#设计大家好????,这将是一篇很短的文章,我将展示如何为JavaScript中的任何内容生成二维码。显然,我不会从头开始实现所有内容,当我们在JavaScript中有大量有用的库时,为什么要这样做。我遇到了这个很棒的轻量级库,或者你可以说一个简单的脚本qrcodejs。它非常易于使用并且也很可靠。执行 下载此zip文件:qrcodejs 提取它。 现在您可以…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

大家好,这将是一篇很短的文章,我将展示如何为 JavaScript 中的任何内容生成二维码。

显然,我不会从头开始实现所有内容,当我们在 JavaScript 中有大量有用的库时,为什么要这样做。

我遇到了这个很棒的轻量级库,或者你可以说一个简单的脚本qrcodejs。它非常易于使用并且也很可靠。

执行

  • 下载此 zip 文件:qrcodejs

  • 提取它。

  • 现在您可以在您的项目中使用qrcode.jsqrcode.min.js文件。

代码

qrcode.js在 HTML 文件中包含该文件。

...
<script src="./qrcode.js" defer></script>
...

举一个iddiv要显示生成的QR码。这里我用作"qrcode"我的id.

...
<div id="qrcode"></div>
...

现在我们将从该QRCode函数创建一个对象。需要通过id输出的div"qrcode"在这种情况下。

var QR_CODE = new QRCode("qrcode", {
  width: 220,
  height: 220,
  colorDark: "#000000",
  colorLight: "#ffffff",
  correctLevel: QRCode.CorrectLevel.H,
});

correctLevel:L低,M中,H高。

通过调用makeCodeQRCode 对象的方法来生成 QRCode,该方法将data用作其参数。

QR_CODE.makeCode("https://buymeacoffee.com/bibekkakati");

在它会自动将所生成的QR码div,其id在创建对象的QR码已经提供。

例子✨

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>QR Code Generator</title>
    <link rel="stylesheet" href="./css/style.css">
    <script src="./js/qrcode.js" defer></script>
    <script src="./js/script.js" defer></script>
</head>

<body>
    <div class="main" id="main">
        <img src="./assets/qr_logo.svg" alt="" width="68" height="68">
        <input type="text" class="dataBox" name="data" placeholder="Paste your content" id="dataBox" value=""
            autocomplete="false">
        <button class="btn" id="generateBtn">Generate</button>
        <div class="qrdiv hide" id="qrdiv">
            <div class="qrcode" id="qrcode"></div>
            <button class="downloadBtn" id="downloadBtn">Download</button>
        </div>
    </div>
</body>

</html>
function main() {
	const generateBtn = document.getElementById("generateBtn");
	const dataBox = document.getElementById("dataBox");
	const downloadBtn = document.getElementById("downloadBtn");
	const qrcode = document.getElementById("qrcode");
	const qrdiv = document.getElementById("qrdiv");

	const errorClassName = "error";
	const shakeClassName = "shake";
	const dataBoxClassName = "dataBox";
	const toHideClassName = "hide";
	const qrdivClassName = "qrdiv";

	var QR_CODE = new QRCode("qrcode", {
		width: 260,
		height: 260,
		colorDark: "#000000",
		colorLight: "#ffffff",
		correctLevel: QRCode.CorrectLevel.H,
	});

	generateBtn.onclick = function (e) {
		const data = dataBox.value;
		if (data) {
			generateQRCode(data);
		} else {
			markDataBoxError();
		}
	};

	dataBox.onfocus = function (e) {
		const classList = dataBox.classList;

		if (classList.contains(errorClassName)) {
			// Removing error class
			dataBox.className = dataBoxClassName;
		}
	};

	downloadBtn.onclick = function (e) {
		// Image tag
		const img = qrcode.getElementsByTagName("img")[0];
		// Canvas tag
		const canvas = qrcode.getElementsByTagName("canvas")[0];

		// Padding to QRCode
		const padding = 40;

		// Adding padding to width and height
		canvas.width = canvas.width + padding;
		canvas.height = canvas.height + padding;

		// Canvas context
		const context = canvas.getContext("2d");
		// Clearing previous content
		context.clearRect(0, 0, canvas.width, canvas.height);
		// Making the background white
		context.fillStyle = "#ffffff";
		context.fillRect(0, 0, canvas.width, canvas.height);
		// Adding the image of QRCode
		// x and y are padding / 2
		context.drawImage(img, padding / 2, padding / 2);

		// Getting base64 url
		const image = canvas.toDataURL("image/png", 1);
		const filename = "QR_Code_" + Date.now() + ".png";
		downloadImage(image, filename);
	};

	function markDataBoxError() {
		const prevClassName = dataBox.className;
		dataBox.className =
			prevClassName + " " + errorClassName + " " + shakeClassName;
		vibrate();
		setTimeout(() => {
			// Reset class
			dataBox.className = prevClassName + " " + errorClassName;
		}, 500);
	}

	function generateQRCode(data) {
		QR_CODE.clear();
		QR_CODE.makeCode(data);
		// Show QRCode div
		qrdiv.className = qrdivClassName;
	}

	function vibrate() {
		if (Boolean(window.navigator.vibrate)) {
			window.navigator.vibrate([100, 100, 100]);
		}
	}

	function downloadImage(image, filename) {
		// Creating hidden <a> tag to download
		var element = document.createElement("a");
		element.setAttribute("href", image);
		element.setAttribute("download", filename);
		element.setAttribute("class", toHideClassName);
		document.body.appendChild(element);
		element.click();
		document.body.removeChild(element);
	}
}

main();
body {
	padding: 0;
	margin: 0;
	width: 100vw;
	height: 100vh;
}

.main {
	display: flex;
	flex-direction: column;
	align-items: center;
	padding-top: 60px;
}

.dataBox {
	width: 300px;
	height: 30px;
	border-radius: 40px;
	padding: 8px 16px;
	margin: 40px 0 10px 0;
	font-size: 16px;
	outline: none;
	border-color: #03ad91;
	text-align: center;
	border-width: 4px;
}

.btn {
	position: relative;
	height: 50px;
	width: 300px;
	margin: 10px 0;
	padding: 8px 16px;
	text-align: center;
	border-radius: 40px;
	border: none;
	background-color: #03ad91;
	color: #f0f8ff;
	font-weight: 600;
	font-size: 16px;
	-webkit-transition-duration: 0.4s;
	transition-duration: 0.4s;
	text-decoration: none;
	overflow: hidden;
	cursor: pointer;
	box-shadow: 0px 6px 10px #53fcb866;
}

.btn:after {
	content: "";
	display: block;
	position: absolute;
	background: #02e0bb;
	border-radius: 40px;
	padding-top: 300%;
	padding-left: 350%;
	margin-left: -20px !important;
	margin-top: -120%;
	opacity: 0;
	transition: all 0.8s;
}

.btn:active:after {
	padding: 0;
	margin: 0;
	opacity: 1;
	transition: 0s;
}

.qrdiv {
	text-align: center;
}

.qrcode {
	margin: 30px 0;
}

.qrcode > img {
	background-color: #fff;
}

.downloadBtn {
	background: none;
	border: none;
	color: #809180;
	font-weight: 600;
	letter-spacing: 1px;
	cursor: pointer;
	padding: 2px;
}

.downloadBtn:hover {
	border-bottom: dashed #809180 2px;
}

.hide {
	display: none;
}

.error {
	border-color: #e22416;
}

.shake {
	animation: shake 0.5s;
	animation-iteration-count: infinite;
}

@keyframes shake {
	0% {
		transform: translate(1px, 1px) rotate(0deg);
	}
	10% {
		transform: translate(-1px, -2px) rotate(-0.5deg);
	}
	20% {
		transform: translate(-3px, 0px) rotate(0.5deg);
	}
	30% {
		transform: translate(3px, 2px) rotate(0deg);
	}
	40% {
		transform: translate(1px, -1px) rotate(0.5deg);
	}
	50% {
		transform: translate(-1px, 2px) rotate(-0.5deg);
	}
	60% {
		transform: translate(-3px, 1px) rotate(0deg);
	}
	70% {
		transform: translate(3px, 1px) rotate(-0.5deg);
	}
	80% {
		transform: translate(-1px, -1px) rotate(0.5deg);
	}
	90% {
		transform: translate(1px, 2px) rotate(0deg);
	}
	100% {
		transform: translate(1px, -2px) rotate(-0.5deg);
	}
}

GitHub的存储库

用 Javascript 生成二维码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180734.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 160亿数据点图表控件LightningChart振动分析可以检测什么?

    160亿数据点图表控件LightningChart振动分析可以检测什么?LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学,工程,医学,航空,贸易,能源和其他领域的体绘制功能。点击下载LightningChart.NET最新试用版当您想到振动分析时,您会想到什么?它正在成为结构工程中一种非常常见的识别方法,用于识别潜在的结构完整性问题,例如隐藏的物体或空隙。这是一种识别机械问题的

    2022年10月15日
  • 反Secure Boot垄断:兼谈如何在Windows 8电脑上安装Linux

    反Secure Boot垄断:兼谈如何在Windows 8电脑上安装Linux

  • sublime text 3 + python配置,完整搭建及常用插件安装

    sublime text 3 + python配置,完整搭建及常用插件安装公众号:战渣渣四年的时间,一直使用EmEditor编辑器进行Python开发,之前是做面向过程,只需要将一个单独的py文件维护好即可,用着也挺顺手,但是最近在做面向对象的开发,不同的py文件中相互关联较多,感觉单纯使用EmEditor编辑器确实有些低效(主要是对EmEditor的插件都不熟悉,然后逐个py文件的查找)。在网上搜索了一些Python开发的编辑器和IDE,有…

  • 初识ABP vNext(10):ABP设置管理

    初识ABP vNext(10):ABP设置管理

    2020年11月20日
  • Spring、SpringBoot和SpringCloud的关系

    Spring、SpringBoot和SpringCloud的关系1、SpringBoot是Spring的一套快速配置脚手架,可以基于SpringBoot快速开发单个微服务。2、SpringCloud是一个基于SpringBoot实现的云应用开发工具。3、SpringBoot专注于快速、方便集成的单个个体,SpringCloud是关注全局的服务治理框架。4、SpringBoot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就…

  • 类似于谷歌的搜索引擎_类似谷歌的搜索引擎

    类似于谷歌的搜索引擎_类似谷歌的搜索引擎推荐几款优秀的、甚至可以代替谷歌的搜索引擎。本文将要推荐的搜索引擎分为4类,分别是国内可使用、国内不可使用、视频搜索、特殊。每个搜索引擎都将展示网址、介绍、效果图。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号