如何在 Javascript 中旋转图像?
How to rotate Image in Javascript?
我想在点击打开按钮时旋转风扇图像。
然后点击关闭按钮,旋转停止。
我的代码是:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<img id="myFan" src="fan.png" width="200" heigh="100"><br>
<button onclick="turnOn()"> On </button><br>
<button onclick="turnOff()"> Off </button>
<script>
function turnOn() {
var x = document.getElementById("myFan");
}
function turnOff() {
var x = document.getElementById("myFan");
}
</script>
</body>
</html>
试试这个(由于某种原因图像没有显示):
let timer;
let turn = 0;
function turnOn() {
timer = setInterval(turnFan, 200);
let x = document.getElementById("on");
x.disabled = true;
}
function turnOff() {
clearInterval(timer);
let x = document.getElementById("on");
x.disabled = false;
}
function turnFan() {
let x = document.getElementById("myFan");
turn += 60;
x.style.transform = "rotate("+ (turn % 360) +"deg)"
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<img id="myFan" src="http://www.pngmart.com/files/7/Ceiling-Fan-PNG-Transparent-Image.png" width="200" heigh="100"><br>
<button id="on" onclick="turnOn()"> On </button><br>
<button id="off" onclick="turnOff()"> Off </button>
</body>
</html>
使用 CSS 动画和 animation-play-state
您可以使用 CSS 动画轻松、连续且高效地旋转图像。为了不让动画马上播放,可以将animation-play-state
CSS属性设置为paused
。当你想让动画播放——让风扇旋转——你可以取消设置 animation-play-state
或将其设置为 running
.
如何使它易于访问
您可以根据图像对用户的外观(即旋转与否)设置图像的 alt
属性。要让用户知道此更改,您应该设置 aria-live="polite"
以便辅助技术大声朗读替代文本。
为了使 on/off 按钮更易于访问,您有几个选择。一种选择是在最后按下的按钮上设置 display: none
。另一种选择是在最后按下的按钮上将 disabled
设置为 true
。最后,您可以使用一个按钮来打开和关闭它,在其上设置 aria-live="polite"
,然后将文本从“打开风扇”更改为“关闭风扇”,反之亦然。
let fanStatus = 'off'
on.addEventListener('click', () => {
if (fanStatus === 'off') {
rotateMe.classList.remove('paused')
rotateMe.alt = 'spinning bladed fan'
on.disabled = true
off.disabled = false
}
})
off.addEventListener('click', () => {
if (fanStatus === 'off') {
rotateMe.classList.add('paused')
rotateMe.alt = 'bladed fan'
on.disabled = false
off.disabled = true
}
})
img {
width: 90px;
height: 90px;
}
.rotate {
animation: rotate 0.75s infinite linear;
}
.paused {
animation-play-state: paused;
}
@keyframes rotate {
100% {
transform: rotate(-360deg);
}
}
<img
src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcScQe7tlEzE58so4n8IIn3LjKI2JCq_HIckHg&usqp=CAU"
alt="bladed fan"
id="rotateMe"
class="rotate paused"
aria-live="polite"
/>
<button id="on" aria-live="polite">Turn on fan</button>
<button id="off" aria-live="polite" disabled>Turn off fan</button>
我已经在我的一个项目中实现了这个:
function rotate90 (img){
var img=this
if (img.style.transform == ""){var x=90;
window.localStorage.setItem("x", Number(x))
}
else{
var x = Number(window.localStorage.getItem("x"))
x += 90;
if (x==360){x=0}
window.localStorage.setItem("x", Number(x))
}
img.style.transform ="rotate("+x+"deg)";
}
在您的代码中使用 img.onclick=rotate90;
它应该可以工作。
我想在点击打开按钮时旋转风扇图像。 然后点击关闭按钮,旋转停止。
我的代码是:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<img id="myFan" src="fan.png" width="200" heigh="100"><br>
<button onclick="turnOn()"> On </button><br>
<button onclick="turnOff()"> Off </button>
<script>
function turnOn() {
var x = document.getElementById("myFan");
}
function turnOff() {
var x = document.getElementById("myFan");
}
</script>
</body>
</html>
试试这个(由于某种原因图像没有显示):
let timer;
let turn = 0;
function turnOn() {
timer = setInterval(turnFan, 200);
let x = document.getElementById("on");
x.disabled = true;
}
function turnOff() {
clearInterval(timer);
let x = document.getElementById("on");
x.disabled = false;
}
function turnFan() {
let x = document.getElementById("myFan");
turn += 60;
x.style.transform = "rotate("+ (turn % 360) +"deg)"
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<img id="myFan" src="http://www.pngmart.com/files/7/Ceiling-Fan-PNG-Transparent-Image.png" width="200" heigh="100"><br>
<button id="on" onclick="turnOn()"> On </button><br>
<button id="off" onclick="turnOff()"> Off </button>
</body>
</html>
使用 CSS 动画和 animation-play-state
您可以使用 CSS 动画轻松、连续且高效地旋转图像。为了不让动画马上播放,可以将animation-play-state
CSS属性设置为paused
。当你想让动画播放——让风扇旋转——你可以取消设置 animation-play-state
或将其设置为 running
.
如何使它易于访问
您可以根据图像对用户的外观(即旋转与否)设置图像的 alt
属性。要让用户知道此更改,您应该设置 aria-live="polite"
以便辅助技术大声朗读替代文本。
为了使 on/off 按钮更易于访问,您有几个选择。一种选择是在最后按下的按钮上设置 display: none
。另一种选择是在最后按下的按钮上将 disabled
设置为 true
。最后,您可以使用一个按钮来打开和关闭它,在其上设置 aria-live="polite"
,然后将文本从“打开风扇”更改为“关闭风扇”,反之亦然。
let fanStatus = 'off'
on.addEventListener('click', () => {
if (fanStatus === 'off') {
rotateMe.classList.remove('paused')
rotateMe.alt = 'spinning bladed fan'
on.disabled = true
off.disabled = false
}
})
off.addEventListener('click', () => {
if (fanStatus === 'off') {
rotateMe.classList.add('paused')
rotateMe.alt = 'bladed fan'
on.disabled = false
off.disabled = true
}
})
img {
width: 90px;
height: 90px;
}
.rotate {
animation: rotate 0.75s infinite linear;
}
.paused {
animation-play-state: paused;
}
@keyframes rotate {
100% {
transform: rotate(-360deg);
}
}
<img
src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcScQe7tlEzE58so4n8IIn3LjKI2JCq_HIckHg&usqp=CAU"
alt="bladed fan"
id="rotateMe"
class="rotate paused"
aria-live="polite"
/>
<button id="on" aria-live="polite">Turn on fan</button>
<button id="off" aria-live="polite" disabled>Turn off fan</button>
我已经在我的一个项目中实现了这个:
function rotate90 (img){
var img=this
if (img.style.transform == ""){var x=90;
window.localStorage.setItem("x", Number(x))
}
else{
var x = Number(window.localStorage.getItem("x"))
x += 90;
if (x==360){x=0}
window.localStorage.setItem("x", Number(x))
}
img.style.transform ="rotate("+x+"deg)";
}
在您的代码中使用 img.onclick=rotate90;
它应该可以工作。