css3可拖动的魔方3d

主要用到知识点:

  • css3 3d转换
  • 原生js鼠标拖动事件
  • display:grid 布局

实现的功能

  • 3d魔方 可点击,可拖动
  • 直接看效果

html:

  1. <div class="container">
  2. <div class="box defaul">
  3. <div class="pic"><img src="./img/cat.jpg" alt=""></div>
  4. <div class="pic"><img src="./img/dog.jpg" alt=""></div>
  5. <div class="pic"><img src="./img/elephant.jpg" alt=""></div>
  6. <div class="pic"><img src="./img/lion.jpg" alt=""></div>
  7. <div class="pic"><img src="./img/rabbit.jpg" alt=""></div>
  8. <div class="pic"><img src="./img/monkey.jpg" alt=""></div>
  9. </div>
  10. </div>
  11. <h1>点击下面的图片按钮切换</h1>
  12. <div class="btn">
  13. <input type="image" class="1" src="./img/cat.jpg">
  14. <input type="image" class="2" src="./img/dog.jpg">
  15. <input type="image" class="3" src="./img/elephant.jpg">
  16. <input type="image" class="4" src="./img/lion.jpg">
  17. <input type="image" class="5" src="./img/rabbit.jpg">
  18. <input type="image" class="6" src="./img/monkey.jpg">
  19. </div>

css:

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. }
  5. html,
  6. body {
  7. width: 100%;
  8. height: 100%;
  9. background: #66677c;
  10. text-align: center;
  11. }
  12. .container {
  13. width: 300px;
  14. height: 300px;
  15. margin: 50px auto 150px;
  16. perspective: 1200px;
  17. }
  18. .container .box {
  19. width: 300px;
  20. height: 300px;
  21. position: relative;
  22. transform-style: preserve-3d;
  23. transition: transform 0.5s;
  24. }
  25. .container .box .pic {
  26. position: absolute;
  27. left: 0;
  28. top: 0;
  29. width: 300px;
  30. height: 300px;
  31. box-shadow: 0px 0px 5px #fff;
  32. }
  33. .container .box .pic img {
  34. width: 100%;
  35. height: 100%;
  36. cursor: pointer;
  37. }
  38. .container .box .pic:nth-child(1) {
  39. transform: translateZ(150px);
  40. }
  41. .container .box .pic:nth-child(2) {
  42. transform: rotateY(-180deg) translateZ(150px);
  43. }
  44. .container .box .pic:nth-child(3) {
  45. transform: rotateY(90deg) translateZ(150px);
  46. }
  47. .container .box .pic:nth-child(4) {
  48. transform: rotateY(-90deg) translateZ(150px);
  49. }
  50. .container .box .pic:nth-child(5) {
  51. transform: rotateX(90deg) translateZ(150px);
  52. }
  53. .container .box .pic:nth-child(6) {
  54. transform: rotateX(-90deg) translateZ(150px);
  55. }
  56. h1 {
  57. color: #fff;
  58. font-size: 30px;
  59. margin-bottom: 30px;
  60. }
  61. .btn {
  62. display: grid;
  63. justify-content: center;
  64. grid-template-columns: 100px 100px 100px;
  65. grid-template-rows: 100px 100px;
  66. grid-gap: 15px;
  67. }
  68. .btn input {
  69. width: 100px;
  70. height: 100px;
  71. outline: none;
  72. border: 2px solid #fff;
  73. }
  74. .btn input:focus {
  75. border: 2px solid #e70;
  76. }
  77. .defaul {
  78. transform: translateZ(-150px) rotateX(-10deg) rotateY(15deg);
  79. }
  80. .image1 {
  81. transform: translateZ(-150px) rotateX(0deg) rotateY(0deg);
  82. }
  83. .image2 {
  84. transform: translateZ(-150px) rotateY(-180deg);
  85. }
  86. .image3 {
  87. transform: translateZ(-150px) rotateY(-90deg);
  88. }
  89. .image4 {
  90. transform: translateZ(-150px) rotateY(90deg);
  91. }
  92. .image5 {
  93. transform: translateZ(-150px) rotateX(-90deg);
  94. }
  95. .image6 {
  96. transform: translateZ(-150px) rotateX(90deg);
  97. }

js:

  1. (function(){
  2. var btn = document.getElementsByClassName('btn')[0];
  3. var box = document.getElementsByClassName('box')[0];
  4. btn.addEventListener('click',function(e){
  5. var className = e.target.className;
  6. if(className !== 'btn'){
  7. box.style = '';
  8. box.classList.replace(box.classList[1],'image'+className);
  9. }
  10. })
  11. //鼠标拖动效果
  12. var xN = 10, yN = 15;
  13. document.addEventListener('mousedown',function(e){
  14. e.preventDefault();
  15. e.stopPropagation();
  16. var x = e.clientX;
  17. var y = e.clientY;
  18. document.addEventListener('mousemove',move);
  19. document.addEventListener('mouseup', up);
  20. function move(e){
  21. e.preventDefault();
  22. e.stopPropagation();
  23. var x1 = e.clientX;
  24. var y1 = e.clientY;
  25. xN += (x1 - x)*0.04;
  26. yN += (y1 - y)*0.04;
  27. box.style.transform = 'translateZ(-150px) rotateY(' + xN + 'deg) rotateX(' + -yN + 'deg)';
  28. }
  29. function up(){
  30. document.removeEventListener('mousemove', move);
  31. }
  32. })
  33. })()

