Повернуть элемент мышкой
У меня есть такой скрипт:
<style>
#rotate {
width: 200px;
height: 200px;
margin: 50px auto;
background: linear-gradient(0deg, red, green);
}
.active {
border-radius: 100%;
}
</style>
<div id="rotate"></div>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
<script>
(function() {
var init, rotate, start, stop,
active = false,
angle = 0,
rotation = 0,
startAngle = 0,
center = {
x: 0,
y: 0
},
R2D = 180 / Math.PI,
rot = document.getElementById('rotate');
init = function() {
rot.addEventListener("mousedown", start, false);
$(document).bind('mousemove', function(event) {
if (active === true) {
event.preventDefault();
rotate(event);
}
});
$(document).bind('mouseup', function(event) {
event.preventDefault();
stop(event);
});
};
start = function(e) {
e.preventDefault();
var bb = this.getBoundingClientRect(),
t = bb.top,
l = bb.left,
h = bb.height,
w = bb.width,
x, y;
center = {
x: l + (w / 2),
y: t + (h / 2)
};
x = e.clientX - center.x;
y = e.clientY - center.y;
startAngle = R2D * Math.atan2(y, x);
return active = true;
};
rotate = function(e) {
e.preventDefault();
var x = e.clientX - center.x,
y = e.clientY - center.y,
d = R2D * Math.atan2(y, x);
rotation = d - startAngle;
return rot.style.webkitTransform = "rotate(" + (angle + rotation) + "deg)";
};
stop = function() {
angle += rotation;
alert(angle);
return active = false;
};
init();
}).call(this);
</script>
С помощью него я мышкой поворачиваю элемент. Помогите, пожалуйста, сделать следующее. Мне нужно, чтобы я мог повернуть элемент только на 180deg. При этом: - Если начинаешь поворачивать, и если повернул меньше, чем на 90deg и отпустил элемент, то он возвращается на место; - Если начинаешь поворачивать, и если повернул больше, чем на 90deg и отпустил элемент, то он поворачивается до конца (до 180deg). В этом случае элементу добавляется дополнительный класс (.active). И сразу после этого ближайшие, скажем 60сек, элемент поворачивать мы не можем. А спустя 60сек этот дополнительный класс удаляется, и мы снова можем поворачивать элемент. Как можно такое сделать, прошу помощи. Спасибо! |
LADYX,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<style>
#rotate {
width: 200px;
height: 200px;
margin: 50px auto;
background: linear-gradient(0deg, red, green);
}
.active {
border-radius: 100%;
}
.animate{
transition: transform 1s;
border: 5px solid #0000FF;
}
</style>
<div id="rotate"></div>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
<script>
(function() {
var init, rotate, start, stop,
active = false,
angle = 0,
rotation = 0,
startAngle = 0,
center = {
x: 0,
y: 0
},
R2D = 180 / Math.PI,
rot = document.getElementById('rotate');
init = function() {
rot.addEventListener("mousedown", start, false);
$(document).bind('mousemove', function(event) {
if (active === true) {
event.preventDefault();
rotate(event);
}
});
$(document).bind('mouseup', function(event) {
event.preventDefault();
stop(event);
});
};
start = function(e) {
e.preventDefault();
var bb = this.getBoundingClientRect(),
t = bb.top,
l = bb.left,
h = bb.height,
w = bb.width,
x, y;
center = {
x: l + (w / 2),
y: t + (h / 2)
};
x = e.clientX - center.x;
y = e.clientY - center.y;
startAngle = R2D * Math.atan2(y, x);
return active = true;
};
rotate = function(e) {
if(rot.classList.contains("animate")) return;
e.preventDefault();
var x = e.clientX - center.x,
y = e.clientY - center.y,
d = R2D * Math.atan2(y, x);
rotation = d - startAngle;
return rot.style.webkitTransform = "rotate(" + (angle + rotation) + "deg)";
};
stop = function() {
if(rot.classList.contains("animate")) return;
var max = Math.abs(rotation) > 90;
rotation = (max ? 180 : 0) * (rotation > 0 ? 1 : -1);
rot.classList.add("animate");
window.setTimeout(_ => {
rot.classList.remove("animate");
active = false;
}, max ? 10000 : 1000)
angle += rotation;
rot.style.webkitTransform = "rotate(" + angle + "deg)";
};
init();
}).call(this);
</script>
</body>
</html>
|
рони,
приветствую вас! Да, супер, то что нужно. Большое спасибо!! Буду с ним дальше работать, хочу уйти от jQuery полностью. Постараюсь самостоятельно переписать его на чистый JS. |
| Часовой пояс GMT +3, время: 18:53. |