原生JS實現輪播圖的幾種方式
I 絕對定位+透明度
原理:首先,將所有輪播圖以絕對定位的方式定位父元素的相同位置;接著,實現上下鍵按鈕修改active的下標;最後,將所有圖片透明度重置為0,而被啟用的圖片透明度設定為1;
優點:實現最為簡單,程式碼量小,圖片過渡自然;
缺點:沒有左右滑動效果
HTML
<div id='container'>
<ul id='img-list'>
<li><img src=''/></li>
<li><img src=''/></li>
<li ><img src=''/></li>
<li><img src=''/></li>
</ul>
<a id='pre-btn'><span></span></a>
<a id='next-btn'><span></span></a>
</div>
CSS
#container{
width:100%;
position:relative;
overflow:hidden ;
}
#img-list{
width:100%;
position:absolute;
left:0;
top:0;
list-style:none;
}
#img-list li{
width:100%;
position:absolute;
left:0;
top:0;
opacity:0;
}
#img-list li:nth-child(1){
opacity:1;
}
#pre-btn{
width:50px;
height:100%;
position:absolute;
left:0 ;
top:0;
z-index:10;
}
#next-btn{
width:50px;
height:100%;
position:absolute;
right:0;
top:0;
z-index:10;
}
JS
window.onload=function(){
var img_list=document.getElementById('img-list');
var li_list=img_list.getElementsByTagName('li');
var pre_btn=document.getElementById('pre-btn');
var next_btn=document.getElementById('next-btn');
var current=0;
//顯示第i張
function showImg(index){
for(var i=0;i<li_list.length;i++){
li_list[i].style.opacity=0;
}
li_list[index].style.opacity='1';
}
//上一頁
pre_btn.click=funciton(){
current--;
showImg(current);
}
//下一頁
next_btn.click=funciton(){
current++;
showImg(current);
}
}
II 絕對定位+left
原理:首先,將所有圖片分為四類,啟用的、啟用的上一頁、啟用的下一頁、其他,定位分別為left:0;、left:-100%;、left:100;、left:100%;
,其他圖片;接著,實現上下鍵按鈕的修改active的圖片下標;動態修改圖片的class,切換的動畫用CSS3的transition來實現;
優點:實現較為簡單,程式碼量小,有圖片滑動效果;
缺點:最後一張時候點選下一張有明顯的縫隙
HTML
<div id='container'>
<ul id='img-list'>
<li class='active'><img src=''/></li>
<li class='active-next'><img src=''/></li>
<li class=''><img src=''/></li>
<li class='active-pre'><img src=''/></li>
</ul>
<a id='pre-btn'><span></span></a>
<a id='next-btn'><span></span></a>
</div>
CSS
#container{
width:100%;
position:relative;
overflow:hidden;
}
#container:before {
content: '';
height: 0.1px;
display: inline-block;
padding-bottom: 50%;
}
#img-list{
width:100%;
height:100%;
position:absolute;
left:0;
top:0;
list-style:none;
}
#img-list li{
width:100%;
height:100%;
position:absolute;
left:0;
top:0;
opacity:0;
transition:all 0.3s ease 0s;
}
#img-list li img{
width:100%;
}
#img-list li.active{
opacity:1;
left:0;
}
#img-list li.active_pre{
opacity:0;
left:-100%;
}
#img-list li.active_next{
opacity:0;
left:100%;
}
#pre-btn{
width:50px;
height:100%;
position:absolute;
left:0;
top:0;
z-index:10;
}
#next-btn{
width:50px;
height:100%;
position:absolute;
right:0;
top:0;
z-index:10;
}
JS
window.onload=function(){
var img_list=document.getElementById('img-list');
var li_list=img_list.getElementsByTagName('li');
var pre_btn=document.getElementById('pre-btn');
var next_btn=document.getElementById('next-btn');
var n=li_list.length;
var current=0;
//顯示第i張
function changeState(index){
var pre=(index-1<0)?n:index-1;
var next=(index+1>n+1)?0:index+1;
for(var i=0;i<li_list.length;i++){
li_list[i].className=0;
}
li_list[index].className='active';
li_list[pre].className='active_pre';
li_list[next].className='active_next';
}
//上一頁
pre_btn.click=funciton(){
current=(current-1<0)?n:current-1;
changeState(current);
}
//下一頁
next_btn.click=funciton(){
current=(current+1>n-1)?0:current+1;
changeState(current);
}
}
III 絕對定位+left+DOM操作
原理:在第二種方法的基礎上增加了DOM操作。即點選下一頁後,先將第一個圖片複製到ul末尾,然後左移ul,接著刪除第一個圖片,最後恢復ul的left值;點選上一頁,將最後一個圖複製到頭部之前,然後右移並刪除最後一個元素。
優點:無縫切換,過渡自然;
缺點:實現複雜,程式碼量大
HTML
<div id='container'>
<ul id='img-list'>
<li><img src=''/></li>
<li><img src=''/></li>
<li><img src=''/></li>
<li><img src=''/></li>
</ul>
<a id='pre-btn'><span></span></a>
<a id='next-btn'><span></span></a>
</div>
CSS
#container{
width:100%;
position:relative;
overflow:hidden;
}
/*佔位並保持長寬比*/
#container:before{
content: "";
display: inline-block;
padding-bottom: 40%;
width: .1px;
vertical-align: middle;
}
#img-list{
width: 400%;
height: 100%;
position: absolute;
left: 0;
top: 0;
list-style:none;
}
#img-list li{
width:100%;
float:left;
position:relative;
}
#img-list li img{
max-width:100%;
}
#pre-btn{
width:50px;
height:100%;
position:absolute;
left:0;
top:0;
z-index:10;
cursor: pointer;
}
#next-btn{
width:50px;
height:100%;
position:absolute;
right:0;
top:0;
z-index:10;
cursor: pointer;
}
JS
window.onload = function () {
var container = document.getElementById('container');
var img_list = document.getElementById('img-list');
var li_list = img_list.getElementsByTagName('li');
var pre_btn = document.getElementById('pre_btn');
var next_btn = document.getElementById('next_btn');
var n = li_list.length;
var btn = true;
//獲取元素當前屬性值
function getStyle(obj, arr) {
if (obj.currentStyle) {
return obj.currentStyle[arr]; //針對ie
} else {
return document.defaultView.getComputedStyle(obj, null)[arr];
}
}
//自定義的移動函式
//obj為節點,json為需要變化的屬性,interval為動畫間隔(決定幀數),sp可以用來改變變化速度,fn為回撥函式
function move(obj, json, interval, sp, fn) {
clearInterval(obj.timer);
obj.timer = setInterval(function () {
var flag = true;
for (var arr in json) {
var icur = 0;
if (arr == 'toLeft') {
//獲取的**px轉化為整型
var icur = parseInt(getStyle(obj, 'left'));
}
var speed = (json[arr] - icur) * sp;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
//判斷當前屬性值與變化的最終結果是否相等
if (icur != json[arr]) {
flag = false;
}
//一幀的變化值
if (arr == "toLeft") {
obj.style.left = (icur + speed) + "px";
}
}
//如果變化完成了的話,呼叫回撥函式
if (flag) {
clearInterval(obj.timer);
if (fn) {
fn();
}
}
}, interval);
}
//點選下一張,把ul第一張複製到尾部,ul左移一個圖片寬度,將ul第一張刪除,ul的left設定為0(即右移一個圖片寬度)
next_btn.onclick = function () {
if (btn) {
btn = false;
//第一步複製到尾部
var li_first = li_list[0].cloneNode(true);
img_list.appendChild(li_first);
//第二步ul左移
var l = li_list[1].offsetWidth;
move(container, {
toLeft: -l
}, 10, 0.03, function () {
container.removeChild(img_list[0]);
img_list.style.left = '0px';
btn = true;
})
}
}
//點選上一張,將最後一張複製到ul頭部,將ul左移一個圖片寬度,最後ul右移至left為0
pre_btn.onclick = function () {
if (btn) {
btn = false;
var li_last = li_list[n - 1].cloneNode(true);
img_list.insertBefore(li_last, li_list[0]);
img_list.style.left = -li_list[1].offsetWidth + 'px';
move(img_list, {
toLeft: 0
}, 10, 0.03, function () {
img_list.removeChild(li_list[n]);
btn = true;
})
}
}
}
相關推薦
js實現輪播效果幾種方式
小編推薦:Fundebug專注於JavaScript、微信小程式、微信小遊戲,Node.js和Java實時BUG監控。真的是一個很好用的bug監控費服務,眾多大佬公司都在使用。 輪播呢,也是各種網站上常見的一種展示效果,這裡我來寫一寫實現輪播的一些簡單方法。 //
原生JS實現輪播圖的幾種方式
I 絕對定位+透明度 原理:首先,將所有輪播圖以絕對定位的方式定位父元素的相同位置;接著,實現上下鍵按鈕修改active的下標;最後,將所有圖片透明度重置為0,而被啟用的圖片透明度設定為1; 優點:實現最為簡單,程式碼量小,圖片過渡自然; 缺點:沒有左右滑
h5原生js實現輪播圖
list sla head log startx creat ase hit eve 預覽地址:http://s.xnimg.cn/a90529/wap/wechatLive/test/slide.html <!DOCTYPE html> <html l
原生js實現輪播圖原理分析
一、輪播圖需求 輪播圖需要實現左右翻頁的無縫連線 需要點選左右切換 需要實現跳轉 顯示當前位置的小圓點 二、輪播圖的原理 1.圖片移動實現原理: 利用浮動將所有所有照片依次排成一行,給這一長串圖片新增一個父級的遮罩,每次只顯示一張圖,其餘的都隱
原生js實現輪播圖原理
輪播圖的原理1.圖片移動實現原理:利用浮動將所有所有照片依次排成一行,給這一長串圖片新增一個父級的遮罩,每次只顯示一張圖,其餘的都隱藏起來。對圖片新增絕對定位,通過控制left屬性,實現照片的移動。 2.圖片移動動畫原理:從a位置移動到b位置,需要先計算兩點之間的差值,通過差值和時間間隔,計算出每次移動的步
使用原生js實現輪播圖效果
這幾天在逛網站的時候,發現很多網站都有輪播圖這個效果,所以我就仿照小米的官網用原生js寫了一個輪播圖效果,希望大家喜歡。 這是我釋出在github上的最後實現的效果:https://heternally.github.io/banner/ 下面我簡單跟大家說一下
用原生js實現輪播圖
今天分享一下簡單的輪播圖製作過程,用原生js實現。雖然網上有各種外掛製作的高大上又好用的輪播圖,但還是要清楚它的基本原理。 1.基本原理 將所有圖片並排放到一個div中,然後再放到展示視窗當中,讓裝有所有圖片的div通過改變left值,從而左右移動實現圖片切換。 2.htm
原生JS實現輪播圖1---勻速動畫
JS實現輪播圖 專案實現結果圖: 需求:1 根據圖片動態新增小圓點 2 目標移動到小圓點輪播圖片 3 滑鼠離開圖片,定時輪播圖片;滑鼠在圖片上時暫
利用原生js實現輪播圖效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js原生輪播圖</title> <style type="text
animate動畫、原生JS實現輪播圖
寫在前面 最近在寫專案的時候,才發現自己對css3這部分的內容已經生疏了,複習css3的時候,看到animate屬性,就用其寫了個焦點輪播圖,當然自己也用原生JS碼了個,當然css3動畫無疑是錦上添花,還是要多總結啊,原始碼我們會在最後附上git地址,好了,下
原生JS實現輪播圖
要求: 在和上一任務同一目錄下面建立一個task0002_3.html檔案,在js目錄中建立task0002_3.js,並在其中編碼,實現一個輪播圖的功能。 圖片數量及URL均在HTML中寫好 可以配置輪播的順序(正序、逆序)、是否迴圈、間隔時長 圖片切換的
JS原生程式碼實現輪播圖(無左右滑動,底下圓點按鈕)
先上效果圖: 由於動態圖太大,所以只能截圖了;大致效果,圖片輪播的過程中,底下的灰色提示漸漸出現; 現在來說實現思路: HTML部分: <div id="content"> <img id="img1" /> &
js實現輪播圖
display lex tee 添加 har scrip con tle win 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF
原生js實現輪播
tex tom enter utf-8 定義 radi absolut tco query <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8">
用原生js封裝輪播圖
round this getc 行間樣式 gets -m ++ fun ted 原生js封裝輪播圖 對於初學js的同學來說,輪播圖還是一個難點,尤其是原生js封裝輪播圖代碼,下面是我之前做的一個輪播圖項目中封裝好的一些代碼,有需要的同學可以看一下,有什麽不懂的可以看註釋,
授人以漁式解析原生JS寫輪播圖
需求與分析 需求:迴圈無縫自動輪播五張圖,按左右箭頭可以手動切換圖片,滑鼠點選輪播圖下面按鈕 1 2 3 4 5會跳轉到對應的第1 2 3 4 5張圖片。滑鼠放到輪播圖的圖片上時不再自動輪播並且左右箭頭顯示出來,滑鼠移開時左右箭頭隱藏掉並且自動輪播。 效果圖: 分析: 佈局:準備七張圖片
Jquery和純JS實現輪播圖(一)--左右切換式
var cur = 0, //當前的圖片序號 imgLis = getElementsByClassName("imgList")[0].getElementsByTagName("li"), //獲取圖片組 imgLen = imgLis.length, //獲取圖片的
最簡單 最詳細的原生js寫輪播圖
最簡單最詳細的原生js寫輪播圖 該輪播圖實現了自動輪播,圖片切換,滑鼠移入移出事件,佈局簡單,容易上手。希望能幫到大家。效果圖如下: 佈局擴充套件 裡面用了幾種方式實現了div的垂直居中,可見樣式程式碼註釋。 HTML
原生JS實現 輪播效果
<div id="playImages" class="play"> <ul class="big_pic"> <div class="prev"></div> <div class
js實現輪播圖--淡入淡出的效果。
window.onload = function(){ mv.app.toBanner(); }; var mv = {}; mv.tools = {}; mv.ui = {}; //淡入淡出也算是是一個公用元件 mv.ui.fadein = function(obj)