移動端原生js,css3實現輪播圖

一、功能需求

1、自動播放
2、滑動切換
3、點擊切換

二、思路分析

html代碼:

<div class="container">
  <ul class="list clearfix">
  <li class="item fl item5">圖5</li>
  <li class="item fl item1">圖1</li>
  <li class="item fl">圖2</li>
  <li class="item fl">圖3</li>
  <li class="item fl">圖4</li>
  <li class="item fl item5">圖5</li>
  <li class="item fl item1">圖1</li>
  </ul>
  <ul class="list-btn clearfix">
  <li class="btn choosed"></li>
  <li class="btn"></li>
  <li class="btn"></li>
  <li class="btn"></li>
  <li class="btn"></li>
  </ul>
</div>

css代碼:

/* 輪播圖樣式 */
.container{
width: 100%;
height: 6rem;
overflow: hidden;
position: relative;
}
.list{
height: 100%;
position: absolute;
width: 100rem;
background-color: pink;
transform: translateX(-10rem);
}
.item{
height: 100%;
width: 10rem;
text-align: center;
line-height: 3rem;
font-size: 2rem;
border: 1px solid #fff;

}
.item1{
background-color: yellowgreen;
}
.item5{
background-color: skyblue;
}

/* 按鈕 */
.list-btn{
position: absolute;
left: 50%;
transform: translateX(-50%);
bottom: 1rem;

}
.btn{
float: left;
width: 0.5rem;
height: 0.5rem;
border-radius: 50%;
margin-right: 10px;
background-color: #fff;
}
.choosed{
background-color: blue;
}

?

總體思路:圖片列表放在ul中,通過設置ul列表的位移來實現圖片的切換

1、定時器實現自動播放

用索引值index來定位ul列表的translateX屬性值,用定時器來控制index的增加。再根據index 的大小以及圖片的寬度來計算ul列表的位移。為了解決首末圖片閃動的問題,在首尾多加一張圖片。詳細請看html代碼部分

2、滑動切換

利用touch事件,記錄滑動距離,再根據滑動距離進行判斷,當超過某個值的時候,實現圖片的切換,低于該值的時候,則圖片停留在原位置

3、點擊按鈕切換

點擊選中按鈕,展示對應圖片。同時給相應的按鈕添加被選中的背景色

?

三、重點來了

js代碼,注釋很清楚,有不明白 的可留言

?

//實現功能:
//1、自動播放
//2、滑動切換
//3、點擊切換
window.onload = function() {
//滑動圖片,列表移動
var list = document.querySelector('.list');

//記錄當前展示圖片的索引值
var index = 1;
//1、自動播放
var timer; //定義定時器
autoSlide();

//2、滑動切換
//定義變量記錄滑動起始坐標,滑動距離,滑動結束坐標
var startX = 0,
moveX = 0,
distacenX = 0,
srem = document.querySelector('html').style.fontSize;
list.addEventListener('touchstart', function(e) {
//滑動的時候清除定時器,清除漸變屬性

clearInterval(timer);
removeTransition(list);

startX = e.touches[0].clientX;
});
list.addEventListener('touchmove', function(e) {
moveX = e.touches[0].clientX;

distanceX = moveX - startX;

distanceX = distanceX / parseInt(srem);

?

//根據滑動距離改變圖片列表的位移
slideX(list, index * 10 - distanceX);
})
list.addEventListener('touchend', function(e) {
if (Math.abs(distanceX) >= 5 && distanceX < 0) {
index++;
}
if (Math.abs(distanceX) >= 5 && distanceX > 0) {

index--;
}

addTransition(list);
slideX(list, index * 10);

//滑動結束,判斷是否到最后一張,或者是第一張
if (index == 6) {
index = 1;
setTimeout(function() {

removeTransition(list);
slideX(list, index * 10);
}, 500)

}

if (index == 0) {
setTimeout(function() {
index = 5;
removeTransition(list);
slideX(list, index * 10);
}, 500)
}

addBgc();
//滑動結束, 添加定時器
autoSlide();
})


//3、點擊切換
var btns = document.querySelectorAll('.btn');
btns.forEach(function(v, i) {
v.addEventListener('click', function(e) {
//給被點擊的按鈕加個背景色

//清除定時器
clearInterval(timer);
removeTransition(list);
index = i + 1;
slideX(list, index * 10);
//給按鈕添加背景色
addBgc();
//恢復定時器
autoSlide();
})
})

?

//工具函數
//實現位移
function slideX(v, x) {

v.style.transform = 'translateX(-' + x + 'rem)';
v.style.webkitTransform = 'translateX(-' + x + 'rem)';
}
//添加漸變屬性
function addTransition(v) {
v.style.transition = "all 0.5s";
v.style.webkitTransition = "all 0.5s";
}
//移除漸變屬性
function removeTransition(v) {

v.style.transition = 'none';
v.style.webkitTransition = 'none';
}

//給按鈕添加背景
function addBgc() {
btns.forEach(function(v, i) {
v.className = 'btn';
if (i + 1 == index) {
v.className = 'btn choosed';
}
})
}

//設置定時器,讓圖片輪播
function autoSlide() {
timer = setInterval(function() {

index++;
addTransition(list);
slideX(list, index * 10);
//給按鈕添加背景色

if (index == 6) {
index = 1;
setTimeout(function() {

removeTransition(list);
slideX(list, index * 10);
}, 500)

}

addBgc();

}, 1000);
console.log(timer)
}

}

