javascript - 如何使用 Javascript 旋转这张卡片?
问题描述
大家好,我是开发新手。谁能告诉我如何在向右或向左拖动时旋转其 Y 轴?
我不知道该怎么做。请帮我。
我只希望每当我向右或向左拖动它时它应该滑动。我希望你会明白这一点。
这是我的代码
/* @import url(https://fonts.googleapis.com/css?family=Hind+Siliguri:300,600|Martel:400,900); */
@import url('https://fonts.googleapis.com/css2?family=Nanum+Gothic&display=swap');
* {
margin: 0px;
padding: 0px;
/* font-family:"Hind Siliguri",Helvetica,Arial,sans-serif; */
font-family: 'Nanum Gothic', sans-serif;
font-weight: normal;
box-sizing: border-box;
}
header {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100vh;
overflow: hidden;
background: linear-gradient(to left, #56c1ea, #212529);
/* background-size: 400%; */
/* opacity: 0.8; */
/* background-color:black; */
}
.container {
overflow: hidden;
height: 50vh;
width: 50%;
left: 50%;
top: 50%;
position: absolute;
opacity: 0.7;
transform: translate(-50%, -50%);
/* background-color: blue; */
}
.container>img {
position: absolute;
width: 100%;
height: 50vh;
}
.ctn {
position: absolute;
width: 100%;
bottom: 20%;
left: 0;
display: grid;
place-items: center;
}
.loader {
border: 5px solid #f3f3f3;
/* Light grey */
border-top: 5px solid #56c1ea;
/* Blue */
border-radius: 50%;
width: 35px;
height: 35px;
animation: spin 2s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.box {
position: absolute;
bottom: 10%;
left: 0;
width: 100%;
display: grid;
place-items: center;
height: 80px;
/* background-color: blueviolet; */
overflow: hidden;
z-index: 1;
}
.box>h1 {
display: inline-flex;
place-items: center;
color: white;
position: absolute;
left: 10%;
}
.box>h1>span {
font-size: 70px;
color: white;
}
.imgg {
position: absolute;
left: 0;
top: 0;
height: 100vh;
width: auto;
z-index: 1;
transform: rotate(90deg);
}
.searcher {
position: absolute;
left: 2%;
top: 0;
height: 50vh;
width: auto;
/* background-color: blue; */
overflow: hidden;
display: grid;
place-items: center;
z-index: 1;
}
.searcher .sbox {
/* background-color: yellow; */
height: 80px;
width: auto;
display: grid;
place-items: center;
padding: 5px 25px;
}
.sbox input {
border: none;
color: black;
background-color: white;
border-radius: 100px;
padding: 5px 20px;
width: 400px;
height: 40px;
}
.sbox h1 {
color: white;
font-size: 25px;
}
.sbox .search {
position: relative;
overflow: hidden;
cursor: pointer;
}
.sbox span {
display: grid;
place-items: center;
position: absolute;
right: 0;
top: 0;
height: 100%;
width: 20%;
color: #56c1ea;
}
.car {
position: absolute;
right: 10%;
bottom: 0;
background-color: black;
overflow: hidden;
height: 50vh;
width: 50%;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
}
.cara {
position: relative;
width: 200px;
height: 200px;
transform-style: preserve-3d;
/* animation: animate 20s linear infinite; */
transform: perspective(1000px) rotateY(0deg);
}
@keyframes animate {
0% {
transform: perspective(1000px) rotateY(0deg);
}
100% {
transform: perspective(1000px) rotateY(360deg);
}
}
.cara span {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
transform-origin: center;
transform-style: preserve-3d;
transform: rotateY(calc(var(--i) * 45deg)) translateZ(400px);
}
.cara span img {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
object-fit: cover;
/* cursor:pointer; */
transition: 0.7s;
}
.cara span img:hover {
transform: scale(1.5);
}
<div class="car">
<div class="cara">
<span class="slide" style="--i:1;"><img src="../assets/images/1 (1).jpg" alt=""></span>
<span class="slide" style="--i:2;"><img src="../assets/images/1 (2).jpg" alt=""></span>
<span class="slide" style="--i:3;"><img src="../assets/images/1 (3).jpg" alt=""></span>
<span class="slide" style="--i:4;"><img src="../assets/images/1 (4).jpg" alt=""></span>
<span class="slide" style="--i:5;"><img src="../assets/images/1 (5).jpg" alt=""></span>
<span class="slide" style="--i:6;"><img src="../assets/images/1 (6).jpg" alt=""></span>
<span class="slide" style="--i:7;"><img src="../assets/images/default.png" alt=""></span>
<span class="slide" style="--i:8;"><img src="../assets/images/joker-official-movie-poster-1567011412.jpg" alt=""></span>
</div>
</div>
这也是它的图像,每当我向左或向右拖动时,我都想滑动它。
解决方案
这不是一个真正的拖拽事件情况。如果鼠标向下然后移动,则旋转木马将被旋转。
要感知鼠标在轮播上的移动(或触摸移动),我们必须在其上设置事件侦听器以感知鼠标何时按下(或 touchstart)、鼠标移动以及鼠标何时抬起(touchend)。
轮播变换设置为将其旋转相等的度数。在这个片段中,度数设置为移动量(以屏幕上的像素为单位)除以 10,只是为了抑制它,否则它会旋转。
幻灯片已被赋予背景颜色,只是为了让问题中的代码更明显,因为问题中的代码不包括实际图像。
const car = document.querySelector('.car');
const cara = document.querySelector('.cara');
let started = false; //set true when mouse goes down
let degrees = 0; //the number of degrees cara is currently rotated
let lastX;
//The event listeners
function start(e) {
lastX = e.pageX;
started = true;
}
function move(e) {
e.preventDefault();
e.stopPropagation();
if (started) {
let newX = e.pageX;
degrees += (newX - lastX) / 10;//10 is just to dampen down the movement
cara.style.transform = 'perspective(1000px) rotateY(' + degrees + 'deg)';
lastX = newX;
}
}
function stop(e) {
started = false;
}
car.addEventListener('mousedown', e => { start(e); });
car.addEventListener('mousemove', e => { move(e); });
car.addEventListener('mouseup', e => { stop(e); });
car.addEventListener('touchstart', e => { start(e); });
car.addEventListener('touchmove', e => { move(e); });
car.addEventListener('touchend', e => { stop(e); });
/* @import url(https://fonts.googleapis.com/css?family=Hind+Siliguri:300,600|Martel:400,900); */
@import url('https://fonts.googleapis.com/css2?family=Nanum+Gothic&display=swap');
* {
margin: 0px;
padding: 0px;
/* font-family:"Hind Siliguri",Helvetica,Arial,sans-serif; */
font-family: 'Nanum Gothic', sans-serif;
font-weight: normal;
box-sizing: border-box;
}
header {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100vh;
overflow: hidden;
background: linear-gradient(to left, #56c1ea, #212529);
/* background-size: 400%; */
/* opacity: 0.8; */
/* background-color:black; */
}
.container {
overflow: hidden;
height: 50vh;
width: 50%;
left: 50%;
top: 50%;
position: absolute;
opacity: 0.7;
transform: translate(-50%, -50%);
/* background-color: blue; */
}
.container>img {
position: absolute;
width: 100%;
height: 50vh;
}
.ctn {
position: absolute;
width: 100%;
bottom: 20%;
left: 0;
display: grid;
place-items: center;
}
.loader {
border: 5px solid #f3f3f3;
/* Light grey */
border-top: 5px solid #56c1ea;
/* Blue */
border-radius: 50%;
width: 35px;
height: 35px;
animation: spin 2s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.box {
position: absolute;
bottom: 10%;
left: 0;
width: 100%;
display: grid;
place-items: center;
height: 80px;
/* background-color: blueviolet; */
overflow: hidden;
z-index: 1;
}
.box>h1 {
display: inline-flex;
place-items: center;
color: white;
position: absolute;
left: 10%;
}
.box>h1>span {
font-size: 70px;
color: white;
}
.imgg {
position: absolute;
left: 0;
top: 0;
height: 100vh;
width: auto;
z-index: 1;
transform: rotate(90deg);
}
.searcher {
position: absolute;
left: 2%;
top: 0;
height: 50vh;
width: auto;
/* background-color: blue; */
overflow: hidden;
display: grid;
place-items: center;
z-index: 1;
}
.searcher .sbox {
/* background-color: yellow; */
height: 80px;
width: auto;
display: grid;
place-items: center;
padding: 5px 25px;
}
.sbox input {
border: none;
color: black;
background-color: white;
border-radius: 100px;
padding: 5px 20px;
width: 400px;
height: 40px;
}
.sbox h1 {
color: white;
font-size: 25px;
}
.sbox .search {
position: relative;
overflow: hidden;
cursor: pointer;
}
.sbox span {
display: grid;
place-items: center;
position: absolute;
right: 0;
top: 0;
height: 100%;
width: 20%;
color: #56c1ea;
}
.car {
position: absolute;
right: 10%;
bottom: 0;
background-color: black;
overflow: hidden;
height: 50vh;
width: 50%;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
}
.cara {
position: relative;
width: 200px;
height: 200px;
transform-style: preserve-3d;
/*animation: animate 20s linear infinite; */
transform: perspective(1000px) rotateY(0deg);
}
@keyframes animate {
0% {
transform: perspective(1000px) rotateY(0deg);
}
100% {
transform: perspective(1000px) rotateY(360deg);
}
}
.cara span {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
transform-origin: center;
transform-style: preserve-3d;
transform: rotateY(calc(var(--i) * 45deg)) translateZ(400px);
}
.cara span img {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
object-fit: cover;
/* cursor:pointer; */
transition: 0.7s;
}
.cara span img:hover {
transform: scale(1.5);
}
<div class="car">
<div class="cara">
<span class="slide" style="--i:1; background:blue;"><img src="../assets/images/1 (1).jpg" alt=""></span>
<span class="slide" style="--i:2; background:red;"><img src="../assets/images/1 (2).jpg" alt=""></span>
<span class="slide" style="--i:3; background:green;"><img src="../assets/images/1 (3).jpg" alt=""></span>
<span class="slide" style="--i:4; background:magenta;"><img src="../assets/images/1 (4).jpg" alt=""></span>
<span class="slide" style="--i:5; background:cyan;"><img src="../assets/images/1 (5).jpg" alt=""></span>
<span class="slide" style="--i:6; background:yellow;"><img src="../assets/images/1 (6).jpg" alt=""></span>
<span class="slide" style="--i:7; background:purple;"><img src="../assets/images/default.png" alt=""></span>
<span class="slide" style="--i:8; background:pink;"><img src="../assets/images/joker-official-movie-poster-1567011412.jpg" alt=""></span>
</div>
</div>
推荐阅读
- mongodb - MongoDB 在集合的每个文档中过滤数组字段
- python - 将numpy数组读取为全部小写
- javascript - javascript - 如何在数组中添加具有值的新项目
- python - 如何检查文件中的字符串是否包含某些字符?
- ruby - 如何计算我的 RSpec 测试中的示例数量?
- android - 在 Android Studio 中将 java 库转换为 Android 库
- c# - 从不在调试中的文件夹中获取 txt 文件的问题
- graphviz - 在水平线上指定节点
- r - 直到单词第一次出现的数据集
- ios - 我们为 AVCaptureSession 选择哪种像素格式类型来使用 Vision 运行 CoreML 模型是否重要?