#javascript #html #css
#javascript #HTML #css
Вопрос:
Я пытаюсь установить преобразование для элемента DOM из javascript. Оно преобразуется, но снова возвращается в исходное положение? Как я могу решить эту проблему и что является ее причиной?
Я попытался установить его в файле css, который работает.
Вот мой код.
let ibox=document.getElementById("inbox");
let pattern=/^(1[0-2]|0?[1-9]):([0-5]?[0-9])/;
let form = document.querySelector("form");
let bh = document.querySelector(".bighand");
let sh = document.querySelector(".smallhand");
const verify=() =>{
pattern.test(ibox.value)?setTime():invalidEntry();
};
const setTime = ()=>{
bh.style.transform = "rotate(180deg)";
sh.style.transform = "rotate(90deg)";
//alert("We have set your time");
}
const invalidEntry=()=>{
alert("Please enter a valid time and format. Example 3:45");
}
html{
height: 100vh;
width: 100vw;
margin:unset;
}
.container {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 600px;
}
.clockface{
position:relative;
height:500px;
width:500px;
background-image:url("https://images.homedepot-static.com/productImages/4fe72a29-ac1e-4699-ac41-998ca8a64d4c/svn/designer-stencils-stencils-3697h-64_1000.jpg");
background-size:cover;
}
.clockface.simple:after {
background: #000;
border-radius: 50%;
content: "";
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 5%;
height: 5%;
z-index: 10;
}
.longesthand-container, .bighand-container, .smallhand-container {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
/*.smallhand-container {
animation: rotate 43200s infinite linear;
}
.bighand-container {
animation: rotate 3600s infinite steps(60);
}
.longesthand-container {
animation: rotate 60s infinite steps(60);
}*/
.longesthand{
background: #000;
height: 45%;
left: 49.5%;
position: absolute;
top: 14%;
transform-origin: 50% 80%;
width: 1%;
z-index:8;
}
.bighand{
background: #000;
height: 30%;
left: 49%;
position: absolute;
top: 20%;
transform-origin: 50% 100%;
width: 2%;
}
.smallhand{
background: #000;
height: 20%;
left: 48.75%;
position: absolute;
top: 30%;
transform-origin: 50% 100%;
width: 2.5%;
}
@keyframes rotate {
100% {
transform: rotateZ(360deg);
}
}
#inputbox{
height:50px;
font-size:2em;
}
footer {
display: flex;
justify-content: center;
}
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<header></header>
<div class="container">
<div class="clockface simple">
<div class="longesthand-container">
<div class="longesthand">
</div>
</div>
<div class="bighand-container">
<div class="bighand" id="bh">
</div>
</div>
<div class="smallhand-container">
<div class="smallhand">
</div>
</div>
</div>
</div>
<div>
<form onsubmit="verify()">
Enter your time: <input type="text" id="inbox" placeholder="12:00">
<input type="submit" value="Submit">
</form>
</div>
<footer>amp;#169;mukherj</footer>
</body>
</html>
Оно действительно должно вращаться. Но оно возвращается в исходное положение
Ответ №1:
Вы используете submit
событие вашего form
с помощью submit
кнопки. Вы должны использовать click
событие a button
, потому что вы нигде не отправляете данные формы. Фактически, из-за этого вам даже не нужен form
тег.
let ibox=document.getElementById("inbox");
let pattern=/^(1[0-2]|0?[1-9]):([0-5]?[0-9])/;
let form = document.querySelector("form");
let bh = document.querySelector(".bighand");
let sh = document.querySelector(".smallhand");
const verify=() =>{
pattern.test(ibox.value)?setTime():invalidEntry();
};
const setTime = ()=>{
bh.style.transform = "rotate(180deg)";
sh.style.transform = "rotate(90deg)";
//alert("We have set your time");
}
const invalidEntry=()=>{
alert("Please enter a valid time and format. Example 3:45");
}
html{
height: 100vh;
width: 100vw;
margin:unset;
}
.container {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 600px;
}
.clockface{
position:relative;
height:500px;
width:500px;
background-image:url("https://images.homedepot-static.com/productImages/4fe72a29-ac1e-4699-ac41-998ca8a64d4c/svn/designer-stencils-stencils-3697h-64_1000.jpg");
background-size:cover;
}
.clockface.simple:after {
background: #000;
border-radius: 50%;
content: "";
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 5%;
height: 5%;
z-index: 10;
}
.longesthand-container, .bighand-container, .smallhand-container {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
/*.smallhand-container {
animation: rotate 43200s infinite linear;
}
.bighand-container {
animation: rotate 3600s infinite steps(60);
}
.longesthand-container {
animation: rotate 60s infinite steps(60);
}*/
.longesthand{
background: #000;
height: 45%;
left: 49.5%;
position: absolute;
top: 14%;
transform-origin: 50% 80%;
width: 1%;
z-index:8;
}
.bighand{
background: #000;
height: 30%;
left: 49%;
position: absolute;
top: 20%;
transform-origin: 50% 100%;
width: 2%;
}
.smallhand{
background: #000;
height: 20%;
left: 48.75%;
position: absolute;
top: 30%;
transform-origin: 50% 100%;
width: 2.5%;
}
@keyframes rotate {
100% {
transform: rotateZ(360deg);
}
}
#inputbox{
height:50px;
font-size:2em;
}
footer {
display: flex;
justify-content: center;
}
<div class="container">
<div class="clockface simple">
<div class="longesthand-container">
<div class="longesthand">
</div>
</div>
<div class="bighand-container">
<div class="bighand" id="bh">
</div>
</div>
<div class="smallhand-container">
<div class="smallhand">
</div>
</div>
</div>
</div>
<div>
Enter your time: <input type="text" id="inbox" placeholder="12:00">
<input type="button" value="Submit" onclick="verify()">
</div>
<footer>amp;#169;mukherj</footer>
Комментарии:
1. Спасибо… Я действительно не использовал форму для отправки чего-либо.