?

四、備注

因為用rem進行了適配,所以在js代碼中,有相應的單位轉換,px轉rem

?

------------------------------------------------------------------------

------------------------------------------------------------------------

------------------------------------------------------------------------

工作中這樣的輪播圖很常見,雖然網上插件有很大可以實現這個效果,但是自己動手敲出來感覺會不一樣。希望能對朋友們有幫助。

?

轉載于:https://www.cnblogs.com/justinwxt/p/7077644.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370189.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370189.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于換行這個動作,win 和 mac 的實現

‘\r是回車&#xff0c;前者使光標到行首&#xff0c;&#xff08;carriage return&#xff09;\n是換行&#xff0c;后者使光標下移一格&#xff0c;&#xff08;line feed&#xff09;\r 是回車&#xff0c;return\n 是換行&#xff0c;newline對于換行這個動作&#xff1a;u…

你好駱駝:自動文件傳輸

Apache Camel在其主頁上 &#xff08;以及Camel用戶指南中 &#xff09;將其描述為“基于已知企業集成模式的通用開源集成框架”。 Camel框架基于《 企業集成模式 》一書&#xff0c;并提供了該書中描述的模式的實現 。 我看一下這篇文章中使用Camel的“ Hello World”類型示例…

Linux 常用命令二 pwd cd

一、pwd命令 顯示整個路徑名&#xff1a; wangwang:~$ pwd /home/wang 二、cd命令 切換到其他路徑&#xff08;相對路徑方式&#xff09;&#xff1a; wangwang:~$ cd workpalce/ wangwang:~/workpalce$ pwd /home/wang/workpalce 切換到其他路徑&#xff08;絕對路徑方式&…

3dobject用什么打開_第一次用開塞露是什么感覺?網友:像打開了新世界的大門

第一次用開塞露是什么感覺&#xff1f;網友:像打開了新世界的大門我媽說我小時候便秘去醫院&#xff0c;醫生給開了支開塞露&#xff0c;然后在醫院的公廁里使用的&#xff0c;我媽的描述是:“要不是我手挪走的快點&#xff0c;就直接噴我手了”。。。。。。。。。。。。。。。…

linux root郵箱地址,linux – 如何將root的電子郵件轉發到外部電子郵件地址?

我家里有一臺小型服務器(Ubuntu 10.04),我想將root的電子郵件轉發到我的gmail托管域,以獲取安全通知,什么不是.我把所有東西都撕掉了,然后從頭開始跑到other issues.我現在有sendmail工作,我可以發郵件到someexternal.com并收到郵件.但是,向/root/.forward添加地址實際上并不轉…

RHEL6.4 xclock安裝小記

http://blog.sina.com.cn/s/blog_623630d50101tc67.html轉載于:https://www.cnblogs.com/Baronboy/p/7077911.html

Java 7中對String.substring的更改

眾所周知&#xff0c;在您生成相同源字符串的許多子字符串的情況下&#xff0c;Java會優化子字符串操作。 它通過使用(value, offset, count)存儲信息的方式來做到這一點。 請參閱以下示例&#xff1a; 在上圖中&#xff0c;您會看到字符串“ Hello”和“ World&#xff01;”…

原生js創建模態框

1.效果圖如下&#xff1a; 2.代碼如下&#xff1a; <!DOCTYPE html><html><head><meta charset"UTF-8"><title>Test</title><style>#pageMask {visibility: hidden; position: absolute;left: 0px; top: 0px;width:…

python查詢oracle數據庫_python針對Oracle常見查詢操作實例分析

本文實例講述了python針對Oracle常見查詢操作。分享給大家供大家參考&#xff0c;具體如下&#xff1a;1.子查詢(難)&#xff1a;當進行查詢的時候&#xff0c;發現需要的數據信息不明確&#xff0c;需要先通過另一個查詢得到&#xff0c;此查詢稱為子查詢&#xff1b;執行順序…

