【JS+CSS3】實現帶預覽圖投影片效果的範例程式碼,css3範例程式碼

來源:互聯網
上載者:User

【JS+CSS3】實現帶預覽圖投影片效果的範例程式碼,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="images/{{index}}.jpg" alt="">    </div>  </div><!-- 主視圖區結束 -->  <div class="ctrl"><!-- 控制區 -->    <a href="javascript:;"><img src="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="images/{{index}}.jpg">
按鈕區
<div class="ctrl" id="template_ctrl">
<a class="ctrl_i" id="ctrl_{{index}}" href="javascript:switchSlider({{index}});"><img src="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】實現帶預覽圖投影片效果的範例程式碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援幫客之家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.