【JS/CSS3】实现带预览图幻灯片效果~
一、前期准备
1.1 案例分析
适用场景:单例布局
1.2 方法论
V视图 HTML+CSS+调试
C js实现控制流程
D数据 优化扩展
二、代码
结构
<div class="slider"><!-- 特效区 -->
<div class="main"><!-- 主视图区 -->
<div class="main_i">
<div class="caption">
<h2>h2 caption</h2>
<h2>h3 caption</h2>
</div>
<img src="data:images/{{index}}.jpg" alt="">
</div>
</div><!-- 主视图区结束 -->
<div class="ctrl"><!-- 控制区 -->
<a href="javascript:;"><img src="data:images/{{index}}.jpg" alt="">
</a>
</div><!-- 控制区结束 -->
</div><!-- 特效区结束 -->
样式(CSS略)
脚本功能开发
>>内容输出
Template改造 输出幻灯片&控制按钮 图片位置调整
>>切换控制
切换幻灯片 .main_i_active 切换控制按钮 .ctrl_i_active
0、修改VIEW ->Template(关键字替换),增加Template id
图片区
<div class="main" id="template_main">
<h2>{{h2}}}</h2>
<h3>{{h3}}}</h3>
<img src="data:images/{{index}}.jpg">
按钮区
<div class="ctrl" id="template_ctrl">
<a class="ctrl_i" id="ctrl_{{index}}" href="javascript:switchSlider({{index}});"><img src="data:images/{{index}}.jpg" alt="图片预览"></a>
下面是重点 JS脚本的编写~~
<script type="text/javascript"> // 1、数据定义(实际生产环境,应由后台给出)
var data = [
{img:1,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
{img:2,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
{img:3,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
{img:4,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
{img:5,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
{img:6,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
{img:7,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
]; // 2、通用函数
var g = function(id){
if( id.substr(0,1) =="." ){
return document.getElementsByClassName( id.substr(1) );
}
return document.getElementById(id);
} // 3、添加幻灯片的操作(所有幻灯片&对应的按钮)
function addSliders(){
// 3.1 获取模版
var tpl_main = g("template_main").innerHTML
.replace(/^\s*/,'')
.replace(/\s*$/,''); var tpl_ctrl = g("template_ctrl").innerHTML
.replace(/^\s*/,'')
.replace(/\s*$/,''); // 3.2 定义最终输出HTML的变量
var out_main = [];
var out_ctrl = []; // 3.3 遍历所有数据,构建最终输出的HTML
for( i in data ){
var _html_main = tpl_main
.replace(/{{index}}/g,data[i].img)
.replace(/{{h2}}/g,data[i].h2)
.replace(/{{h3}}/g,data[i].h3)
.replace(/{{css}}/g,['','main_i_right'][i%2]); var _html_ctrl = tpl_ctrl
.replace(/{{index}}/g,data[i].img); out_main.push(_html_main);
out_ctrl.push(_html_ctrl);
} // 3.4 把HTML回写到对应的DOM里面
g("template_main").innerHTML = out_main.join('');
g("template_ctrl").innerHTML = out_ctrl.join(''); // 7、增加#main_background
g('template_main').innerHTML += tpl_main
.replace(/{{index}}/g,'{{index}}')
.replace(/{{h2}}/g,data[i].h2)
.replace(/{{h3}}/g,data[i].h3); g('main_{{index}}').id = 'main_background';
} // 5、幻灯片切换
function switchSliders(n){
// 5.1 获得要展现的幻灯片&控制按钮 DOM
var main = g("main_"+n);
var ctrl = g("ctrl_"+n); // 5.2 获得所有的幻灯片&控制按钮
var clear_main = g('.main_i');
var clear_ctrl = g('.ctrl_i'); // 5.3 清除他们的active样式
for(var i=0;i<clear_ctrl.length;i++){
clear_main[i].className = clear_main[i].className.replace('main_i_active','');
clear_ctrl[i].className = clear_ctrl[i].className.replace('ctrl_i_active','');
} // 5.4为当前控制按钮和幻灯片附加样式
g("main_"+n).className += ' main_i_active';
g("ctrl_"+n).className += ' ctrl_i_active';
// 7.2切换时 复制上一张幻灯片到main_background中
setTimeout(function(){
g('main_background').innerHTML = main.innerHTML;
},1000); } // 6、动态调整图片的margin-top 使其垂直居中
function movePictures(){
var pictures = g('.picture');
for(i=0;i<pictures.length;i++){
pictures[i].style.marginTop = -(pictures[i].clientHeight/3) + 'px';
}
} // 4、定义何时处理幻灯片输出
window.onload = function(){
addSliders();
switchSliders(1);
setTimeout(function(){
movePictures();
},100)
}
</script>
效果图 … = =莫吐槽又是这几张图~~~
遇到问题:
1、 给图片直接加top:50%;会有BUG,没作用,原因可能是没给height固定高度~~给了固定高度就好了
但问题又来了,2、给固定高度后,按钮组不能自适应宽度 … 会被挤到第二排去 ……
蛋疼。。以后来填坑吧
【JS/CSS3】实现带预览图幻灯片效果~的更多相关文章
- JS+CSS3实现带预览图幻灯片效果
这个案例学习起来还有点吃力,目前还没有独自自己写出来过,贴出来以免忘记. 慕课网该课程原地址:http://www.imooc.com/learn/412 源码: <!DOCTYPE html& ...
- 可拖拽和带预览图的jQuery文件上传插件ssi-uploader
插件描述:ssi-uploader是一款带预览图并且可以拖拽文件的jQuery ajax文件上传插件.该文件上传插件支持AJAX,支持多文件上传,可控制上的文件格式和文件大小,提供各种回调函数,使用非 ...
- HTML5-video标签-实现点击预览图播放或暂停视频
HTML5-video标签-实现点击预览图播放或暂停视频 刚刚参加工作,开始更多的接触到一些新的知识,促使我开始了解html5和css3的新特性.这时我才真的发现到html5和css3的强大. 之前关 ...
- JAVA打印类(带预览)
package tool; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; ...
- js实现上传图片本地预览功能以及限制图片的文件大小和尺寸大小
方法一: js: /** * 上传图片本地预览方法 * @param {Object} fileObj 上传文件file的id元素 fresh-fileToUpload * ...
- PHP如何生成文章预览图
PHP如何生成文章预览图 一.总结 一句话总结:php的wkhtmltox扩展,php官方文档有怎么使用,或者github,或者百度,等等等等 wkhtmltox 1.PHP如何自动生成文章预览图? ...
- APP图标设计小技巧:在iOS上快速获得APP图标的真实预览图
严格来说,这并不是一篇关于前端开发的文章,因为涉及到的知识非常浅.这只是一个向设计狮们分享的小经验,只是其中用到了一些前端内容. 最近接了个私活,了解到一个初创公司正在高价悬赏Logo(主要用于APP ...
- 关于Widget预览图的改动
在做项目时候,由于常常不带GPS功能.所以在有些细节上须要做处理,当中之中的一个就是.快捷开关的预览图和实际效果图的差异 在我们快捷开关的预览图中,总是能够看到五个快捷开关,事实上就包含GPS信息 而 ...
- 兼容好的JS图片上传预览代码
转 : http://www.codefans.net/articles/1395.shtml 兼容好的JS图片上传预览代码 (谷歌,IE11) <html xmlns="http:/ ...
随机推荐
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(20)-权限管理系统-根据权限获取菜单
系列目录 不知不觉到20讲,真是漫长的日子,可惜最近工作挺忙,要不可以有更多的时间来更新,多谢大家的一路支持.如果你觉得好,记得帮我点击推荐^-^ 我们在之前已经插入一些真实数据,其中包含了一个用户和 ...
- React学习笔记。
有段时间没写博客了,最近这段时间有点说不出的苦,虽然说年轻的时候该多出去经历些事,但每次找工作东跑西跑,坐公交坐地铁浪费了我太多时间,我感觉到这是一种浪费,对生命的浪费.所以很想尽快找到一份工作,去努 ...
- 【转】linux内核中writesb(), writesw(), writesl() 宏函数
writesb(), writesw(), writesl() 宏函数 功能 : writesb() I/O 上写入 8 位数据流数据 (1字节) writesw() I/O 上写入 16 ...
- golang枚举类型 - iota用法拾遗
在c#.java等高级语言中,经常会用到枚举类型来表示状态等.在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手. 1.枚举类型定义 从百度百科查询解释如下:http://baike ...
- 微服务和SOA服务
微服务和SOA都被认为是基于服务的架构,这意味着这两种架构模式都非常强调将“服务”作为其架构中的首要组件,用于实现各种功能(包括业务层面和非业务层面).微服务和SOA是两种差异很大的架构模式,但是他们 ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- Chart: Who pays the most in Seattle for software engineers
http://www.geekwire.com/2012/chart-pays-seattle-software-engineers/ Chart: Who pays the most in Seat ...
- Java IO之字符流和文件
前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...
- CSS3鼠标滑过图标放大以及旋转
本人是HTML5-CSS3初学者,这次分享一款纯CSS3实现的图片动画,当鼠标滑过小图标时,图标会放大,同时图标会出现旋转的动画效果.我们在很多个性化个人博客中经常看到鼠标滑过人物头像后头像图片旋转就 ...
- arcgis api for js共享干货系列之一自写算法实现地图量算工具
众所周知,使用arcgis api for js实现地图的量算工具功能,无非是调用arcgisserver的Geometry服务(http://localhost:6080/arcgis/rest/s ...