原生JS實現移動端輪播圖。
話不多說直接上程式碼。
html 結構
<div class="jd_banner"> <!--圖片--> <ul class="jd_bannerImg clearfix"> <li> <a href="javascript:;"> <img src="./uploads/l1.jpg" alt=""> </a> </li> <li> <a href="javascript:;"> <img src="./uploads/l2.jpg" alt=""> </a> </li> <li> <a href="javascript:;"> <img src="./uploads/l3.jpg" alt=""> </a> </li> <li> <a href="javascript:;"> <img src="./uploads/l4.jpg" alt=""> </a> </li> <li> <a href="javascript:;"> <img src="./uploads/l5.jpg" alt=""> </a> </li> <li> <a href="javascript:;"> <img src="./uploads/l6.jpg" alt=""> </a> </li> <li> <a href="javascript:;"> <img src="./uploads/l7.jpg" alt=""> </a> </li> <li> <a href="javascript:;"> <img src="./uploads/l8.jpg" alt=""> </a> </li> </ul> <!--點標記--> <ul class="jd_bannerIndicator"> <li class="active"></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> </div>
css樣式
<style> .jd_banner{ width: 100%; overflow: hidden; position: relative; } /*.jd_bannerImg{ width:800%; }*/ .jd_bannerImg{ width:800%; /*position: absolute; 如果使用absolute定位,會造成父容器無法獲取由子元素的撐開的高度*/ position: relative; /*新增預設偏移*/ /*transform: translateX(-10%);*/ /*使用定位:使用百分比的時候是參照父容器的寬度*/ /* left: -100%;*/ } /*.jd_bannerImg > li{ width:12.5%; float: left; }*/ .jd_bannerImg > li{ width:12.5%; float: left; } .jd_bannerImg > li img{ /*1.設定為塊元素 2.可以將文字的字型大小設定為0 3.vertical-align:bottom*/ display: block; width: 100%; } .jd_bannerIndicator{ width: 128px; height: 10px; position: absolute; left: 50%; bottom: 5px; transform: translateX(-50%); } .jd_bannerIndicator > li{ width: 6px; height: 6px; border-radius: 3px; border: 1px solid #fff; float: left; margin-left:10px; } .jd_bannerIndicator > li:first-of-type{ margin-left:0; } .jd_bannerIndicator > li.active{ background-color: #fff; } </style>
js
1.設定一下輪播的頁面結構,以及獲取一下需要用到的元素。
/*獲取輪播圖結構*/ var banner=document.querySelector(".jd_banner"); /*獲取圖片容器*/ var imgBox=banner.querySelector("ul:first-of-type"); /*獲取原始的第一張圖片*/ var first=imgBox.querySelector("li:first-of-type"); /*獲取原始的最後一張圖片*/ var last=imgBox.querySelector("li:last-of-type"); /*在首尾插入兩張圖片 cloneNode:複製一個dom元素*/ imgBox.appendChild(first.cloneNode(true)); /*insertBefore(需要插入的dom元素,位置)*/ imgBox.insertBefore(last.cloneNode(true),imgBox.firstChild); /*獲取所有圖片li元素*/ var lis=imgBox.querySelectorAll("li"); /*獲取li元素的數量*/ var count=lis.length; /*.獲取banner的寬度*/ var bannerWidth=banner.offsetWidth; /*設定圖片盒子的寬度*/ imgBox.style.width=count*bannerWidth+"px"; /*設定每一個li(圖片)元素的寬度*/ for(var i=0;i<lis.length;i++){ lis[i].style.width=bannerWidth+"px"; } /*定義圖片索引:圖片已經有一個寬度的預設偏移*/ var index=1; /*設定預設的偏移*/ imgBox.style.left=-bannerWidth+"px";
2.實現自動輪播
var timerId;
var startTime=function(){
timerId=setInterval(function(){
index++;
imgBox.style.transition="left 0.5s ease-in-out";
/*5.3 設定偏移*/
imgBox.style.left=(-index*bannerWidth)+"px";
/*5.4 判斷是否到最後一張,如果是則回到索引1的位置*/
setTimeout(function(){
if(index==count-1){
index=1;
imgBox.style.transition="none";
/*偏移到指定的位置*/
imgBox.style.left=(-index*bannerWidth)+"px";
indicators[count - 3].classList.remove('active');
indicators[0].classList.add('active');
}
},500);
},1000);
}
startTime();
3.實現點標記
var indicators=banner.querySelector("ul:last-of-type").querySelectorAll("li");
var setIndicator=function(index){
/*先清除其它li元素的active樣式*/
for(var i=0;i<indicators.length;i++){
indicators[i].classList.remove("active");
}
/*為當前li元素新增active樣式*/
indicators[index-1].classList.add("active");
}
4.實現手動輪播
var startX,moveX,distanceX;
/*標記當前過渡效果是否已經執行完畢*/
var isEnd=true;
/*為圖片新增觸控事件--觸控開始*/
imgBox.addEventListener("touchstart",function(e){
clearInterval(timerId);
/*獲取當前手指的起始位置*/
startX= e.targetTouches[0].clientX;
});
/*為圖片新增觸控事件--滑動過程*/
imgBox.addEventListener("touchmove",function(e){
if(isEnd==true){
/*記錄手指在滑動過程中的位置*/
moveX= e.targetTouches[0].clientX;
distanceX=moveX-startX;
/*為了保證效果正常,將之前可能新增的過渡樣式清除*/
imgBox.style.transition="none";
/* 本次的滑動操作應該基於之前輪播圖已經偏移的距離*/
imgBox.style.left=(-index*bannerWidth + distanceX)+"px";
}
});
/*新增觸控結束事件*/
imgBox.addEventListener("touchend",function(e){
/*鬆開手指,標記當前過渡效果正在執行*/
isEnd=false;
/*獲取當前滑動的距離,判斷距離是否超出指定的範圍 100px*/
if(Math.abs(distanceX) > 100){
/*判斷滑動的方向*/
if(distanceX > 0){//上一張
index--;
}
else{ //下一張
index++;
}
/*翻頁*/
imgBox.style.transition="left 0.5s ease-in-out";
imgBox.style.left=-index*bannerWidth+"px";
}
else if(Math.abs(distanceX) > 0){ //得保證使用者確實進行過滑動操作
/*回彈*/
imgBox.style.transition="left 0.5s ease-in-out";
imgBox.style.left=-index*bannerWidth+"px";
}
/*將上一次move所產生的資料重置為0*/
startX=0;
moveX=0;
distanceX=0;
});
/*webkitTransitionEnd:可以監聽當前元素的過渡效果執行完畢,當一個元素的過渡效果執行完畢的時候,會觸發這個事件*/
imgBox.addEventListener("webkitTransitionEnd",function(){
console.log("webkitTransitionEnd");
/*如果到了最後一張(count-1),回到索引1*/
/*如果到了第一張(0),回到索引count-2*/
if(index==count-1){
index=1;
imgBox.style.transition="none";
imgBox.style.left=-index*bannerWidth+"px";
}
else if(index==0){
index=count-2;
imgBox.style.transition="none";
imgBox.style.left=-index*bannerWidth+"px";
}
/*設定標記*/
setIndicator(index);
setTimeout(function(){
isEnd=true;
clearInterval(timerId);
startTime();
},100);
});
相關推薦
原生JS實現移動端輪播圖。
話不多說直接上程式碼。html 結構<div class="jd_banner"> <!--圖片--> <ul class="jd_bannerImg clearfix"> <li>
原生js實現無縫滾動輪播圖(移動端)-自動輪播
想不依賴任何外掛和庫,就用原生js實現移動端自動輪播,發現網上的都不盡如人意,乾脆自己寫一個,程式碼有部分參考,廢話少說,上程式碼。 head部分,沒什麼好說的: <meta charset="utf-8"> <me
原生js實現淘寶輪播圖,支援左右和跳轉(滑鼠點多快都不會亂)。
用transform是因為這個比left的效能好。 這個是演示網址(不要直接存下來哦):https://shalltears.github.io/test-sowing-map/ 。 這個是完整程式碼下載地址,覺得還行的下載支援一下:https://download.csdn.ne
原生js實現網易輪播圖
前端基本功-網頁特效5 一、實現效果圖 二、分析佈局 主盒子裡分上下兩個小盒子(1和2)。 包含圖片的盒子佔兩張圖片的寬(3),處於上盒子中,當前圖片在上盒子(1)中,其它圖片在盒子(3)的右側等待播放。 下邊的盒子(2)
實現移動端輪播圖
1、移動端實現滑動切換輪播圖,主要由touch(touchstart,touchmove,touchend)事件實現。在touch事件中可以通過 e.touches[0].clientX獲取當前觸控點的位置,在touchend事件中沒有e.touches[0].clientX值 var banner=
利用swiper外掛實現移動端輪播圖
準備: swiper.min.css swiper.min.js swiper.min.css: head 標籤內引入 swiper.min.js: 標籤前引入 CSS 部分 /* swiper start*/ .swiper-container {
原生js實現簡單移動端輪播圖
1、程式碼部分 分為四個檔案: slideshow.html slideshow.css base.js slideshow.js 1.1、slideshow.html <!DOCTYPE html> <html lang="en"&g
原生js實現簡單的移動端輪播圖效果
近期接觸了移動端html5和css3,想加入些輪播圖,於是在網上搜集整理了一些資料,經自己補充改進使之較為完善 原生JavaScript 移動端web輪播圖片 實現功能 索引小圓點 過渡滑動動畫的定時輪播 移動端可以滑動切換圖片 滑動距離不夠則吸附回去 效果圖
原生 js 實現移動端 Touch 輪播圖
小編推薦:Fundebug專注於JavaScript、微信小程式、微信小遊戲,Node.js和Java實時BUG監控。真的是一個很好用的bug監控費服務,眾多大佬公司都在使用。 Touch 輪播圖 touch輪播圖其實就是通過手指的滑動,來左右切換輪播圖,下面我們通過一個
移動端輪播圖實現
1:HTML樣式<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-s
移動端輪播圖
gin eight 輪播 body art text start fun con <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">
原生js仿網易輪播圖
win cli font inline move 創建 ica tle 默認 <!-- HTML部分 --> <div id="wrap"> <div class="picBox"> <!-- 圖片區域 -->
原生JS實現移動端模組的左右滑動切換效果,基於vue、stylus
原生JS實現移動端模組的左右滑動動畫效果,基於vue、stylus 大概實現方案: 手指touch螢幕的整個過程,會派發touchstart、touchmove、touchend三個事件,對這三個事件設定相應函式,通過移動過程中位置的變化計算出偏移值,進行對應的設定。 注:
【原生js】詳解輪播圖之無縫滾動
前言:輪播圖,是網站首頁中最常見的一種圖片切換特效,作為前端開發者,我相信很多開發者都直接呼叫了JQuery中的封裝好的方法實現圖片輪播,省事簡單。所以我今天想介紹一下原生js程式碼實現的圖片輪播。
swipe 移動端輪播圖
轉自 https://blog.csdn.net/qq_31648761/article/details/78320898 下載連結:https://codeload.github.com/thebird/Swipe/zip/2.0.0,下載後解壓,直接執行index.html檔案,在
JS實現簡單的輪播圖(非常簡單,一看就懂)
主要思路:先將需要輪播的4張圖使用絕對定位讓其重疊在banner這個盒子中,然後遍歷所有的圖片將其隱藏,再獲取當前圖片的index值,根據當前的index值設定當前的圖片顯示出來。設定間歇定時器setI
原生JavaScript實現豎直輪播圖
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="日常封裝函式.js"
JS實現無縫滾動輪播圖的原理
NPU func etl () initial body position com hidden 用JS實現無縫滾動輪播圖的方法有很多,我自己瞎琢磨了一個, 原理非常簡單,就是點擊按鈕的一瞬間,把 ul 拉到某一個位置, 然後再滑動,這樣就成了無縫滑動 為
原生JS相容移動端的輪播圖
關於輪播圖 : 原生JS 相容IE9+等各大瀏覽器 相容移動端 自適應(根據圖片原比例) 左右箭頭切換 點選索引切換 移動端滑動切換 只需修改圖片路徑 <!DOCTYPE html> <html lang="
JS實現某東移動web輪播圖
移動web輪播圖 參考例項,可以從中儲存輪播圖的圖片,這裡我們放入uploads的資料夾下,將八張圖片一次改為l1.jpg,l2.jpg… https://m.jd.com/ HTML 這裡要放入十張圖片,因為手指滑動的時候要從第一張滑動到最後一張,是無