参考自:腾讯课堂渡一教育

css3可拖动的魔方3d的更多相关文章

  1. 利用纯CSS3实现超立体的3D图片侧翻倾斜效果

    原文:利用纯CSS3实现超立体的3D图片侧翻倾斜效果 上午的时候我在jQuery论坛上看到网友分享的一款CSS3 3D图片侧翻倾斜特效,觉得效果非常棒,其实话说回来,这玩意儿的实现真的非常简单,主要是 ...

  2. js+css3+HTML5拖动滑块(type="range")改变值

    最近在做一个H5的改版项目,产品和设计给出的效果中有一个拖动滑块可以改变输入值的效果,类似如下图这样: 拿到这样的设计稿后,我有点懵了,自己写一个js?去网上找一个这样的效果?自己写一个可以,只是实现 ...

  3. 一款纯css3实现的超炫3D表单

    今天要给大家分享一款纯css3实现的超炫3D表单.该特效页面的加载的时候3d四十五度倾斜,当鼠标经过的时候表单动画回正.效果非常炫,一起看下效果图: 在线预览   源码下载 实现的代码. html代码 ...

  4. 纯CSS3实现一个旋转的3D立方体盒子

    简单介绍 上网易前端微专业课程,里面有一个课外作业是实现一个3D旋转立方体.花了点时间做了下.还有点意思.写个简单教程.供大家学习. 先放上终于要实现的效果 注:代码在chrome 43.0.2357 ...

  5. css3实现酷炫的3D盒子翻转效果

    简介 运用css3先在平面空间组成立方体盒子,再让整个盒子翻转起来,先来张效果图: 步骤 1.先用css将6张图片摆成下图的样子: 下面就是通过css3的3D变换将每个面进行翻转,使之成为一个立体的盒 ...

  6. CSS3基础 02(2D /3D)

    一.2D转换 概念:就是元素在2D平面上实现移动,旋转,缩放,斜切的操作就称之为2D转换 语法:transform:值 值:移动,旋转,缩放,斜切 (1.1)移动 transform:translat ...

  7. 纯CSS3实现超立体的3D图片侧翻倾斜效果

    看到网友分享的一款CSS3 3D图片侧翻倾斜特效,觉得效果非常棒,其实话说回来,这玩意儿的实现真的非常简单,主要是创意不错.先来看看效果图.那么接下来我们分析一下源码吧,显示html代码,非常简单: ...

  8. HTML5 CSS3 诱人的实例: 3D立方体旋转动画

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/34120047 创意来自:http://www.html5tricks.com/d ...

  9. 前端笔记之HTML5&CSS3(下)2D/3D转换&animate动画

    一.2D转换(transform) CSS3中的transform转换和PS中的变换是一样的,分别有:缩放.位移.斜切.旋转 1.1 transform:scale()缩放 transform:sca ...

随机推荐

  1. Alpha总体规划 & 任务分解

    目录 Alpha阶段项目目标 任务拆解和优先级 总体规划 Alpha-1任务分配 Alpha-2任务分配 Alpha阶段项目目标 初步实现北航社团小程序: 北航社团小程序基础功能(优先级中的高两级,即 ...

  2. 第06组 Alpha事后诸葛亮

    一.组长博客: https://www.cnblogs.com/mhq-mhq/p/11923194.html 二.Postmortem模板 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚 ...

  3. 剑指offer:字符流中第一个不重复的字符

    题目描述: 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读 ...

  4. numpy模块常用函数解析

    https://blog.csdn.net/lm_is_dc/article/details/81098805 numpy模块以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter note ...

  5. 009-MySQL循环while、repeat、loop使用

    一.循环使用 mysql常见的三种循环方式:while.repeat和loop循环.还有一种goto,不推荐使用. 前提1.创建基本表结构 # 创建表结构 drop table if exists ` ...

  6. Angularjs Select获取数组下标

    一.定义资源 //资源类型 $scope.status=['项目测试','开发工具','安装包','工作计划','测试项目','我的游戏','我的音乐','博客首页图片']; 二.没错直接用  {{$ ...

  7. [Tableau] Tableau for BI

    主要链接 Tableau AWS 上的 Tableau Server Tableau on AWS Quick Starts Tableau教程[本篇来源] Tableau Desktop for U ...

  8. 自定义Shell分隔符

    在shell中使用for循环语句时,参数列表有时候需要将空格纳入参数当中,这时就不好使用空格作为分隔符.如下例中,我实际想要输出的是a1.a2.b1.b2以及hello world,但却输出了如下内容 ...

  9. 【翻译】Flink Table Api & SQL —Streaming 概念 ——动态表

    本文翻译自官网:Flink Table Api & SQL 动态表 https://ci.apache.org/projects/flink/flink-docs-release-1.9/de ...

  10. [LeetCode] 245. Shortest Word Distance III 最短单词距离 III

    This is a follow up of Shortest Word Distance. The only difference is now word1 could be the same as ...