吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4106|回复: 37
收起左侧

[其他转载] html实现3D相册效果

  [复制链接]
rundreamer 发表于 2022-5-16 10:44
说明一下:
1.此功能是本人大学时期,跟着网络教程学习时,编写程序
2.网络上有免费类似的东西,github、百度云盘等等都有,但不是每个人都找能找到吧,有的人github网络还有问题呢
3.自己有这方面的资源忽略就好了,没必要说我,你有你发帖分享一下就完了嘛
4.我也就想弄点积分,就这点想法,不想给的就不给
5.上一个帖子因为没有放代码,封掉了,所以发这个
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="Keywords" content="">
    <meta name="Description" content="">
    <title>3D旋转</title>
        <style type="text/css">
                *{margin:0;padding:0;}
                body{
                        background:#222;
                        perspective:800px;/*景深*/
                }
                #wrap{
                        position:relative;
                        width:120px;
                        height:180px;
                        margin:auto;
                        transform-style:preserve-3d;/*设置3D环境*/
                }
                #wrap img{
                        position:absolute;
                        width:133px;
                        height:200px;
                        box-shadow:0 0 10px #000;
                        /*倒影:朝向 偏移*/
                        -webkit-box-reflect:below 5px -webkit-linear-gradient(top,rgba(0,0,0,0) 40%,rgba(0,0,0,.5) 100%);
                        border-radius:5px;/*圆角*/
                        /* transform:rotateY(0deg) translateZ(0px); */
                        /*transition:1s 1s;动画执行的时间 动画延迟的时间*/
                }
                #wrap p{
                        position:absolute;
                        left:50%;
                        top:112%;
                        margin-left:-600px;
                        margin-top:-600px;
                        width:1200px;
                        height:1200px;
                        border-radius:50%;
                        background:-webkit-radial-gradient(center center,600px 600px,rgba(122,122,122,0.2),rgba(0,0,0,0));
                        transform:rotateX(90deg);
                }
        </style>
</head>
<body>
        <div id="wrap">
                <img src="images/1.jpg" alt="" />
                <img src="images/2.jpg" alt="" />
                <img src="images/3.jpg" alt="" />
                <img src="images/4.jpg" alt="" />
                <img src="images/5.jpg" alt="" />
                <img src="images/6.jpg" alt="" />
                <img src="images/7.jpg" alt="" />
                <img src="images/8.jpg" alt="" />
                <img src="images/9.jpg" alt="" />
                <img src="images/10.jpg" alt="" />
                <img src="images/11.jpg" alt="" />
                <p></p>
        </div>
        <script type="text/javascript">
                var oWrap = document.getElementById("wrap");
                var aImg = oWrap.getElementsByTagName("img");
                //让盒子自适应的垂直居中
                function mTop(){
                        //获取浏览器窗口可视区域的高度
                        var H = document.documentElement.clientHeight;
                        oWrap.style.marginTop = H/2 - 180 + "px"
                }
                mTop();
                window.onresize = mTop;

                //图片初始动画
                var len = aImg.length;//获取图片的个数
               
                var Deg = 360/len;//每一张图片所占的角度
                for (var i=0;i<len;i++ )
                {
                        aImg[i].style.transform = "rotateY("+i*Deg+"deg) translateZ(350px)";
                        aImg[i].style.transition = "1s "+(len-1-i)*0.1+"s";
                }
                //鼠标事件(按下 移动 抬起) 拖拽旋转
                var lastX,lastY,nowX,nowY,minX,minY,roX=0,roY=0,timer;
                document.onmousedown = function(ev){
                        clearInterval(timer);
                        var ev = ev||window.event;
                        //获取鼠标按下去的坐标位置
                        lastX = ev.clientX;
                        lastY = ev.clientY;
                        this.onmousemove = function(ev){
                                var ev = ev||window.event;
                                //移动过程中鼠标的坐标位置
                                nowX = ev.clientX;
                                nowY = ev.clientY;
                                //计算出鼠标坐标的差值
                                minX = nowX - lastX;
                                minY = nowY - lastY;
                                //计算容器旋转的角度
                                roY += minX*0.2;//roY = roY + minX*0.2
                                roX -= minY*0.1;
                                //console.log(roX,roY);
                                //让整个图片容器跟随鼠标动
                                oWrap.style.transform = "rotateX("+roX+"deg) rotateY("+roY+"deg)";
                                lastX = nowX;
                                lastY = nowY;
                        }
                        this.onmouseup = function(){
                                this.onmousemove = null;
                                this.onmouseup = null;
                                timer = setInterval(function(){
                                        minX *=0.95;//让minX逐渐减小
                                        minY *=0.95;
                                        roY += minX*0.2;
                                        roX -= minY*0.1;
                                        oWrap.style.transform = "rotateX("+roX+"deg) rotateY("+roY+"deg)";
                                        //当minX达到足够小的值时 清楚定时器
                                        if (Math.abs(minX)<0.1 && Math.abs(minY)<0.1)
                                        {
                                                clearInterval(timer);
                                        }
                                },1000/60);
                        }
                        return false;//阻止默认事件
                }
        </script>
</body>
</html>

QQ截图20220516103457.png

3D相册.zip

213.66 KB, 下载次数: 293, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 6吾爱币 +6 热心值 +5 收起 理由
muratm + 1 很不错谢谢
Atnil + 1 谢谢@Thanks!
xiaoyxf + 1 + 1 谢谢@Thanks!
无知少年 + 1 + 1 我很赞同!
kingaero + 2 + 1 热心回复!
初夏小雨 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xuzhixiu 发表于 2022-5-16 11:33
可以用TweenMax,这是GreenSock动画平台的核心插件,GreenSock是一套用于在所有主流浏览器中制作高性能HTML5动画的工具。今天给大家分享一款基于TweenMax的HTML5 3D爱心动画,它和之前分享的爱心动画不同在于,点击爱心后爱心会破裂,在点击爱心又会重新组合。
 楼主| rundreamer 发表于 2022-5-16 14:47
xingyuwan 发表于 2022-5-16 14:32
不能双击或单击放大呀.

功能倒是可以实现,会玩的话,可以自己学习一下;设置图片尺寸+定位+还原,就是这样的一个逻辑
yulai3230 发表于 2022-5-16 10:49
夏520 发表于 2022-5-16 10:54
感谢楼主分享
諦覠 发表于 2022-5-16 11:06
可以鼠标拖动嘛
拣尽寒枝不肯栖 发表于 2022-5-16 11:07
简直太好,谢谢分享!
lswdla 发表于 2022-5-16 11:19
谢谢分享
yx159247 发表于 2022-5-16 11:21
看着还挺炫酷的啊
C沧海笑 发表于 2022-5-16 12:04
感谢老师分享
iawyxkdn8 发表于 2022-5-16 12:28
确认过,鼠标左键可以转动图片!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 23:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表