十秒钟后图片展开并旋转




<style>

    .mnBox { position: relative; display: flex; justify-content: center; align-items: center; width: 1024px; height: 600px; left: 214px; perspective: 1000px; }
    .imgBox { --w: 190px; --h: 360px; position: absolute; width: var(--w); height: var(--h); cursor: pointer; transform-style: preserve-3d; }
    .imgBox img { width: var(--w); height: var(--h); position: absolute; }
    @keyframes rotate { 100% { transform: rotateY(360deg); } }

</style>




<div class="mnBox">

    &lt;div class="imgBox"&gt;&lt;/div&gt;

</div>




<script language="javascript">
let picAr = [

    "https://638183.freep.cn/638183/Pic/2022/mm01.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm02.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm03.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm04.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm05.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm06.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm07.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm08.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm09.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm10.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm11.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm12.jpg",
    "https://638183.freep.cn/638183/Pic/2022/mm13.jpg"

];
let iBox = document.querySelector(".imgBox");
let hStr = "";
let angle = 360 / picAr.length;
let tz = Math.tan(Math.PI / 180 (180 - angle) /2 ) iBox.clientWidth / 2;
for(j=0; j<picAr.length; j++) {

    //hStr += `&lt;div style="transform: rotateY(${angle*j}deg) translateZ(${tz}px);"&gt;&lt;img alt="" src="${picAr[j]}" /&gt;&lt;/div&gt;\n`;
    hStr += `&lt;div&gt;&lt;img alt="" src="${picAr[j]}" /&gt;&lt;/div&gt;\n`;

}
iBox.innerHTML = hStr;
let au = document.createElement("audio");
au.src = "http://www.kumeiwp.com/sub/filestores/2022/04/11/b0a933a8826b50f8cd68c0c705c5958b.mp3";
au.autoplay = true;
au.loop = true;
document.querySelector(".mnBox").appendChild(au);
iBox.onmousemove = function(){ iBox.style.animationPlayState = "paused"; }
iBox.onmouseout = function(){ iBox.style.animationPlayState = "running"; }
iBox.onclick = function() {

    au.paused ? (au.play(), this.style.animationPlayState = "running") : (au.pause(), this.style.animationPlayState = "paused");

}

setTimeout(function() {

    let children = iBox.children;
    for(j=0; j&lt;picAr.length; j++) {
            children[j].style.transform = `rotateY(${angle*j}deg) translateZ(${tz}px)`;
    }
    iBox.style.animation = "rotate 15s linear infinite";

},10000);

</script>





JS部分代码解释:

13-27行:图片数组

28行:获得图片所在父元素的盒子操作句柄;

29-36行:把图片一口气写入父元素的子div中。每一张图片都有一个子div包裹着,将来控制图片去向就由这些子div去完成。注释掉的那行是后宫逃逸者帖子用的,那帖子无需等待10秒;

37-41行:加载音乐;

42-43行:鼠标滑进滑出图片(实际上是图片所在的子div)事件,动画可以暂停以便让樵歌好好审美;

44-46:鼠标单击图片事件(实际上是图片所在的子div),主要是控制音乐的播放与暂停,动画也会暂停,但鼠标指针离开后又会旋转;

48-54行:定时器setTimeout事件。打开帖子,帖子中只看到一张图片(实际上有十三张图片堆叠在一起),十秒后,定时器触发两件事:一个是给图片包裹其中的每一个子div追加不同的transform属性,另一个是给子Div的父元素(class="ImgBox"那个div)添加 animation 动画属性(@keyframes动画已在CSS中设计好,后宫逃逸者animation也写在CSS中)。



来源 花潮论坛

标签: none

添加新评论