css3实现可拖动的魔方3d效果


Posted in HTML / CSS onMay 07, 2019

主要用到知识点:

•css3 3d转换 •原生js鼠标拖动事件

•display:grid 布局

实现的功能

•3d魔方 可点击,可拖动

•直接看效果

css3实现可拖动的魔方3d效果

html:  

<div class="container">
        <div class="box defaul">
            <div class="pic"><img src="./img/cat.jpg" alt=""></div>
            <div class="pic"><img src="./img/dog.jpg" alt=""></div>
            <div class="pic"><img src="./img/elephant.jpg" alt=""></div>
            <div class="pic"><img src="./img/lion.jpg" alt=""></div>
            <div class="pic"><img src="./img/rabbit.jpg" alt=""></div>
            <div class="pic"><img src="./img/monkey.jpg" alt=""></div>
        </div>
    </div>
    <h1>点击下面的图片按钮切换</h1>
    <div class="btn">
        <input type="image" class="1" src="./img/cat.jpg">
        <input type="image" class="2" src="./img/dog.jpg">
        <input type="image" class="3" src="./img/elephant.jpg">
        <input type="image" class="4" src="./img/lion.jpg">
        <input type="image" class="5" src="./img/rabbit.jpg">
        <input type="image" class="6" src="./img/monkey.jpg">
    </div>

css:  

* {
        margin: 0;
        padding: 0;
    }
    html,
    body {
        width: 100%;
        height: 100%;
        background: #66677c;
        text-align: center;
    }
    .container {
        width: 300px;
        height: 300px;
        margin: 50px auto 150px;
        perspective: 1200px;
    }
    .container .box {
        width: 300px;
        height: 300px;
        position: relative;
        transform-style: preserve-3d;
        transition: transform 0.5s;
    }
    .container .box .pic {
        position: absolute;
        left: 0;
        top: 0;
        width: 300px;
        height: 300px;
        box-shadow: 0px 0px 5px #fff;
    }
    .container .box .pic img {
        width: 100%;
        height: 100%;
        cursor: pointer;
    }
    .container .box .pic:nth-child(1) {
        transform: translateZ(150px);
    }
    .container .box .pic:nth-child(2) {
        transform: rotateY(-180deg) translateZ(150px);
    }
    .container .box .pic:nth-child(3) {
        transform: rotateY(90deg) translateZ(150px);
    }
    .container .box .pic:nth-child(4) {
        transform: rotateY(-90deg) translateZ(150px);
    }
    .container .box .pic:nth-child(5) {
        transform: rotateX(90deg) translateZ(150px);
    }
    .container .box .pic:nth-child(6) {
        transform: rotateX(-90deg) translateZ(150px);
    }
    h1 {
        color: #fff;
        font-size: 30px;
        margin-bottom: 30px;
    }
    .btn {
        display: grid;
        justify-content: center;
        grid-template-columns: 100px 100px 100px;
        grid-template-rows: 100px 100px;
        grid-gap: 15px;
    }
    .btn input {
        width: 100px;
        height: 100px;
        outline: none;
        border: 2px solid #fff;
    }
    .btn input:focus {
        border: 2px solid #e70;
    }
    .defaul {
        transform: translateZ(-150px) rotateX(-10deg) rotateY(15deg);
    }
    .image1 {
        transform: translateZ(-150px) rotateX(0deg) rotateY(0deg);
    }
    .image2 {
        transform: translateZ(-150px) rotateY(-180deg);
    }
    .image3 {
        transform: translateZ(-150px) rotateY(-90deg);
    }
    .image4 {
        transform: translateZ(-150px) rotateY(90deg);
    }
    .image5 {
        transform: translateZ(-150px) rotateX(-90deg);
    }
    .image6 {
        transform: translateZ(-150px) rotateX(90deg);
    }

js: 

(function(){
        var btn = document.getElementsByClassName('btn')[0];
        var box = document.getElementsByClassName('box')[0];
        btn.addEventListener('click',function(e){
            var className = e.target.className;
            if(className !== 'btn'){
                box.style = '';
                box.classList.replace(box.classList[1],'image'+className);
            }
        })
        //鼠标拖动效果
        var xN = 10, yN = 15;
        document.addEventListener('mousedown',function(e){
            e.preventDefault();
            e.stopPropagation();
            var x = e.clientX;
            var y = e.clientY;
            document.addEventListener('mousemove',move);
            document.addEventListener('mouseup', up);
            function move(e){
                e.preventDefault();
                e.stopPropagation();
                var x1 = e.clientX;
                var y1 = e.clientY;
                xN += (x1 - x)*0.04;
                yN += (y1 - y)*0.04;
                box.style.transform = 'translateZ(-150px) rotateY(' + xN + 'deg) rotateX(' + -yN + 'deg)';
            }
            function up(){
                document.removeEventListener('mousemove', move);
            }
        })
    })()

总结

以上所述是小编给大家介绍的基于css3实现可拖动的魔方3d效果 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

HTML / CSS 相关文章推荐
CSS3截取字符串实例代码【推荐】
Jun 07 HTML / CSS
纯css3实现鼠标经过图片显示描述的动画效果
Sep 01 HTML / CSS
CSS3 mask 遮罩的具体使用方法
Nov 03 HTML / CSS
HTML5实时语音通话聊天MP3压缩传输3KB每秒
Aug 28 HTML / CSS
HTML5 与 XHTML2
Oct 17 HTML / CSS
html5 canvas-1.canvas介绍(hello canvas)
Jan 07 HTML / CSS
HTML5 Canvas实现烟花绽放特效
Mar 02 HTML / CSS
html5调用app分享功能示例(WebViewJavascriptBridge)
Mar 21 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
Jul 31 HTML / CSS
HTML5实现无刷新修改URL的方法
Nov 14 HTML / CSS
基于HTML5+tracking.js实现刷脸支付功能
Apr 16 HTML / CSS
HTML5开发动态音频图的实现
Jul 02 HTML / CSS
CSS3 实现童年的纸飞机
May 05 #HTML / CSS
使用CSS变量实现炫酷惊人的悬浮效果
Apr 26 #HTML / CSS
详解CSS3中的box-sizing(content-box与border-box)
Apr 19 #HTML / CSS
CSS3 transforms应用于背景图像的解决方法
Apr 16 #HTML / CSS
CSS3实现王者荣耀匹配人员加载页面的方法
Apr 16 #HTML / CSS
CSS3实现王者匹配时的粒子动画效果
Apr 12 #HTML / CSS
CSS3解析抖音LOGO制作的方法步骤
Apr 11 #HTML / CSS
You might like
再次研究下cache_lite
2007/02/14 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
php eval函数一句话木马代码
2015/05/21 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
python算法学习之计数排序实例
2013/12/18 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS