【漫步特效】最好的时光/致亲朋们《11种CSS动画效果》
<style>#mydiv {
margin: 150px 0 30px calc(40% - 900px);
display: grid;
place-items: center;
width: 1800px;
height: 900px;
background-color: #740707;
box-shadow: 3px 3px 20px #000;
user-select: none;
overflow: hidden;
position: relative;
z-index: 1;
}
/* 滚动文字样式 */
.scrolling-text {
position: absolute;
top: 20px;
right: -100%;
white-space: nowrap;
color: red;
font-size: 24px;
font-weight: bold;
z-index: 200;
animation: scrollText 30s linear infinite;
}
@keyframes scrollText {
0% {
transform: translateX(0);
right: -100%;
}
100% {
transform: translateX(-100%);
right: 100%;
}
}
/* 幻灯片样式 */
.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: rgba(0,0,0,0.3);
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: #740707;
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="scrolling-text">致我亲爱的朋友们,名字不分前后。一鹿向北、风晴雪、花简静、令狐冲、雨声、姚云裳、向荣S、泪红颜、玫の玫、淥の詶、云笛、柒玥、清梦、愫怡、宁月、轻舞若芸。</div>
<!-- 图片幻灯片 -->
<div class="slide" style="opacity: 1;">
<img src="https://webftp-bbs.hnol.net/ggkj2017/yunduanmanbu/16/6/1/vmv1.jpg" alt="图片1">
</div>
<div class="slide">
<img src="https://webftp-bbs.hnol.net/ggkj2017/yunduanmanbu/16/6/1/vmv2.jpg" alt="图片2">
</div>
<div class="slide">
<img src="https://webftp-bbs.hnol.net/ggkj2017/yunduanmanbu/16/6/1/vmv3.jpg" alt="图片3">
</div>
<div class="slide">
<img src="https://webftp-bbs.hnol.net/ggkj2017/yunduanmanbu/16/6/1/vmv4.jpg" alt="图片4">
</div>
<!-- 视频覆盖层 -->
<video id="overlay" autoplay loop muted playsinline>
<source src="https://img.tukuppt.com/video_show/2422006/00/01/70/5b4b1e2590ccc.mp4" type="video/mp4">
</video>
<video id="vid1" src="https://img.tukuppt.com/video_show/7165162/00/17/65/5ecb8fa5f0765.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://ting8.yymp3.com/new23/yangyuying4/10.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);
// 创建8个滑块
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();
}
// 右键提示
document.oncontextmenu = function() {
alert('-【漫步特效】-最好的时光-');
return false;
};
// 页面加载完成后初始化
window.onload = init;
</script> 谢谢漫步老师的精美特效,制作分享辛苦了哦~~{:1_153:} 问好漫步老师,帖子做的很棒,辛苦了{:1_154:} 漫步老师制作精彩,色彩美美哒!特效棒棒哒{:1_154:} 背景中暖黄色调的吊灯,以及摆放着书籍、花瓶的置物架,营造出温馨且富有格调的氛围。 背景中暖黄色调的吊灯,以及摆放着书籍、花瓶的置物架,营造出温馨且富有格调的氛围。 整体画面洋溢着复古与温情,女子的姿态与周围环境、文字相结合,仿佛在诉说那些镌刻在时光里的美好与眷恋。 整体画面洋溢着复古与温情,女子的姿态与周围环境、文字相结合,仿佛在诉说那些镌刻在时光里的美好与眷恋。 11种动画效果,做起来蛮复杂的,画面效果漂亮极了,漫步老师制作辛苦了~~~ 祝漫步老师的朋友们收礼开心~~~{:S01:}
页:
[1]
2