【JS+CSS3】实现带预览图幻灯片效果的示例代码

前端之家收集整理的这篇文章主要介绍了【JS+CSS3】实现带预览图幻灯片效果的示例代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、前期准备

1.1 案例分析

适用场景:单例布局 1.2 方法

V视图 HTML+CSS+调试 C js实现控制流程 D数据 优化扩展

二、代码

结构

h2 caption

h3 caption

样式(CSS略)

脚本功能开发

>>内容输出 Template改造 输出幻灯片&控制按钮 图片位置调整

>>切换控制 切换幻灯片 .main_i_active 切换控制按钮 .ctrl_i_active

0、修改VIEW ->Template(关键字替换),增加Template id 图片区

{{h2}}}

{{h3}}}

图片预览

下面是重点 JS脚本的编写~~

// 1、数据定义(实际生产环境,应由后台给出)
var data = [
{img:1,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},{img:2,{img:3,{img:4,{img:5,{img:6,{img:7,];

// 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*/,'');

// 3.2 定义最终<a href="/tag/shuchu/" target="_blank" class="keywords">输出</a>HTML的变量
var out_main = [];
var out_ctrl = [];

// 3.3 遍历所有数据,构建最终<a href="/tag/shuchu/" target="_blank" class="keywords">输出</a>的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、<a href="/tag/zengjia/" target="_blank" class="keywords">增加</a>#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 获得所有的<a href="/tag/huandengpian/" target="_blank" class="keywords">幻灯片</a>&控制按钮
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为当前控制按钮和<a href="/tag/huandengpian/" target="_blank" class="keywords">幻灯片</a>附加样式  
g("main_"+n).className += ' main_i_active';
g("ctrl_"+n).className += ' ctrl_i_active';
// 7.2切换时 复制上一张<a href="/tag/huandengpian/" target="_blank" class="keywords">幻灯片</a>到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)
}

效果图 … = =莫吐槽又是这几张图~~~

遇到问题:

1、 给图片直接加top:50%;会有BUG,没作用,原因可能是没给height固定高度~~给了固定高度就好了

但问题又来了,2、给固定高度后,按钮组不能自适应宽度 … 会被挤到第二排去 ……

以上这篇【JS+CSS3】实现带预览图幻灯片效果的示例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。

猜你在找的JavaScript相关文章