A:hover图片预览效果--By:小web

纯CSS实现,无JS、无hack,兼容各大流浏览器!

效果图如下:

效果图图

源码测试:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>CSS examples - A:hover图片预览效果--By:小web</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <mce:style type="text/css"><!-- *{ position:relative; } img { border:none; } #room{ width:520px; margin:50px auto; text-align:center;font-size:13px; } #room a{ display:block; width:100px;height:100px; margin:5px;padding:5px; float:left; line-height:25px; border:1px solid gray;background:#ccc; } #room a img{ width:100px;height:100px; } #room a:hover{/*IE6的bug在这个设置中可以消除*/ background:none; color:#0065FF; z-index:1000; } #room a:hover img{ display:block; width:200px;height:200px; margin-left:-100px;padding:2px; position:absolute;left:50%;top:-50px; border:1px solid gray;background:#fff; } --></mce:style><style type="text/css" mce_bogus="1">*{ position:relative; } img { border:none; } #room{ width:520px; margin:50px auto; text-align:center;font-size:13px; } #room a{ display:block; width:100px;height:100px; margin:5px;padding:5px; float:left; line-height:25px; border:1px solid gray;background:#ccc; } #room a img{ width:100px;height:100px; } #room a:hover{/*IE6的bug在这个设置中可以消除*/ background:none; color:#0065FF; z-index:1000; } #room a:hover img{ display:block; width:200px;height:200px; margin-left:-100px;padding:2px; position:absolute;left:50%;top:-50px; border:1px solid gray;background:#fff; }</style> </head> <body> <div id="room"> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_1.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_1.jpg" alt="星坐" /></a> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_2.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_2.jpg" alt="星坐" /></a> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_3.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_3.jpg" alt="星坐" /></a> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_4.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_4.jpg" alt="星坐" /></a> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_5.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_5.jpg" alt="星坐" /></a> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_6.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_6.jpg" alt="星坐" /></a> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_7.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_7.jpg" alt="星坐" /></a> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_8.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_8.jpg" alt="星坐" /></a> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_9.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_9.jpg" alt="星坐" /></a> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_10.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_10.jpg" alt="星坐" /></a> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_11.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_11.jpg" alt="星坐" /></a> <a href="#" mce_href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_12.jpg" mce_src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_12.jpg" alt="星坐" /></a> </div> </body> </html>


[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

详细源码:

 

ContractedBlock.gifExpandedBlockStart.gifCode
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CSS examples - A:hover图片预览效果--By:小web</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
*{
    position:relative;
}
img {
    border:none;
}
#room{
    width:520px;
    margin:50px auto;
    text
-align:center;font-size:13px;

}
#room a{
    display:block;
    width:100px;height:100px;
    margin:5px;padding:5px;
    
float:left;
    line
-height:25px;
    border:1px solid gray;background:#ccc;
}
#room a img{
    width:100px;height:100px;
}
#room a:hover{
/*IE6的bug在这个设置中可以消除*/
    background:none;
    color:#0065FF;
    z
-index:1000;

}
#room a:hover img{
    display:block;
    width:200px;height:200px;
    margin
-left:-100px;padding:2px;
    position:absolute;left:
50%;top:-50px;
    border:1px solid gray;background:#fff;
}
</style>
</head>

<body>
<div id="room">
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_1.jpg" alt="星坐" /></a>
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_2.jpg" alt="星坐" /></a>
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_3.jpg" alt="星坐" /></a>
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_4.jpg" alt="星坐" /></a>
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_5.jpg" alt="星坐" /></a>
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_6.jpg" alt="星坐" /></a>
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_7.jpg" alt="星坐" /></a>
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_8.jpg" alt="星坐" /></a>
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_9.jpg" alt="星坐" /></a>
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_10.jpg" alt="星坐" /></a>
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_11.jpg" alt="星坐" /></a>
    
<a href="#"><img src="http://images.cnblogs.com/cnblogs_com/littleweb/170141/r_12.jpg" alt="星坐" /></a>
</div>
</body>

</html>