按鈕事件處理(3)

在進行gui編程時&#xff0c;我們最常使用的控件時按鈕&#xff0c;在java中JButton類代表了按鈕。它的類層次結構圖是&#xff1a; java.lang.Object|_ java.awt.Component|_java.awt.Container|_javax.swing.JComponent|_javax.swing.AbstractButton|_javax.swing.JButton我們…

linux下I2C驅動發送IO時序,Linux I2C 驅動閱讀的碰到的一些網上沒有提到的東西

# re: Linux I2C 驅動閱讀的碰到的一些網上沒有提到的東西 回復 更多評論2009-04-11 13:39 by 初學都樓主&#xff0c;你好。我看了你那篇《Linux I2C核心、總線與設備驅動[轉]》&#xff0c;讓我明白了不少&#xff0c;不過我還是有些不明白的地方&#xff0c;想請教一下。我…

Java內存模型和優化

總覽 許多多線程代碼開發人員都熟悉這樣的想法&#xff0c;即不同的線程可以對持有的值有不同的看法&#xff0c;這不是唯一的原因&#xff0c;即如果線程不安全&#xff0c;它可能不會看到更改。 JIT本身可以發揮作用。 為什么不同的線程看到不同的值&#xff1f; 當您有多個…

C_數組詳解

數組&#xff1a; 一 一維數組 1.1 一維數組的定義: 類型符 數組名[常量表達式]; int a[10]; 說明: 1.數組的命名規則遵循標識符命名規則。 2.定義時需要指定元素的個數。方括號里的常量表達式表示元素的個數。 3.常量表達式中不能包含變量&#xff1b;如&#xff1a;int a[n];…

CSS節選——選擇器

CSS&#xff0c;cascading style sheet&#xff0c;層疊樣式表&#xff0c;請留意層疊概念。 css3為了區分偽類和偽元素&#xff0c;偽元素采用雙冒號寫法。 常見偽類——:hover,:link,:active,:target,:not(),:focus。 常見偽元素——::first-letter,::first-line,::before…

python游戲循環設置_Pygame:游戲循環前的初始菜單

我正在制作一個this game的版本&#xff0c;并嘗試將起始菜單設置為&#xff1a;我的計劃是先做surface.fill(overlaycolor)&#xff0c;然后將這個圖像blitting到屏幕上。在一個while循環中。之后&#xff0c;在用戶想玩(另一個問題除外)之后&#xff0c;我們將進入另一個whil…

vue.js基礎知識篇(7):表單校驗詳解

目錄 網盤 第12章:表單校驗 1.npm安裝vue-validator $ npm install vue-validator 代碼示例: var Vuerequire("vue"); var VueValidatorrequire("vue-validator"); Vue.use(VueValidator); 2.直接使用script標簽引入vue.js 要下載vue-validator&#xff0c…

修改linux綁定的域名,手工修改linux系統下DA面板綁定的域名

舉例說明手工修改DA面板下虛擬主機ryan綁定的域名&#xff0c;只需要 vi /usr/local/directadmin/data/users/ryan/httpd.conf代碼如下&#xff1a;# Auto generated apache config file by DirectAdmin version 1.46.3# Modifying this file is not recommended as any change…

在JUnit測試中使用Builder模式

這并不是要成為技術含量很高的職位。 這篇文章的目的是為您提供一些指導&#xff0c;以使您的JUnit測試生活更加輕松&#xff0c;使您能夠在幾分鐘內編寫復雜的測試場景&#xff0c;并具有易于閱讀的測試優勢。 單元測試中有兩個主要部分&#xff0c;需要編寫許多引導程序代碼&…

SQL數據庫中臨時表、臨時變量和WITH AS關鍵詞創建“臨時表”的區別

原文鏈接&#xff1a;https://www.cnblogs.com/zhaowei303/articles/4204805.html SQL數據庫中數據處理時&#xff0c;有時候需要建立臨時表&#xff0c;將查詢后的結果集放到臨時表中&#xff0c;然后在針對這個數據進行操作。 創建“臨時表”&#xff08;邏輯上的臨時表&…

python 三維繪圖庫_Python第三方庫matplotlib(2D繪圖庫)入門與進階

Matplotlib一 簡介&#xff1a;Matplotlib是一個Python 2D繪圖庫&#xff0c;它可以在各種平臺上以各種硬拷貝格式和交互式環境生成出具有出版品質的圖形。 Matplotlib可用于Python腳本&#xff0c;Python和IPython shell&#xff0c;Jupyter筆記本&#xff0c;Web應用程序服務…