【漫步特效】苍兰诀TO 汐云渡 (十一种CSS动画)
<style>#mydiv {
margin: 150px 0 30px calc(50% - 800px);
display: grid;
place-items: center;
width: 1700px;
height: 850px;
background-color: #a8e4cc;
box-shadow: 3px 3px 20px #000;
user-select: none;
overflow: hidden;
position: relative;
z-index: 1;
}
.slide {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
transform: translate(0, 0);
}
.slide img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
#effects {
position: absolute;
bottom: 30px;
left: 0;
right: 0;
text-align: center;
z-index: 100;
padding: 10px;
background: transparent;
display: flex;
flex-wrap: wrap;
justify-content: center;
}
#effects button {
padding: 6px 12px;
margin: 5px;
background: rgba(0,0,0,0.6);
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 14px;
transition: all 0.3s;
}
#effects button.active {
background: white;
color: black;
}
#overlay {
position: absolute;
top: -60px;
left: 0;
width: 100%;
height: calc(100% + 80px);
object-fit: cover;
mix-blend-mode: overlay;
opacity: 0.4;
z-index: 50;
pointer-events: none;
}
.blinds-wrapper {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 10;
display: flex;
}
.blind-slider {
flex: 1;
height: 100%;
background-color: #a8e4cc;
transition: transform 1.5s ease;
transform: translateY(0);
}
#vid1 {
position: absolute;
width: 100%;
height: 110%;
top:-80px;
object-fit: cover;
pointer-events: none;
mix-blend-mode: screen;
z-index: 2;
opacity: .15;
}
#vid2 {
position: absolute;
width: 100%;
height: 110%;
top:-80px;
object-fit: cover;
pointer-events: none;
mix-blend-mode: screen;
-webkit-mask: linear-gradient(to bottom, red 50%, transparent 55%, transparent);
z-index: 3;
opacity: .20;
}
</style>
<div id="mydiv">
<div class="slide" style="opacity: 1;">
<img src="https://www.yhyhlt.com/data/attachment/forum/202606/20/214749l598y88i8e3y7ir6.jpg" alt="图片1">
</div>
<div class="slide">
<img src="https://www.yhyhlt.com/data/attachment/forum/202606/20/214749jzzismbssjytjr3y.jpg" alt="图片2">
</div>
<div class="slide">
<img src="https://www.yhyhlt.com/data/attachment/forum/202606/20/214750kavao4ikodlkv2y4.jpg" alt="图片3">
</div>
<div class="slide">
<img src="https://www.yhyhlt.com/data/attachment/forum/202606/20/214754olnlu0nsiviext6s.jpg" alt="图片4">
</div>
<video id="overlay" autoplay loop muted playsinline>
<source src="https://img2.tukuppt.com/video_show/15653652/01/06/15/615cf6769bff8.mp4" type="video/mp4">
</video>
<video id="vid1" src="https://img2.tukuppt.com/video_show/2405811/00/73/42/6095e864e212a.mp4" autoplay loop muted></video>
<video id="vid2" src="" autoplay loop muted></video>
<div id="effects">
<button data-effect="fade" class="active">淡入淡出</button>
<button data-effect="slideLeft">左滑入</button>
<button data-effect="slideRight">右滑入</button>
<button data-effect="slideTop">上滑入</button>
<button data-effect="slideBottom">下滑入</button>
<button data-effect="zoom">缩放</button>
<button data-effect="rotate">旋转</button>
<button data-effect="fade-zoom">淡入缩放</button>
<button data-effect="swing">摇摆进入</button>
<button data-effect="blinds">百叶窗</button>
<button data-effect="random">随机</button>
</div>
</div>
<audio id="aud" src="https://mp3.joy127.com/music/12896.mp3" autoplay loop></audio>
<script>
let currentIndex = 0;
let slides = document.querySelectorAll('.slide');
let totalSlides = slides.length;
let timer;
let currentEffect = 'fade';
const effects = ['fade', 'slideLeft', 'slideRight', 'slideTop', 'slideBottom', 'zoom', 'rotate', 'fade-zoom', 'swing', 'blinds', 'random'];
function init() {
document.querySelectorAll('#effects button').forEach(btn => {
btn.addEventListener('click', function() {
document.querySelectorAll('#effects button').forEach(b => b.classList.remove('active'));
this.classList.add('active');
currentEffect = this.dataset.effect;
showNext();
});
});
autoPlayAudio();
startTimer();
}
function autoPlayAudio() {
const audio = document.getElementById('aud');
audio.play().then(() => {
console.log('音乐播放成功');
}).catch(e => {
document.body.addEventListener('click', function playOnClick() {
audio.play();
document.body.removeEventListener('click', playOnClick);
}, { once: true });
});
}
function clearEffects() {
const blinds = document.querySelector('.blinds-wrapper');
if (blinds) blinds.remove();
slides.forEach(slide => {
slide.style.opacity = '0';
slide.style.transform = 'translate(0, 0) scale(1) rotate(0)';
slide.style.transition = 'none';
});
}
function showNext() {
clearEffects();
currentIndex = (currentIndex + 1) % totalSlides;
let effect = currentEffect === 'random'
? effects
: currentEffect;
const slide = slides;
applyEffect(slide, effect);
resetTimer();
}
function applyEffect(slide, effect) {
slide.style.display = 'block';
switch(effect) {
case 'fade':
slide.style.opacity = '0';
setTimeout(() => {
slide.style.transition = 'opacity 2s';
slide.style.opacity = '1';
}, 50);
break;
case 'slideLeft':
slide.style.transform = 'translateX(-100%)';
slide.style.opacity = '1';
setTimeout(() => {
slide.style.transition = 'transform 1.5s ease-out';
slide.style.transform = 'translateX(0)';
}, 50);
break;
case 'slideRight':
slide.style.transform = 'translateX(100%)';
slide.style.opacity = '1';
setTimeout(() => {
slide.style.transition = 'transform 1.5s ease-out';
slide.style.transform = 'translateX(0)';
}, 50);
break;
case 'slideTop':
slide.style.transform = 'translateY(-100%)';
slide.style.opacity = '1';
setTimeout(() => {
slide.style.transition = 'transform 1.5s ease-out';
slide.style.transform = 'translateY(0)';
}, 50);
break;
case 'slideBottom':
slide.style.transform = 'translateY(100%)';
slide.style.opacity = '1';
setTimeout(() => {
slide.style.transition = 'transform 1.5s ease-out';
slide.style.transform = 'translateY(0)';
}, 50);
break;
case 'zoom':
slide.style.transform = 'scale(0.5)';
slide.style.opacity = '0';
setTimeout(() => {
slide.style.transition = 'transform 2s, opacity 2s';
slide.style.transform = 'scale(1)';
slide.style.opacity = '1';
}, 50);
break;
case 'rotate':
slide.style.transform = 'rotate(-15deg) scale(0.8)';
slide.style.opacity = '0';
setTimeout(() => {
slide.style.transition = 'transform 2s, opacity 2s';
slide.style.transform = 'rotate(0) scale(1)';
slide.style.opacity = '1';
}, 50);
break;
case 'fade-zoom':
slide.style.transform = 'scale(0.8)';
slide.style.opacity = '0';
setTimeout(() => {
slide.style.transition = 'transform 2s, opacity 2s';
slide.style.transform = 'scale(1)';
slide.style.opacity = '1';
}, 50);
break;
case 'swing':
slide.style.transform = 'rotate(-10deg) translateX(-50%)';
slide.style.opacity = '0';
setTimeout(() => {
slide.style.transition = 'transform 2s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 2s';
slide.style.transform = 'rotate(0) translateX(0)';
slide.style.opacity = '1';
}, 50);
break;
case 'blinds':
slide.style.opacity = '1';
const wrapper = document.createElement('div');
wrapper.className = 'blinds-wrapper';
slide.appendChild(wrapper);
const sliderCount = 8;
for(let i = 0; i < sliderCount; i++) {
const slider = document.createElement('div');
slider.className = 'blind-slider';
slider.style.transitionDelay = `${i * 0.1}s`;
wrapper.appendChild(slider);
}
setTimeout(() => {
const sliders = wrapper.querySelectorAll('.blind-slider');
sliders.forEach(slider => {
slider.style.transform = 'translateY(-100%)';
});
}, 100);
break;
}
}
function startTimer() {
timer = setInterval(showNext, 5000);
}
function resetTimer() {
clearInterval(timer);
startTimer();
}
window.onload = init;
</script> 本帖最后由 云端漫步 于 2026-6-20 21:57 编辑
@汐云渡 @姚云裳 在画底部点看十一种CSS动画 代码高手!{:7_194:} 又见漫步老师精彩特效!真漂亮! 花茶(永) 发表于 2026-6-20 16:25
代码高手!
感谢这么走心的赞美!你的欣赏是最好的鼓励,温暖又治愈,万分感恩!
让我们同享音画的乐趣!六月初临景夏天,端午安康暖万家!
醉美水芙蓉 发表于 2026-6-20 16:47
又见漫步老师精彩特效!真漂亮!
芙蓉周未快乐乐端午快乐! 十一幅图,十一种动画,点随机看全部展示。 制作精美,看大片的感觉。欣赏漫步老师的精彩。 祝云渡收礼开心!