原生js實(shí)現(xiàn)網(wǎng)易輪播圖效果
一、實(shí)現(xiàn)效果圖

二、分析布局
主盒子里分上下兩個(gè)小盒子(1和2)。
包含圖片的盒子占兩張圖片的寬(3),處于上盒子中,當(dāng)前圖片在上盒子(1)中,其它圖片在盒子(3)的右側(cè)等待播放。
下邊的盒子(2)包括了六個(gè)小方塊及定位在主盒子上的兩個(gè)箭頭。
三、html部分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>wangyi</title> <link type="text/css" rel="stylesheet" href="css/guide.css"/> <script type="text/javascript" src="../animate.js"></script> <script type="text/javascript" src="js/main.js"></script> </head> <body> <div class="w-slider"> <div class="slider"> <div class="slider-main" id="slider_main_block"> <div class="slider-main-img"><a href="#"><img src="images/1.jpg"/></a></div> <div class="slider-main-img"><a href="#"><img src="images/2.jpg"/></a></div> <div class="slider-main-img"><a href="#"><img src="images/3.jpg"/></a></div> <div class="slider-main-img"><a href="#"><img src="images/4.jpg"/></a></div> <div class="slider-main-img"><a href="#"><img src="images/5.jpg"/></a></div> <div class="slider-main-img"><a href="#"><img src="images/6.jpg"/></a></div> </div> </div> <div class="slider-ctrl" id="slider_ctrl"> <span class="slider-ctrl-pre"></span> <span class="slider-ctrl-next"></span> </div> </div> </body> </html>
四、CSS部分
* {
margin: 0;
padding: 0;
}
.w-slider {
width:310px;
height:265px;
margin:100px auto;
overflow: hidden;
position: relative;
}
.slider {
width:310px;
height:220px;
}
.slider-main {
width:620px;
height:220px;
}
.slider-main-img{
width:310px;
height:220px;
position:absolute;
top:0;
left:0;
}
.slider-main-img img{
vertical-align: top;
}
.slider-ctrl {
width:310px;
height:45px;
text-align:center;
}
.slider-ctrl span {
cursor: pointer;
}
.slider-ctrl-con {
display:inline-block;
width:24px;
height:20px;
margin-right:8px;
text-indent: -20em;
overflow:hidden;
background:url(../images/icon.png)-24px -782px no-repeat;
}
.slider-ctrl .current {
background:url(../images/icon.png)-24px -762px no-repeat;
}
.slider-ctrl-pre,
.slider-ctrl-next {
width:27px;
height:38px;
position:absolute;
top:50%;
margin-top:-36px;
opacity:0.7;
filter:alpha(opacity=50);
}
.slider-ctrl-pre {
background:url(../images/icon.png)6px 1px no-repeat;
left:0;
}
.slider-ctrl-next {
background:url(../images/icon.png)-9px -44px no-repeat;
right:0;
}
五、JS部
/**
* Created by 15623544233 on 2016/10/17.
*/
window.onload=function () {
//imgs的DOM對(duì)象
var slider_main_block =$("slider_main_block");
var sliderImgs =slider_main_block.children;
//最外層的slider大盒子
var sider_box =slider_main_block.parentNode.parentNode;
//slider-ctrl的DOM對(duì)象
var slider_ctrl = $("slider_ctrl");
var sliderCtrls =slider_ctrl.children;
//動(dòng)態(tài)添加Ctrl
for(var i=0;i<sliderImgs.length;i++){
var spans = document.createElement("span");
spans.className="slider-ctrl-con";
//span中的數(shù)字為當(dāng)前的索引,后面有重要作用
spans.innerHTML =sliderImgs.length-i;
slider_ctrl.insertBefore(spans,sliderCtrls[1]);
}
sliderCtrls[1].setAttribute("class","current slider-ctrl-con");
//imgW ---圖片寬
var imgW = sliderImgs[0].clientWidth;
//讓除第一張圖以外的所有圖右移
for(var i=1;i<sliderImgs.length;i++){
sliderImgs[i].style.left=imgW+"px";
}
//至關(guān)重要的標(biāo)志位,currentId 當(dāng)前出現(xiàn)的盒子
var currentId = 0;
for(var key in sliderCtrls){
sliderCtrls[key].onclick =function () {
//左箭頭點(diǎn)擊的運(yùn)動(dòng)動(dòng)畫
if(this.className=="slider-ctrl-pre"){
//與左移動(dòng)參數(shù)相反
animate(sliderImgs[currentId],{left:imgW});
--currentId<0?currentId=sliderImgs.length-1:currentId;
sliderImgs[currentId].style.left=-imgW+"px";
animate(sliderImgs[currentId],{left:0});
//右箭頭的運(yùn)動(dòng)動(dòng)畫,與自動(dòng)輪播的運(yùn)動(dòng)動(dòng)畫一致
}else if(this.className=="slider-ctrl-next"){
autoPlay();
}else{
//得到當(dāng)前要點(diǎn)擊的圖片索引號(hào)
var that = this.innerHTML-1;
if(that>currentId){
//像點(diǎn)擊右側(cè)按鈕一樣播放
animate(sliderImgs[currentId],{left:-imgW});
sliderImgs[that].style.left=imgW+"px";
}else if(that<currentId){
animate(sliderImgs[currentId],{left:imgW});
sliderImgs[that].style.left=-imgW+"px";
}
/*當(dāng)點(diǎn)擊按鈕后,當(dāng)前圖片currentId移動(dòng)后,所點(diǎn)擊的盒子成為當(dāng)前的圖片,使圖片連續(xù)*/
currentId =that;
animate(sliderImgs[currentId],{left:0});
}
flashCurrent((currentId+1));
};
}
//小方塊控制slider動(dòng)畫的函數(shù)
function flashCurrent(index) {
//console.log(index);
for(var i=1;i<sliderCtrls.length-1;i++){
sliderCtrls[i].setAttribute("class","slider-ctrl-con");
}
sliderCtrls[index].setAttribute("class","current slider-ctrl-con");
}
//添加定時(shí)器
var timer =null;
timer =setInterval(autoPlay,2000);
function autoPlay() {
animate(sliderImgs[currentId],{left:-imgW});
//當(dāng)?shù)?張左移走后,6>5,第0張回到框中
++currentId>sliderImgs.length-1?currentId = 0:currentId;
//上一張圖片左移后,下一張圖片快速到右邊
sliderImgs[currentId].style.left=imgW+"px";
//下張右側(cè)圖片左移
animate(sliderImgs[currentId],{left:0});
}
sider_box.onmouseover =function () {
clearInterval(timer);
}
sider_box.onmouseout=function () {
timer =setInterval(autoPlay,2000);
}
};
function $(id) {
return document.getElementById(id);
}
/*當(dāng)前樣式屬性值的獲取 */
function curStyle(obj,attr){
if(obj.currentStyle){
//IE瀏覽器
return obj.currentStyle[attr];
}else{
//標(biāo)準(zhǔn)瀏覽器
return window.getComputedStyle(obj,null)[attr];
}
}
/*封裝的運(yùn)動(dòng)框架*/
/*obj ----做動(dòng)畫的DOM對(duì)象 ;json----變化的部分是json數(shù)據(jù) */
function animate(obj,json) {
//調(diào)用時(shí)先清定時(shí)器
clearInterval(obj.timer);
//定時(shí)器為obj的內(nèi)部定時(shí)器,不用每次調(diào)用都創(chuàng)建一個(gè)新的定時(shí)器
obj.timer = setInterval(function () {
//遍歷json數(shù)據(jù),每次遍歷的標(biāo)志位為flag
var flag=true;
//遍歷json數(shù)據(jù),eg:{left:20,top:40,opacity:50,z-index:3}
for(var key in json){
//取得盒子運(yùn)動(dòng)當(dāng)前的位置
var current= 0;
if(key=="opacity"){
//Ie6,7,8沒(méi)有設(shè)置透明度,默認(rèn)為undefined
current =Math.round(parseInt(curStyle(obj,key)*100))||1;
//console.log(current);
}else{
current= parseInt(curStyle(obj,key));
}
//運(yùn)動(dòng)步長(zhǎng):(目標(biāo)位置-當(dāng)前位置)/10
var step = (json[key]-current)/10;
step = step>0?Math.ceil(step):Math.floor(step);
//各屬性值的漸變動(dòng)畫
if(key=="opacity"){
if("opacity" in obj.style){
obj.style.opacity = (current+step)/100;
}else{
//兼容ie6,7,8
obj.style.filter ="alpha(opacity ="+(current+step)*10+")";
}
}else if(key=="zIndex"){
obj.style[key] =json[key];
}else
{
obj.style[key] = current+step+"px";
}
//遍歷每個(gè)屬性時(shí)都判斷標(biāo)志位
if(current!=json[key]){
flag =false;
}
}遍歷結(jié)束后,標(biāo)志位都為true,判斷起所有動(dòng)畫執(zhí)行完畢,清除定時(shí)器
if(flag){
clearInterval(obj.timer);
}
},20)
}
精彩專題分享:jQuery圖片輪播 JavaScript圖片輪播 Bootstrap圖片輪播
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 原生js實(shí)現(xiàn)輪播圖的示例代碼
- 原生js實(shí)現(xiàn)無(wú)限循環(huán)輪播圖效果
- 原生js實(shí)現(xiàn)移動(dòng)開(kāi)發(fā)輪播圖、相冊(cè)滑動(dòng)特效
- 原生js實(shí)現(xiàn)無(wú)縫輪播圖效果
- 原生js實(shí)現(xiàn)旋轉(zhuǎn)木馬輪播圖效果
- 原生JS實(shí)現(xiàn)層疊輪播圖
- 原生JS輪播圖插件
- 原生JS京東輪播圖代碼
- 原生js實(shí)現(xiàn)焦點(diǎn)輪播圖效果
- 無(wú)限循環(huán)輪播圖之運(yùn)動(dòng)框架(原生JS實(shí)現(xiàn))
- 原生JS實(shí)現(xiàn)的輪播圖功能詳解
相關(guān)文章
JavaScript實(shí)現(xiàn)可拖拽的進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)可拖拽的進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05
javascript實(shí)現(xiàn)移動(dòng)端上的觸屏拖拽功能
這篇文章主要為大家詳細(xì)介紹了基于javascript實(shí)現(xiàn)移動(dòng)端上的觸屏拖拽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03
js位運(yùn)算在實(shí)際中使用的實(shí)例教程
我們可能很少在編程中用位運(yùn)算,如果沒(méi)深入學(xué)習(xí),可能也很難理解,下面這篇文章主要給大家介紹了關(guān)于js位運(yùn)算在實(shí)際中使用的相關(guān)資料,需要的朋友可以參考下2022-03-03
js實(shí)現(xiàn)網(wǎng)站首頁(yè)圖片滾動(dòng)顯示
網(wǎng)站首頁(yè)圖片滾動(dòng)顯示對(duì)于很多朋友都有很大的吸引,因?yàn)樗梢詭?lái)意想不到視覺(jué)沖擊效果,接下來(lái)本文也實(shí)現(xiàn)一下,感興趣的朋友可以參考下,或許對(duì)你學(xué)習(xí)js知識(shí)有所幫助2013-02-02
JavaScript第七種數(shù)據(jù)類型Symbol的用法詳解
Symbol是ES6中引入的一種新的基本數(shù)據(jù)類型,用于表示一個(gè)獨(dú)一無(wú)二的值。它是JavaScript中的第七種數(shù)據(jù)類型。本文將詳細(xì)講講Symbol的使用,需要的可以參考一下2022-09-09

