纯css实现三维立体圆球操纵杆交互效果

代码语言:html

所属分类:三维

代码描述:纯css实现三维立体圆球操纵杆交互效果

代码标签: 三维 立体 圆球 操纵杆 交互 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">

<style>
/*--------------- COLORS ---------------------*/
/*---------------------------------------------*/
html {
  min-height: 100%;
}

body {
  background: radial-gradient(at 25% 25%, #f2f2f2 0%, #d9d9d9 100%);
  min-height: 100%;
}

.joystick {
  background: radial-gradient(at 75% 75%, #f2f2f2 0%, #d9d9d9 100%);
  box-shadow: 0 -5px 5px rgba(255, 255, 255, 0.1), 0 5px 5px rgba(255, 255, 255, 0.05), inset 0 5px 5px rgba(0, 0, 0, 0.02), inset 0 -5px 5px rgba(255, 255, 255, 0.05);
  position: absolute;
  height: 200px;
  width: 200px;
  border-radius: 50%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.joystick__ball {
  background: radial-gradient(at 25% 25%, #f2f2f2 0%, #d9d9d9 100%);
  position: absolute;
  height: 70%;
  width: 70%;
  border-radius: 50%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  transform-style: preserve-3d;
  perspective: 1000px;
  box-shadow: inset -5px -10px 40px rgba(0, 0, 0, 0.05), inset 0px 0px 10px rgba(0, 0, 0, 0.3), inset 0px 0px 5px rgba(0, 0, 0, 0.5), inset 0px 0px 3px 1px rgba(0, 0, 0, 0.51), 0px 0px 10px rgba(0, 0, 0, 0.3);
}
.joystick__zero {
  position: absolute;
  z-index: 4;
  height: 30%;
  width: 30%;
  border-radius: 50%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.joystick__stick {
  background: radial-gradient(at 50% 75%, #f2f2f2 0%, #d9d9d9 100%);
  box-shadow: inset 5px 5px 10px rgba(255, 255, 255, 0.3), inset -5px -5px 10px rgba(0, 0, 0, 0.15), 0 2px 10px -5px rgba(0, 0, 0, 0.7), 0 4px 20px -10px rgba(0, 0, 0, 0.2), -50px 0 40px -20px rgba(0, 0, 0, 0.2), 50px 50px 40px -20px rgba(0, 0, 0, 0.2);
  position: absolute;
  z-index: 2;
  height: 50%;
  width: 50%;
  border-radius: 50%;
  top: 50%;
  left: 50%;
  margin: -25% -25%;
  transition: 200ms ease all;
}
.joystick__stick:before {
  content: '';
  background: #fff;
  position: absolute;
  top: 10px;
  left: 49px;
  width: 3px;
  height: 3px;
  border-radius: 50%;
  box-shadow: 0 2px 3px #000, 39px 40px #fff, 39px 42px 3px #000, 0px 80px #fff, 0px 82px 3px #000, -39px 40px #fff, -39px 42px 3px #000;
  opacity: 0.15;
}
.joystick__stick:after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 50%;
  height: 50%;
  margin: -25% -25%;
  border-radius: 50%;
  box-shadow: -5px -5px 20px -10px;
  filter: blur(5px);
  opacity: 0.4;
}
.joystick__hover {
  position: absolute;
  z-index: 3;
  width: 12%;
  height: 50%;
  left: 50%;
  margin-left: -6%;
  transform-origin: 50% 100%;
}
.joystick__hover.hover-1 {
  transform: rotate(0deg);
}
.joystick__hover.hover-1:hover ~ .joystick__stick, .joystick__hover.hover-1:focus ~ .joystick__stick {
  transform: translate(0%, -50%) rotateX(-25deg) rotateY(0deg);
  box-shadow: inset 0px -12.5px 10px rgba(255, 255, 255, 0.3), inset 0px 12.5px 10px rgba(0, 0, 0, 0.15), 0 2px 10px -5px rgba(0, 0, 0, 0.7), 0 4px 20px -10px rgba(0, 0, 0, 0.2), -25px 0 40px -20px rgba(0, 0, 0, 0.2), 25px 50px 40px -20px rgba(0, 0, 0, 0.2);
}
.joystick__hover.hover-1:hover ~ .joystick__stick:after, .joystick__hover.hover-1:focus ~ .joystick__stick:after {
  box-shadow: 0px 12.5px 20px -10px;
}
.joystick__hover.hover-1:hover ~ .led-1, .joystick__hover.hover-1:focus ~ .led-1 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-1, .joystick__hover.hover-1:focus ~ .led-1 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-2, .joystick__hover.hover-1:focus ~ .led-2 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-28, .joystick__hover.hover-1:focus ~ .led-28 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-3, .joystick__hover.hover-1:focus ~ .led-3 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-27, .joystick__hover.hover-1:focus ~ .led-27 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-4, .joystick__hover.hover-1:focus ~ .led-4 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-26, .joystick__hover.hover-1:focus ~ .led-26 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-5, .joystick__hover.hover-1:focus ~ .led-5 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-25, .joystick__hover.hover-1:focus ~ .led-25 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-6, .joystick__hover.hover-1:focus ~ .led-6 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-24, .joystick__hover.hover-1:focus ~ .led-24 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-1:hover ~ .led-23, .joystick__hover.hover-1:focus ~ .led-23 {
  background: rgba(255, 255, 255, 0.5);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
}
.joystick__hover.hover-1:hover ~ .led-22, .joystick__hover.hover-1:focus ~ .led-22 {
  background: rgba(255, 255, 255, 0.1);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
}
.joystick__hover.hover-1:hover ~ .led-7,
.joystick__hover.hover-1:hover ~ .led--5, .joystick__hover.hover-1:focus ~ .led-7,
.joystick__hover.hover-1:focus ~ .led--5 {
  background: rgba(255, 255, 255, 0.5);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
}
.joystick__hover.hover-1:hover ~ .led-8,
.joystick__hover.hover-1:hover ~ .led--6, .joystick__hover.hover-1:focus ~ .led-8,
.joystick__hover.hover-1:focus ~ .led--6 {
  background: rgba(255, 255, 255, 0.1);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
}
.joystick__hover.hover-2 {
  transform: rotate(12.8571429deg);
}
.joystick__hover.hover-2:hover ~ .joystick__stick, .joystick__hover.hover-2:focus ~ .joystick__stick {
  transform: translate(11.1260467343%, -48.7463956008%) rotateX(-24.3731978004deg) rotateY(-5.5630233671deg);
  box-shadow: inset 2.7815116836px -12.1865989002px 10px rgba(255, 255, 255, 0.3), inset -2.7815116836px 12.1865989002px 10px rgba(0, 0, 0, 0.15), 0 2px 10px -5px rgba(0, 0, 0, 0.7), 0 4px 20px -10px rgba(0, 0, 0, 0.2), -24.3731978004px 0 40px -20px rgba(0, 0, 0, 0.2), 24.3731978004px 50px 40px -20px rgba(0, 0, 0, 0.2);
}
.joystick__hover.hover-2:hover ~ .joystick__stick:after, .joystick__hover.hover-2:focus ~ .joystick__stick:after {
  box-shadow: -2.7815116836px 12.1865989002px 20px -10px;
}
.joystick__hover.hover-2:hover ~ .led-2, .joystick__hover.hover-2:focus ~ .led-2 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-2, .joystick__hover.hover-2:focus ~ .led-2 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-3, .joystick__hover.hover-2:focus ~ .led-3 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-1, .joystick__hover.hover-2:focus ~ .led-1 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-4, .joystick__hover.hover-2:focus ~ .led-4 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-28, .joystick__hover.hover-2:focus ~ .led-28 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-5, .joystick__hover.hover-2:focus ~ .led-5 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-27, .joystick__hover.hover-2:focus ~ .led-27 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-6, .joystick__hover.hover-2:focus ~ .led-6 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-26, .joystick__hover.hover-2:focus ~ .led-26 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-7, .joystick__hover.hover-2:focus ~ .led-7 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-25, .joystick__hover.hover-2:focus ~ .led-25 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-2:hover ~ .led-24, .joystick__hover.hover-2:focus ~ .led-24 {
  background: rgba(255, 255, 255, 0.5);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
}
.joystick__hover.hover-2:hover ~ .led-23, .joystick__hover.hover-2:focus ~ .led-23 {
  background: rgba(255, 255, 255, 0.1);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
}
.joystick__hover.hover-2:hover ~ .led-8,
.joystick__hover.hover-2:hover ~ .led--4, .joystick__hover.hover-2:focus ~ .led-8,
.joystick__hover.hover-2:focus ~ .led--4 {
  background: rgba(255, 255, 255, 0.5);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
}
.joystick__hover.hover-2:hover ~ .led-9,
.joystick__hover.hover-2:hover ~ .led--5, .joystick__hover.hover-2:focus ~ .led-9,
.joystick__hover.hover-2:focus ~ .led--5 {
  background: rgba(255, 255, 255, 0.1);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
}
.joystick__hover.hover-3 {
  transform: rotate(25.7142858deg);
}
.joystick__hover.hover-3:hover ~ .joystick__stick, .joystick__hover.hover-3:focus ~ .joystick__stick {
  transform: translate(21.6941870233%, -45.0484433627%) rotateX(-22.5242216813deg) rotateY(-10.8470935116deg);
  box-shadow: inset 5.4235467558px -11.2621108407px 10px rgba(255, 255, 255, 0.3), inset -5.4235467558px 11.2621108407px 10px rgba(0, 0, 0, 0.15), 0 2px 10px -5px rgba(0, 0, 0, 0.7), 0 4px 20px -10px rgba(0, 0, 0, 0.2), -22.5242216813px 0 40px -20px rgba(0, 0, 0, 0.2), 22.5242216813px 50px 40px -20px rgba(0, 0, 0, 0.2);
}
.joystick__hover.hover-3:hover ~ .joystick__stick:after, .joystick__hover.hover-3:focus ~ .joystick__stick:after {
  box-shadow: -5.4235467558px 11.2621108407px 20px -10px;
}
.joystick__hover.hover-3:hover ~ .led-3, .joystick__hover.hover-3:focus ~ .led-3 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-3, .joystick__hover.hover-3:focus ~ .led-3 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-4, .joystick__hover.hover-3:focus ~ .led-4 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-2, .joystick__hover.hover-3:focus ~ .led-2 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-5, .joystick__hover.hover-3:focus ~ .led-5 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-1, .joystick__hover.hover-3:focus ~ .led-1 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-6, .joystick__hover.hover-3:focus ~ .led-6 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-28, .joystick__hover.hover-3:focus ~ .led-28 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-7, .joystick__hover.hover-3:focus ~ .led-7 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-27, .joystick__hover.hover-3:focus ~ .led-27 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-8, .joystick__hover.hover-3:focus ~ .led-8 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-26, .joystick__hover.hover-3:focus ~ .led-26 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-3:hover ~ .led-25, .joystick__hover.hover-3:focus ~ .led-25 {
  background: rgba(255, 255, 255, 0.5);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
}
.joystick__hover.hover-3:hover ~ .led-24, .joystick__hover.hover-3:focus ~ .led-24 {
  background: rgba(255, 255, 255, 0.1);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
}
.joystick__hover.hover-3:hover ~ .led-9,
.joystick__hover.hover-3:hover ~ .led--3, .joystick__hover.hover-3:focus ~ .led-9,
.joystick__hover.hover-3:focus ~ .led--3 {
  background: rgba(255, 255, 255, 0.5);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
}
.joystick__hover.hover-3:hover ~ .led-10,
.joystick__hover.hover-3:hover ~ .led--4, .joystick__hover.hover-3:focus ~ .led-10,
.joystick__hover.hover-3:focus ~ .led--4 {
  background: rgba(255, 255, 255, 0.1);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
}
.joystick__hover.hover-4 {
  transform: rotate(38.5714287deg);
}
.joystick__hover.hover-4:hover ~ .joystick__stick, .joystick__hover.hover-4:focus ~ .joystick__stick {
  transform: translate(31.1744901807%, -39.0915740534%) rotateX(-19.5457870267deg) rotateY(-15.5872450903deg);
  box-shadow: inset 7.7936225452px -9.7728935134px 10px rgba(255, 255, 255, 0.3), inset -7.7936225452px 9.7728935134px 10px rgba(0, 0, 0, 0.15), 0 2px 10px -5px rgba(0, 0, 0, 0.7), 0 4px 20px -10px rgba(0, 0, 0, 0.2), -19.5457870267px 0 40px -20px rgba(0, 0, 0, 0.2), 19.5457870267px 50px 40px -20px rgba(0, 0, 0, 0.2);
}
.joystick__hover.hover-4:hover ~ .joystick__stick:after, .joystick__hover.hover-4:focus ~ .joystick__stick:after {
  box-shadow: -7.7936225452px 9.7728935134px 20px -10px;
}
.joystick__hover.hover-4:hover ~ .led-4, .joystick__hover.hover-4:focus ~ .led-4 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-4, .joystick__hover.hover-4:focus ~ .led-4 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-5, .joystick__hover.hover-4:focus ~ .led-5 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-3, .joystick__hover.hover-4:focus ~ .led-3 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-6, .joystick__hover.hover-4:focus ~ .led-6 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-2, .joystick__hover.hover-4:focus ~ .led-2 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-7, .joystick__hover.hover-4:focus ~ .led-7 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-1, .joystick__hover.hover-4:focus ~ .led-1 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-8, .joystick__hover.hover-4:focus ~ .led-8 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-28, .joystick__hover.hover-4:focus ~ .led-28 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-9, .joystick__hover.hover-4:focus ~ .led-9 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-27, .joystick__hover.hover-4:focus ~ .led-27 {
  background: #fff;
  box-shadow: 0 0 5px #fff;
}
.joystick__hover.hover-4:hover ~ .led-26, .joystick__hover.hover-4:focus ~ .led-26 {
  background: rgba(255, 255, 255, 0.5);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
}
.joystick__hover.hover-4:hover ~ .led-25, .joystick__hover.hover-4:focus ~ .led-25 {
  background: rgba(255, 255, 255, 0.1);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
}
.joystick__hover.hover-4:hover ~ .led-10,
.joystick__hover.hover-4:hover ~ .led--2, .joystick__hover.hover-4:focus ~ .led-10,
.joystick__hover.hover-4:focus ~ .led--2 {
  background: rgba(255, 255, 255, 0.5);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
}
.joystick__hover.hover-4:hover ~ .led-11,
.joystick__hover.hover-4:hover ~ .led--3, .joystick__hover.hover-4:focus ~ .led-11,
.joystick__hover.hover-4:focus ~ .led--3 {
  background: rgba(255, 255, 255, 0.1);
  box-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
}
.joystick__hover.hover-5 {
  transform: rotate(51.4285716deg);
}
.joystick__hover.hover-5:hover ~ .joystick__stick, .joystick__hover.hover-5:focus ~ .joystick__stick {
  transform: translate(39.0915742.........完整代码请登录后点击上方下载按钮下载查看

网友评论0