Css 3d เปลี่ยนหมุน(x+y)โดยการใช้เมาส์ลาก

0

คำถาม

ฉันเพิ่งพุ่งเข้ามาในโลกของ css กลายร่างและอยากจะหมุนภาพเป็น div(x และแกน y),ฉันสามารถทำมันกับ 2 บนแถบเลื่อนกับ 0 เพื่อ 360 ปริญญาช่วงแต่ตอนนี้กำลังตั้งตารอจะทำยังไงกับมันลากตัวชี้ของเมาส์มาอยู่เหฉันต้องทำเป็นสะเพร่ามากความพยายามอยู่บนนั้นกำลังหาคำแนะนำอย่างเพื่อซ่อมมัน:

jsfiddle เชื่อมโยงไปยังทดสอบ

"use strict";

let elContainer = $('#container');
let elBox = $('#box');

$(document).ready(function() {
  $('.slider-rotate').on('input', function() {
    sliderRotate();
  });

  elContainer.mousedown(function(e) {
    initDragRotate(e);
  });

  elContainer.mousemove(function(e) {
    dragRotate(e);
  });

  elContainer.mouseup(function(e) {
    endDragRotate();
  });

});

let dragging = false;
let delta = {};

function initDragRotate(e) {
  dragging = true;
  delta = {
    x: e.pageX,
    y: e.pageY,
  };
}

function dragRotate(e) {
  if (!dragging) {
    return;
  }

  delta.x = e.pageX - delta.x;
  delta.y = e.pageY - delta.y;

  let rotateParam = '';
  rotateParam += ' rotate' + 'Y' + '(' + delta.x + 'deg)';
  rotateParam += ' rotate' + 'X' + '(' + delta.y + 'deg)';
  elBox.css('transform', rotateParam);
}

function endDragRotate() {
  if (!dragging) {
    return;
  }

  dragging = false;
}


function sliderRotate() {
  let rotateParam = '';
  $('.slider-rotate').each(function() {
    rotateParam += ' ' + getRotateParamString($(this));
  });
  elBox.css('transform', rotateParam);
}

function getRotateParamString(elClass) {
  let val = elClass.val();
  let rotateType = elClass.data('rotateType');
  let rotateParam = 'rotate' + rotateType + '(' + val + 'deg)';

  return rotateParam;
}
#container {
  background: #ccc;
  padding: 10vh;
  display: flex;
  align-items: center;
  justify-content: center;
}

#box {
  width: 30vh;
  height: 30vh;
  border: 5px solid #000;
  position: relative;
  transform-style: preserve-3d;
}

#box>div {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
  <div id="box">
    <div style="background: #f00;"></div>
    <div style="background: #0f0;"></div>
  </div>
</div>

<div id="control">
  <br>
  <label>
    x
    <input type="range" class="slider-rotate" data-rotate-type="X" min="0" max="360" value="0">
  </label>
  <br>
  <label>
    y
    <input type="range" class="slider-rotate" data-rotate-type="Y" min="0" max="360" value="0">
  </label>
</div>

ยังมีอยู่ 2 div อยู่ด้านบนและด้านล่าง(สีเขียวและสีแดง)กับกลายร่าง-รูปแบบรักษา-3 มิติทรัพย์สินหวังว่ามันแสดงอีกคนสีเมื่อมนุษย์แต่ไม่มีโชค! ได้โปรดแนะนำขอบคุณ!

css javascript jquery transform
2021-11-24 05:19:51
1

คำตอบที่ดีที่สุด

0

ที่ calulation สำหรับมากกว่าจะหมุนไปหน่อยแปลก

ผมเชื่อว่าสิ่งที่คุณต้องการคือมีจำนวนเงินโดบประมาณของการหมุนต้องขึ้นอยู่กับจำนวอนตัวชี้ของเมาส์มาอยู่เหคือวางไว้ทั่วและลองจอภาพด้วย ที่จะทำให้เรื่องนี้ตัวความกว้างคงที่ให้ความละเอียดในการแสดงผลคุณต้องการเพื่อแบ่งมันโดยที่ความละเอียดในการแสดงผลและจากนั้นเพิ่มพูนขึ้น\มันโดย 360 ที่เต็มไปด้วช่วงจาก pageX/Y เป็น 0 จะเป็นที่ที่ถูกต้อง/งด้านล่างของจอภาพด้วย

"use strict";

let elContainer = $('#container');
let elBox = $('#box');

$(document).ready(function() {
  $('.slider-rotate').on('input', function() {
    sliderRotate();
  });

  elContainer.mousedown(function(e) {
    initDragRotate(e);
  });

  elContainer.mousemove(function(e) {
    dragRotate(e);
  });

  elContainer.mouseup(function(e) {
    endDragRotate();
  });

});

let dragging = false;
let delta = {};

function initDragRotate(e) {
  dragging = true;
  delta = {
    x: e.pageX,
    y: e.pageY,
  };
}

function dragRotate(e) {
  if (!dragging) {
    return;
  }
  // THIS IS THE CALCULATION THAT HAS CHANGED
  delta.x = e.pageX / window.innerWidth * 360; //- delta.x;
  delta.y = e.pageY / window.innerHeight * 360; // - delta.y;

  let rotateParam = '';
  rotateParam += ' rotate' + 'Y' + '(' + delta.x + 'deg)';
  rotateParam += ' rotate' + 'X' + '(' + delta.y + 'deg)';
  elBox.css('transform', rotateParam);
}

function endDragRotate() {
  if (!dragging) {
    return;
  }

  dragging = false;
}


function sliderRotate() {
  let rotateParam = '';
  $('.slider-rotate').each(function() {
    rotateParam += ' ' + getRotateParamString($(this));
  });
  elBox.css('transform', rotateParam);
}

function getRotateParamString(elClass) {
  let val = elClass.val();
  let rotateType = elClass.data('rotateType');
  let rotateParam = 'rotate' + rotateType + '(' + val + 'deg)';

  return rotateParam;
}
#container {
  background: #ccc;
  padding: 10vh;
  display: flex;
  align-items: center;
  justify-content: center;
}

#box {
  width: 30vh;
  height: 30vh;
  border: 5px solid #000;
  position: relative;
  transform-style: preserve-3d;
}

#box>div {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
  <div id="box">
    <div style="background: #f00;"></div>
    <div style="background: #0f0;"></div>
  </div>
</div>

<div id="control">
  <br>
  <label>
    x
    <input type="range" class="slider-rotate" data-rotate-type="X" min="0" max="360" value="0">
  </label>
  <br>
  <label>
    y
    <input type="range" class="slider-rotate" data-rotate-type="Y" min="0" max="360" value="0">
  </label>
</div>

2021-11-24 07:00:06

มีคำแนะนำอย่างอยู่ทำไมสีแดง(the div ที่กลับมา)มันไม่แสดงบนหมุนหรือฉันควรจะสร้างคำถามที่แตกต่างหรอ?
Nishu Ali

ที่จริงมันอาจจะดีกว่านี้เพื่อสร้างใหม่คำถามอย่างที่มันเป็นต่างออกปัญหา
A Haworth

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่