javascript - 当我使用 js 更改类名时,css 转换不起作用
问题描述
当我用js更改className时,它应该在我的脑海中转换..但是..下面的代码不起作用
let canvas = document.getElementById("canvas");
let types = 'center'
canvas.addEventListener('click', function (e) {
let target = this
target.style.position = 'relative'
target.style.overflow = 'hidden'
let ripple = target.querySelector('.ripple')
/* 无ripple 说明第一次点击 */
if (!ripple) {
ripple = document.createElement('span')
ripple.className = 'ripple'
ripple.style.height = ripple.style.width = `120px`
target.appendChild(ripple)
} else {
ripple.className = 'ripple'
}
//ripple.style.top = e.pageY + 'px';
// ripple.style.left = e.pageX + 'px'
// console.log(e.pageY);
//console.log(e.pageX);
switch (types) {
case 'center':
ripple.style.top = `${ripple.offsetHeight / 2}px`
ripple.style.left = `${ripple.offsetWidth / 2}px`
break
default:
ripple.style.top = `${ripple.offsetHeight / 2}px`
ripple.style.left = `${ripple.offsetWidth / 2}px`
}
ripple.style.backgroundColor = '#999'
ripple.className = 'ripple active'
})
.ripple {
position: absolute;
border-radius: 100%;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-transform: scale(0);
-ms-transform: scale(0);
transform: scale(0);
}
.ripple.active {
-webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
transition: opacity 1.2s ease-out, transform 0.6s ease-out;
transition: opacity 1.2s ease-out, transform 0.6s ease-out, -webkit-transform 0.6s ease-out;
-webkit-transform: scale(2);
-ms-transform: scale(2);
transform: scale(2);}
<div id="canvas" style="width: 100%;height: 1024px">
canvas
</div>
正如您在上面的代码中看到的,如果我更改了 className 并使用
ripple.style.top = e.pageY + 'px';
ripple.style.left = e.pageX + 'px'
它不能发出转换。但是如果使用与上面的代码相同的 switch 代码,它可以工作!太混乱了,谁能帮帮我?
解决方案
当我运行您的代码时,ripple.style.left = e.pageX + 'px'
我看到不使用console.log()
它不起作用,所以据我所知,您必须给程序几毫秒“休息”并设置新position
的以解决我setTimeout
随0
时间使用的问题,然后我设置新的className
更多信息:
- 夸拉
-
setTimeout(function(){ ripple.style.backgroundColor = '#999999'; ripple.className = 'ripple active'
},0);
查看工作代码:
let canvas = document.getElementById("canvas");
let types = 'center'
canvas.addEventListener('click', function (e) {
let target = this
target.style.position = 'relative'
target.style.overflow = 'hidden'
let ripple = target.querySelector('.ripple')
/* 无ripple 说明第一次点击 */
if (!ripple) {
ripple = document.createElement('span')
ripple.className = 'ripple'
ripple.style.height = ripple.style.width = `120px`
target.appendChild(ripple)
} else {
ripple.className = 'ripple'
}
ripple.style.top = e.pageY + 'px';
ripple.style.left = e.pageX + 'px';
setTimeout(function(){
ripple.style.backgroundColor = '#999999';
ripple.className = 'ripple active'
},0);
})
.ripple {
position: absolute;
border-radius: 100%;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-transform: scale(0);
-ms-transform: scale(0);
transform: scale(0);
}
.ripple.active {
-webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
transition: opacity 1.2s ease-out, transform 0.6s ease-out;
transition: opacity 1.2s ease-out, transform 0.6s ease-out, -webkit-transform 0.6s ease-out;
-webkit-transform: scale(2);
-ms-transform: scale(2);
transform: scale(2);
}
<div id="canvas" style="width: 100%;height: 1024px">
canvs
</div>
推荐阅读
- junit - 错误:getaddrinfo ENOTFOUND api.appcenter.ms api.appcenter.ms:443 在将文件上传到 appcenter 时抛出
- mongodb - Mongodb查询以匹配由数字标识的子文档中的值
- javascript - Three.js:如何在两个对象之间创建过渡?
- html - 在另一个表中有一个表时对齐两个 div
- php - 如何显示闪光按摩 Laravel 5.7
- c - 链表数组中的先前插入被最近的插入替换
- hyperledger-fabric - Hyperledger Explorer 无法连接到网络
- python-3.x - 如何修改我的代码以包含每条推文的地理位置并让机器以 15 分钟的休息时间连续运行代码?
- kotlin - 如何在 Kotlin 中对 IntArray 进行 Base64 编码
- python - 如何定位下拉菜单并选择没有 id 和类名且带空格的值