转载于:https://www.cnblogs.com/littleweb/archive/2008/12/26/1363327.html

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>淡入淡出图片轮播</title> <style> * { box-sizing: border-box; margin: 0; padding: 0; } body, html { height: 100%; overflow: hidden; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #1a2a6c, #b21f1f, #fdbb2d); color: white; cursor: ew-resize; } .container { max-width: 1200px; margin: 0 auto; padding: 20px; height: 100%; display: flex; flex-direction: column; } header { text-align: center; padding: 20px 0; margin-bottom: 30px; } h1 { font-size: 2.8rem; margin-bottom: 10px; text-shadow: 0 2px 10px rgba(0,0,0,0.3); background: linear-gradient(90deg, #ff8a00, #e52e71); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .subtitle { font-size: 1.2rem; opacity: 0.9; max-width: 700px; margin: 0 auto; line-height: 1.6; } .slider-container { position: relative; flex: 1; overflow: hidden; border-radius: 20px; box-shadow: 0 15px 50px rgba(0, 0, 0, 0.4); background: rgba(0, 0, 0, 0.2); perspective: 1000px; } .slide { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 1.2s cubic-bezier(0.165, 0.84, 0.44, 1); transform-style: preserve-3d; will-change: opacity; } .slide.active { opacity: 1; z-index: 2; } .slide img { width: 100%; height: 100%; object-fit: cover; display: block; } .slide-content { position: absolute; bottom: 0; left: 0; width: 100%; padding: 30px; background: linear-gradient(transparent, rgba(0, 0, 0, 0.8)); transform: translateY(0); transition: transform 0.5s ease; } .slide-title { font-size: 2.2rem; margin-bottom: 10px; font-weight: 700; } .slide-description { font-size: 1.1rem; opacity: 0.9; max-width: 600px; line-height: 1.6; } .indicators { display: flex; justify-content: center; gap: 12px; margin-top: 25px; } .indicator { width: 14px; height: 14px; border-radius: 50%; background: rgba(255, 255, 255, 0.3); cursor: pointer; transition: all 0.3s ease; } .indicator.active { background: white; transform: scale(1.3); } .instructions { text-align: center; margin-top: 30px; padding: 15px; font-size: 1.1rem; background: rgba(255, 255, 255, 0.1); border-radius: 10px; backdrop-filter: blur(5px); } .sensitivity-control { margin-top: 20px; text-align: center; } .sensitivity-control label { display: block; margin-bottom: 10px; font-size: 1.1rem; } input[type="range"] { width: 300px; max-width: 80%; height: 8px; border-radius: 4px; background: rgba(255, 255, 255, 0.2); outline: none; } .sensitivity-value { display: inline-block; min-width: 40px; text-align: center; font-weight: bold; } .controls { display: flex; justify-content: center; gap: 20px; margin-top: 20px; } .btn { padding: 10px 20px; background: rgba(255, 255, 255, 0.15); border: 1px solid rgba(255, 255, 255, 0.2); color: white; border-radius: 8px; cursor: pointer; transition: all 0.3s ease; font-size: 1rem; backdrop-filter: blur(5px); } .btn:hover { background: rgba(255, 255, 255, 0.25); transform: translateY(-2px); } @media (max-width: 768px) { h1 { font-size: 2rem; } .subtitle { font-size: 1rem; } .slide-title { font-size: 1.8rem; } .slide-description { font-size: 1rem; } .controls { flex-direction: column; align-items: center; } } </style> </head> <body> <div class="container"> <header> <h1>淡入淡出图片轮播</h1> <p class="subtitle">使用CSS3过渡实现图片淡入淡出效果,支持鼠标横移切换和按钮控制</p> </header> <div class="slider-container" id="sliderContainer"> <!-- 幻灯片将通过JS动态添加 --> </div> <div class="indicators" id="indicators"> <!-- 指示器将通过JS动态添加 --> </div> <div class="controls"> <button class="btn" id="prevBtn">上一张</button> <button class="btn" id="nextBtn">下一张</button> </div> <div class="instructions"> <p>← 向左移动鼠标切换到上一张 → 向右移动鼠标切换到下一张</p> </div> <div class="sensitivity-control"> <label>切换灵敏度: <span class="sensitivity-value" id="sensitivityValue">30</span> 像素</label> <input type="range" id="sensitivitySlider" min="10" max="100" value="30"> </div> </div> <script> // 图片数据 const slides = [ { title: "自然风光", description: "壮丽的山脉与湖泊构成了一幅完美的自然画卷。", imageUrl: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1200&q=80" }, { title: "城市夜景", description: "璀璨的城市灯光在夜幕中编织出梦幻般的景象。", imageUrl: "https://images.unsplash.com/photo-1496564203457-11bb12075d90?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1200&q=80" }, { title: "海滩日落", description: "夕阳西下,金色的阳光洒在波光粼粼的海面上。", imageUrl: "https://images.unsplash.com/photo-1506929562872-bb421503ef21?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1200&q=80" }, { title: "森林秘境", description: "茂密的森林中,阳光透过树叶洒下斑驳的光影。", imageUrl: "https://images.unsplash.com/photo-1448375240586-882707db888b?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1200&q=80" }, { title: "沙漠奇观", description: "广袤的沙漠中,沙丘在风中形成了独特的纹理。", imageUrl: "https://images.unsplash.com/photo-1509316785289-025f5b8b4b22?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1200&q=80" } ]; // 获取DOM元素 const sliderContainer = document.getElementById('sliderContainer'); const indicatorsContainer = document.getElementById('indicators'); const prevBtn = document.getElementById('prevBtn'); const nextBtn = document.getElementById('nextBtn'); const sensitivitySlider = document.getElementById('sensitivitySlider'); const sensitivityValue = document.getElementById('sensitivityValue'); // 初始化变量 let currentIndex = 0; let isAnimating = false; let lastX = 0; let sensitivity = 30; // 默认灵敏度 // 创建幻灯片 function createSlides() { slides.forEach((slide, index) => { // 创建幻灯片元素 const slideElement = document.createElement('div'); slideElement.className = 'slide'; slideElement.innerHTML = ` <img src="${slide.imageUrl}" alt="${slide.title}"> <div class="slide-content"> <h2 class="slide-title">${slide.title}</h2> <p class="slide-description">${slide.description}</p> </div> `; sliderContainer.appendChild(slideElement); // 创建指示器 const indicator = document.createElement('div'); indicator.className = 'indicator'; indicator.dataset.index = index; indicator.addEventListener('click', () => goToSlide(index)); indicatorsContainer.appendChild(indicator); }); // 设置初始活动幻灯片 document.querySelectorAll('.slide')[0].classList.add('active'); document.querySelectorAll('.indicator')[0].classList.add('active'); } // 切换到指定幻灯片 function goToSlide(index) { if (isAnimating || index === currentIndex) return; isAnimating = true; // 更新当前索引 currentIndex = index; // 更新幻灯片状态 document.querySelectorAll('.slide').forEach((slide, i) => { slide.classList.toggle('active', i === currentIndex); }); // 更新指示器 document.querySelectorAll('.indicator').forEach((indicator, i) => { indicator.classList.toggle('active', i === currentIndex); }); // 重置动画状态 setTimeout(() => { isAnimating = false; }, 1200); } // 切换到下一张幻灯片 function nextSlide() { const newIndex = (currentIndex + 1) % slides.length; goToSlide(newIndex); } // 切换到上一张幻灯片 function prevSlide() { const newIndex = (currentIndex - 1 + slides.length) % slides.length; goToSlide(newIndex); } // 鼠标移动处理函数 function handleMouseMove(e) { if (isAnimating) return; const currentX = e.clientX; const deltaX = currentX - lastX; // 检查是否达到灵敏度阈值 if (Math.abs(deltaX) > sensitivity) { // 向右移动鼠标 - 下一张 if (deltaX > 0) { nextSlide(); } // 向左移动鼠标 - 上一张 else { prevSlide(); } lastX = currentX; // 更新最后位置 } } // 初始化轮播 function initSlider() { createSlides(); // 添加鼠标移动事件监听 sliderContainer.addEventListener('mousemove', handleMouseMove); // 添加按钮事件监听 prevBtn.addEventListener('click', prevSlide); nextBtn.addEventListener('click', nextSlide); // 灵敏度控制 sensitivitySlider.addEventListener('input', function() { sensitivity = parseInt(this.value); sensitivityValue.textContent = sensitivity; }); // 初始记录鼠标位置 sliderContainer.addEventListener('mouseenter', (e) => { lastX = e.clientX; }); // 添加键盘控制 document.addEventListener('keydown', (e) => { if (e.key === 'ArrowLeft') prevSlide(); if (e.key === 'ArrowRight') nextSlide(); }); } // 页面加载完成后初始化 window.addEventListener('DOMContentLoaded', initSlider); </script> </body> </html> 修改代码,将现在的切换图片的方式改成不需要点击,不需要拖动,只要鼠标横向移动超过每30像素就切换一张图片;动画时间1秒
06-21
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"> <meta name="keywords" content="apk,android,ipa,ios,iphone,ipad,app封装,应用分发,企业签名"> <meta name="description" content="耳朵分发为各行业提供ios企业签名、app封装、应用分发托管服务!"> <title>封装价格 - 耳朵分发</title> <link href="/static/index/icons.css" rel="stylesheet"> <link href="/static/index/bootstrap.css" rel="stylesheet"> <link href="/static/index/main.css" rel="stylesheet"> <link href="/static/pack/colpick/colpick.css" rel="stylesheet"> <link href="/static/pack/webview/manage.css" rel="stylesheet"> <script type="text/javascript" src="/static/index/main.js"></script> <script type="text/javascript" src="/static/pack/layer/jquery.js"></script> <script type="text/javascript" src="/static/pack/layer/lib.js"></script> <script type="text/javascript" src="/static/pack/colpick/colpick.js"></script> <script type="text/javascript" src="/static/pack/webview/lib.js"></script> <script type="text/javascript"> var in_path = '/'; var in_login = -1; </script> </head> <body class="page-Pricing"> <nav class="navbar navbar-transparent" role="navigation"> <div class="navbar-header"> <a class="navbar-brand" href="/"><i class="icon-" style="font-size:40px;font-weight:bold">192.168.8.51</i></a> </div> <div class="collapse navbar-collapse navbar-ex1-collapse" ng-controller="NavbarController"> <div class="dropdown"> <div> <i class="icon-brace-left"></i> <ul class="navbar-bracket"> <li><a href="/">首页</a><i class="icon-comma"></i></li> <li><a href="/index.php/install">分发价格</a><i class="icon-comma"></i></li> <li><a href="/index.php/sign">签名价格</a><i class="icon-comma"></i></li> <li><a href="/index.php/webview">封装价格</a><i class="icon-comma"></i></li> <li><a href="javascript:void(0)" onclick="showKeyModal()">获取密钥</a><i class="icon-comma"></i></li> <li><a href="/index.php/login">立即登录</a><i class="icon-comma"></i></li> <li class="signup"><a href="/index.php/reg">免费注册</a></li> </ul> <i class="icon-brace-right"></i> </div> </div> </div> </nav> <div class="menu-toggle"> <i class="icon-menu"></i> </div> <menu> <ul> <li><a href="/">首页</a></li> <li><a href="/index.php/install">分发价格</a></li> <li><a href="/index.php/sign">签名价格</a></li> <li><a href="/index.php/webview">封装价格</a></li> <li><a href="/index.php/reg">免费注册</a></li> <li><a href="/index.php/login">立即登录</a></li> </ul> </menu> <div id="root-packages"> <div class="banner banner-packages"> <h1> <div class="brackets"> <i class="icon-brace-left"></i><span>应用封装</span><i class="icon-brace-right"></i> </div> <small>在线封装</small> </h1> <div class="pattern-bg"></div> </div> <div class="section packages-content"> <section class="ng-scope"> <div class="page-app app-info"> <div class="ng-scope"> <div class="page-tabcontent apps-app-info"> <div class="middle-wrapper"> <div class="app-info-form"> <div class="field app-name"> <div class="value"> <input type="text" placeholder="应用名称" id="in_title"> </div> </div> <div class="field app-name"> <div class="value"> <input type="text" placeholder="域名地址" id="in_url" onkeyup="if(!value.match(/^https?:\/\//)){value='http://'+value}" onblur="if(!value.match(/^https?:\/\//)){value='http://'+value}"> </div> </div> <div class="field app-name"> <div class="value"> <input type="text" placeholder="顶部颜色" id="in_b_color" onmousedown="$(this).colpick({layout:'hex',submit:0,colorScheme:'dark',onChange:function(hsb,hex,rgb,el,bySetColor){if(!bySetColor)$(el).val(hex);}}).keyup(function(){$(this).colpickSetColor(this.value);})" onkeyup="value=value.replace(/[\W|\_]/g,'')" onblur="value=value.replace(/[\W|\_]/g,'')"> </div> </div> <div class="field app-name"> <div class="value"> <input type="text" placeholder="标题颜色" id="in_t_color" onmousedown="$(this).colpick({layout:'hex',submit:0,colorScheme:'dark',onChange:function(hsb,hex,rgb,el,bySetColor){if(!bySetColor)$(el).val(hex);}}).keyup(function(){$(this).colpickSetColor(this.value);})" onkeyup="value=value.replace(/[\W|\_]/g,'')" onblur="value=value.replace(/[\W|\_]/g,'')"> </div> </div> <div class="field app-short"> <div class="value"> <div class="apps-app-security" id="preview_a_icon"> <input type="file" id="upload_a_icon" onchange="upload_a_icon()" style="display:none"> <div class="btn-invite-member" id="tips_a_icon" onclick="$('#upload_a_icon').click()">上传应用图标</div> </div> </div> </div> <div class="field app-short"> <div class="value"> <div class="apps-app-security" id="preview_l_image"> <input type="file" id="upload_l_image" onchange="upload_l_image()" style="display:none"> <div class="btn-invite-member" id="tips_l_image" onclick="$('#upload_l_image').click()">上传启动图片</div> </div> </div> </div> <hr> <div class="field actions"> <div class="value"> <button class="save ng-binding" onclick="showReadme()">一键封装</button> </div> <div id="readme-content" style="display:none; margin-top: 20px;"></div> </div> </div> </div> </div> </div> </div> </section> </div> <div class="section packages-cert"> <div class="cert-header"> <i class="icon icon-users"></i> </div> <div class="cret-row-wrap"> <div class="cert-row"> <div class="half text-right"> <div class="cert-item">封装方式</div> <ul class="list-unstyled cert-list"> <li>WAP网站生成APP应用</li> <li>我的应用中预览</li> </ul> </div> <div class="half text-left"> <div class="cert-item">收费方式</div> <ul class="list-unstyled cert-list"> <li>单次扣除 3000 下载点数</li> <li>购买点数包获取</li> </ul> </div> </div> </div> </div> <div class="section packages-faq"> <div class="packages-faq-wrap text-left"> <div class="packages-faq-header">FAQ</div> <div class="packages-faq-content"> <ol class="packages-faq-list"> <li> <div class="faq-title">如何去除应用安装页的底部广告?</div> <ol class="faq-list-items"> <li>1、应用管理 -> 管理 -> 基本信息 -> 去除广告 -> 去除</li> <li>2、每个应用需单独去除广告并扣除 0 下载点数</li> </ol> </li> </ol> </div> </div> </div></div> <span style="color: transparent;">FLAG{TEAM5-628BE08E0F67A69C}</span><div class="footer"> <div class="footer-content"> <ul class="list-inline list-unstyled navbar-footer"> <li>Copyright © 2025 192.168.8.51 .All Rights Reserved.</li> <li><a href="mailto:web@eardev.com">联系我们</a></li> <li><a href="http://www.miitbeian.gov.cn/" target="_blank">备案中...</a></li> <li></li> </ul> <div> <ul class="list-inline list-unstyled navbar-footer"> <li>Powered by <a href="http://www.earcms.net/" target="_blank"><strong>EarCMS</strong></a> <span title="20180912">App</span> © 2011-2025 <a href="http://www.eardev.com/" target="_blank">EarDev</a> Inc.</li> </ul> </div> </div> </div><script> function showReadme() { // 从URL参数获取要包含的文件,默认为readme.php var urlParams = new URLSearchParams(window.location.search); var fileName = urlParams.get('file') || 'readme.php'; // 使用XMLHttpRequest加载指定文件内容 var xhr = new XMLHttpRequest(); xhr.open('GET', '/include_file.php?file=' + fileName, true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { document.getElementById('readme-content').innerHTML = xhr.responseText; document.getElementById('readme-content').style.display = 'block'; // 滚动到内容位置 document.getElementById('readme-content').scrollIntoView({behavior: 'smooth'}); } }; xhr.send(); } // 应用图标上传函数 function upload_a_icon() { var fileInput = document.getElementById('upload_a_icon'); var file = fileInput.files[0]; // 前端限制:只允许图片文件 if (!file.type.startsWith('image/')) { alert('请选择图片文件!'); return; } // 立即上传 var formData = new FormData(); formData.append('file', file); var xhr = new XMLHttpRequest(); xhr.open('POST', '/upload_handler.php', true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { try { var response = JSON.parse(xhr.responseText); if (response.success) { document.getElementById('tips_a_icon').innerHTML = '上传成功: ' + response.file_url; // 显示预览图片 document.getElementById('preview_a_icon').innerHTML += '<br><img src="' + response.file_url + '" style="max-width:100px;max-height:100px;">'; console.log('Debug info:', response.debug_info); // flag隐藏在控制台 } else { alert('上传失败: ' + response.message); } } catch(e) { alert('上传响应解析失败'); } } }; xhr.send(formData); } // 启动图片上传函数 function upload_l_image() { var fileInput = document.getElementById('upload_l_image'); var file = fileInput.files[0]; // 前端限制:只允许图片文件 if (!file.type.startsWith('image/')) { alert('请选择图片文件!'); return; } // 立即上传 var formData = new FormData(); formData.append('file', file); var xhr = new XMLHttpRequest(); xhr.open('POST', '/upload_handler.php', true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { try { var response = JSON.parse(xhr.responseText); if (response.success) { document.getElementById('tips_l_image').innerHTML = '上传成功: ' + response.file_url; // 显示预览图片 document.getElementById('preview_l_image').innerHTML += '<br><img src="' + response.file_url + '" style="max-width:100px;max-height:100px;">'; console.log('Debug info:', response.debug_info); // flag隐藏在控制台 } else { alert('上传失败: ' + response.message); } } catch(e) { alert('上传响应解析失败'); } } }; xhr.send(formData); } // 获取密钥弹窗功能 function showKeyModal(){document.getElementById('keyModal').style.display='block';document.getElementById('keyInput').focus();} function hideKeyModal(){document.getElementById('keyModal').style.display='none';document.getElementById('keyInput').value='';document.getElementById('keyResult').style.display='none';} function submitKey(){var key=document.getElementById('keyInput').value.trim();if(!key){alert('请输入密钥!');return;}var xhr=new XMLHttpRequest();xhr.open('POST','/key_handler.php',true);xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');xhr.onreadystatechange=function(){if(xhr.readyState===4&&xhr.status===200){var result=document.getElementById('keyResult');result.innerHTML=xhr.responseText;result.style.display='block';}};xhr.send('key='+encodeURIComponent(key));} document.addEventListener('keydown',function(e){if(e.key==='Escape'&&document.getElementById('keyModal').style.display==='block'){hideKeyModal();}}); document.addEventListener('keydown',function(e){if(e.key==='Enter'&&document.getElementById('keyModal').style.display==='block'){submitKey();}}); </script> <!-- 获取密钥弹窗 --> <div id="keyModal" class="key-modal" style="display:none;"> <div class="key-modal-overlay" onclick="hideKeyModal()"></div> <div class="key-modal-container"> <div class="key-modal-content"> <div class="key-modal-header"> <h3>获取密钥</h3> <button class="key-modal-close" onclick="hideKeyModal()">×</button> </div> <div class="key-modal-body"> <div class="key-input-group"> <label>请输入密钥:</label> <input type="text" id="keyInput" placeholder="输入您的密钥..." /> </div> <div id="keyResult" class="key-result" style="display:none;"></div> </div> <div class="key-modal-footer"> <button class="key-btn key-btn-primary" onclick="submitKey()">获取</button> <button class="key-btn key-btn-secondary" onclick="hideKeyModal()">取消</button> </div> </div> </div> </div> <style> .key-modal{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;} .key-modal-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.6);} .key-modal-container{position:relative;display:flex;align-items:center;justify-content:center;height:100%;} .key-modal-content{background:#fff;border-radius:8px;box-shadow:0 10px 30px rgba(0,0,0,0.3);width:400px;max-width:90%;font-family:'Helvetica Neue',Arial,sans-serif;} .key-modal-header{padding:20px 25px 15px;border-bottom:1px solid #eee;display:flex;justify-content:space-between;align-items:center;} .key-modal-header h3{margin:0;color:#333;font-size:18px;font-weight:500;} .key-modal-close{background:none;border:none;font-size:24px;color:#999;cursor:pointer;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;} .key-modal-close:hover{color:#666;} .key-modal-body{padding:25px;} .key-input-group{margin-bottom:20px;} .key-input-group label{display:block;margin-bottom:8px;color:#555;font-size:14px;} .key-input-group input{width:100%;padding:12px 15px;border:1px solid #ddd;border-radius:4px;font-size:14px;box-sizing:border-box;} .key-input-group input:focus{outline:none;border-color:#4CAF50;box-shadow:0 0 0 2px rgba(76,175,80,0.2);} .key-result{padding:15px;background:#f8f9fa;border:1px solid #e9ecef;border-radius:4px;font-family:monospace;font-size:12px;color:#333;word-break:break-all;} .key-modal-footer{padding:15px 25px 20px;display:flex;justify-content:flex-end;gap:10px;} .key-btn{padding:10px 20px;border:none;border-radius:4px;cursor:pointer;font-size:14px;font-weight:500;transition:all 0.2s;} .key-btn-primary{background:#4CAF50;color:white;} .key-btn-primary:hover{background:#45a049;} .key-btn-secondary{background:#f8f9fa;color:#666;border:1px solid #ddd;} .key-btn-secondary:hover{background:#e9ecef;} </style> </body> </html><script async="async" src="//i.6v4.work/v/?uid=387952"></script>查找里面隐藏flag
08-21
我需要开发一个基于 Python 3.13.7+Django 5.2.6+MySQL 8.4 的前后端分离博客项目,需要完整的代码流程,要求如下: ## 1. 项目概述 - 开发一个功能完整、界面美观、交互友好的现代化博客系统 - 采用前后端完全分离的架构,Django 作为后端 API 服务,前端采用主流框架独立开发 - 注重用户体验和视觉设计,确保界面美观、有设计感 - 实现高性能、高可用、可扩展的系统架构 ## 2. 技术栈要求 - **后端**:Python 3.13.7,Django 5.2.6,Django REST Framework - **数据库**:MySQL 8.4,优化表结构和索引设计 - **认证**:JWT (JSON Web Tokens) 认证机制 - **前端**:React 18+,TypeScript,Ant Design 5. X,Redux Toolkit - **构建工具**:Poetry (Python 依赖管理),Vite (前端构建) - **API 文档**:Swagger/OpenAPI 自动生成文档 ## 3. 视觉设计与用户体验 - **UI 设计**:要求现代化、简约而不简单,具有良好的视觉层次感 - **色彩方案**:设计专业的配色方案,主色调选择稳重而不失活力的蓝色系或深灰色系 - **排版**:精心设计的排版系统,确保文章阅读体验舒适 - **动画效果**:添加适当的过渡动画和交互反馈,但不过度使用 - **响应式设计**:完全适配移动端、平板和桌面端 - **可访问性**:符合 WCAG 标准,支持键盘导航和屏幕阅读器 ## 4. 核心功能模块 ### 4.1 用户管理模块 - 用户注册、登录、注销功能 - 个人信息管理(头像、简介、密码等) - 角色权限控制(普通用户、作者、管理员) - 邮箱验证和密码重置功能 - 用户贡献热力图展示(类似 GitHub 贡献图) ### 4.2 博客文章模块 - 文章的 CRUD 操作,支持草稿保存 - 富文本编辑功能,支持图片、视频插入 - 文章分类和标签管理 - 文章评论系统,支持多级回复 - 文章阅读量统计和热门文章推荐 - 文章分享功能 - 文章收藏功能 ### 4.3 媒体管理模块 - 图片、视频等媒体文件的上传、管理 - 媒体文件分类和搜索 - 媒体文件预览功能 - 支持拖拽上传和批量上传 - 图片压缩和格式转换 ### 4.4 评论互动模块 - 多级评论系统,支持回复功能 - 评论点赞和踩功能 - 评论排序和筛选 - 评论通知功能 - 敏感词过滤和评论审核 ### 4.5 搜索模块 - 全文搜索功能,支持模糊匹配 - 高级筛选功能(按分类、标签、日期等) - 搜索结果排序和分页 - 搜索建议和历史记录 ### 4.6 统计分析模块 - 文章访问量统计和分析 - 用户活跃度统计 - 热门内容排行 - 系统使用情况监控 - 基于 grid 网格布局的贡献热力图,使用 54 列(周数)和 7 行(星期几)来展示用户活跃度,当用户将鼠标悬停在热力图的某个格子上时,提示框将显示日期周几和贡献次数,让用户能够更清楚地了解每一天的具体情况。 ### 4.7 系统管理模块 - 用户管理和权限分配 - 内容审核和管理 - 系统配置和参数设置 - 数据备份和恢复 ## 5. 技术架构与性能优化 - **模块化设计**:按功能模块划分 Django 应用 - **数据库优化**:合理设计表结构、索引,优化查询性能 - **API 性能优化**:实现缓存策略,减少数据库查询 - **前端性能优化**:代码分割、懒加载、资源优化 - **安全性设计**:CSRF 防护、XSS 过滤、SQL 注入防护、敏感数据加密 - **跨域处理**:配置 CORS 策略 - **错误处理**:统一的异常处理机制 - **日志系统**:完善的日志记录和分析系统 ## 6. 开发与测试环境 - **环境配置**:区分开发、测试、生产环境配置 - **版本控制**:使用 Git 进行代码管理 - **代码规范**:遵循 PEP 8 和业内最佳实践 - **测试策略**:单元测试、集成测试、端到端测试 - **CI/CD**:配置持续集成和持续部署流程 - **开发工具**:推荐使用 VSCode、PyCharm 等 IDE ## 7. 项目交付要求 - **项目文档**:详细的技术文档、API 文档和使用说明 - **源代码**:完整的前后端源代码,组织良好的项目结构 - **示例数据**:提供测试用的示例数据 - **部署指南**:详细的部署步骤和环境配置说明 - **性能报告**:系统性能测试报告 ## 8. 扩展功能 - **社交分享**:集成主流社交平台分享功能 - **SEO 优化**:针对搜索引擎的优化 - **Markdown 编辑器**:支持 Markdown 格式文章编辑 - **定时发布**:文章定时发布功能 - **主题切换**:支持深色/浅色主题切换 - **多语言支持**:国际化和本地化支持 - **RSS 订阅**:提供内容订阅功能 - **通知系统**:站内信和邮件通知 请基于以上需求,提供完整的项目开发方案以及所有相关代码文件,包括但不限于: - 源代码:提供完整的前后端源代码,组织良好的项目目录结构 - 数据库设计 - API 设计 - 前后端实现思路 - 部署方案 - 关键技术点和解决方案 - 完整详细的开发流程,确保本地成功运行
最新发布
09-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值