大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
大家好,这将是一篇很短的文章,我将展示如何为 JavaScript 中的任何内容生成二维码。
显然,我不会从头开始实现所有内容,当我们在 JavaScript 中有大量有用的库时,为什么要这样做。
我遇到了这个很棒的轻量级库,或者你可以说一个简单的脚本qrcodejs。它非常易于使用并且也很可靠。
执行
-
下载此 zip 文件:qrcodejs
-
提取它。
-
现在您可以在您的项目中使用
qrcode.js
和qrcode.min.js
文件。
代码
qrcode.js
在 HTML 文件中包含该文件。
...
<script src="./qrcode.js" defer></script>
...
举一个id
到div
要显示生成的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
高。
通过调用makeCode
QRCode 对象的方法来生成 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的存储库。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180734.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...