pointer-event 和 cursor 属性 在div上实现button的disabled禁用效果

本文介绍如何在不使用disabled属性的情况下,通过pointer-events:none和cursor:not-allowed样式实现div按钮的禁用效果,同时解决样式冲突问题。关键在于外层div应用cursor:not-allowed,确保禁用状态下手势和视觉反馈正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当按钮是用div写的时候,不能够像button一样直接使用disabled属性,此时可以通过

事件禁用样式 pointer-events: none;鼠标悬浮禁用手势样式 cursor: not-allowed; 来实现类似button按钮disabled属性效果;

但是如果把这两个样式写在一个class里面,事件禁用样式会影响鼠标悬浮禁用手势样式,使得禁用状态无法显示。

解决:将 cursor: not-allowed 写在外层div上

<div class="A">
    <div class="aa" @click="f1"></div>
</div>
.aa {
    width: 100px;
    height: 100px;
    border: 2px dashed orange;
    pointer-events: none;
}

.A {
    cursor: not-allowed;
}
请参考以下示例代码: ```html <!DOCTYPE html> <html> <head> <title>文件实验室/账号登录</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> body { font-family: "楷体", "SimKai", sans-serif; margin: 0; padding: 0; } .container { display: flex; flex-wrap: wrap; } .left { flex: 1; background-color: #f2f2f2; height: 100vh; padding: 20px; box-sizing: border-box; } .right { flex: 1; height: 100vh; padding: 20px; box-sizing: border-box; } h1 { text-align: center; margin-top: 0; } form { display: flex; flex-direction: column; align-items: flex-end; margin-top: 50px; } label { display: block; margin-bottom: 10px; } input[type="email"], input[type="text"] { padding: 10px; border-radius: 5px; border: none; margin-bottom: 10px; width: 100%; box-sizing: border-box; } #code-btn { background-color: #4CAF50; color: white; padding: 10px; border: none; border-radius: 5px; cursor: pointer; } #code-btn:disabled { background-color: #ddd; color: #aaa; cursor: not-allowed; } #login-btn { background-color: #4CAF50; color: white; padding: 10px; border: none; border-radius: 5px; cursor: pointer; width: 100%; } </style> </head> <body> <div class="container"> <div class="left"> <h1>文件实验室/账号登录</h1> </div> <div class="right"> <h1>账号登录</h1> <form> <label for="email">邮箱:</label> <input type="email" id="email" name="email" required> <button type="button" id="code-btn">获取验证码</button> <label for="code">验证码:</label> <input type="text" id="code" name="code" required> <button type="submit" id="login-btn">登录</button> </form> </div> </div> <script> var codeBtn = document.getElementById("code-btn"); codeBtn.addEventListener("click", function() { // 发送请求获取验证码 var email = document.getElementById("email").value; var xhr = new XMLHttpRequest(); xhr.open("POST", "/admin/"); xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xhr.send(JSON.stringify({ email: email })); // 禁用按钮并显示倒计时 codeBtn.disabled = true; var count = 60; var intervalId = setInterval(function() { if (count === 0) { codeBtn.disabled = false; codeBtn.textContent = "获取验证码"; clearInterval(intervalId); } else { codeBtn.textContent = count + "秒后再试"; count--; } }, 1000); }); var loginBtn = document.getElementById("login-btn"); loginBtn.addEventListener("click", function(event) { event.preventDefault(); // 发送请求验证验证码 var email = document.getElementById("email").value; var code = document.getElementById("code").value; var xhr = new XMLHttpRequest(); xhr.open("POST", "/response/"); xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status === 200) { // 验证成功,跳转到目标页面 location.href = "https://www.spacexs.cn"; } else { // 验证失败,提示重新输入 alert("验证码错误,请重新输入。"); } } }; xhr.send(JSON.stringify({ email: email, code: code })); }); </script> </body> </html> ``` 该页面实现了左右布局,输入框按钮靠右边,能够自适应不同设备的屏幕大小。页面语言是简体中文,使用楷体字体。点击获取验证码后,按钮文本显示为60秒后再试,期间禁用按钮。使用ajax技术发送请求,将获取到的邮箱账号使用post发送到/admin/等待后端发送验证码,将用户填入验证码后使用post发送到/response/等待后端验证,后端验证通过后跳转到https://www.spacexs.cn,失败则要求重新输入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲起来blingbling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值