手擼移動端輪播圖(內含源碼)

移動輪播圖

移動端輪播圖與PC段輪播圖,在技術選擇上是有區別的,因為移動端的瀏覽器版本非常好,對于H5和CSS3的支持非常完美,所以很多效果可以CSS3的方式實現,比如可以使用 Transorm 屬性替代原來的動畫函數

  1. 可以自動播放圖片
  2. 手指可以拖動播放輪播圖
  3. 添加指示器,但只起到指示作用,點擊不能切換圖片
  4. 不需要左右導航
  5. 因為移動端輪播圖的寬度一般與屏幕一樣寬,所以focus不設置寬度
  6. 移動端使用CSS3的方式進行圖片切換,所以可以給 focus_img 去掉 定位和 left屬性
  7. 因為li標簽設置為float:left 后,就變成了行內塊元素,其寬度由內容決定,而其內容圖片的寬度為520,,所以導致第四章圖片被記下來,解決方案:設置每個li標簽的寬度為ul的20%,再設置圖片的寬度與li標簽一樣狂

案例分析:

  1. 自動播放功能
  2. 開啟定時器
  3. 移動端移動,可以使用translate 移動
  4. 想要圖片優雅的移動,請添加過渡效果
  5. 自動播放功能-無縫滾動
  6. 注意,我們判斷條件是要等到圖片滾動完畢再去判斷,就是過渡完成后判斷
  7. 此時需要添加檢測過渡完成事件 transitionend
  8. 判斷條件:如果索引號等于 3 說明走到最后一張圖片,此時 索引號要復原為 0
  9. 此時圖片,去掉過渡效果,然后移動
  10. 如果索引號小于0, 說明是倒著走, 索引號等于2
  11. 此時圖片,去掉過渡效果,然后移動

關于anime.js

Anime.js (/??n.?.me?/) 是一個輕量的JavaScript 動畫庫, 擁有簡單而強大的API。可對 CSS 屬性、 SVG、 DOM 和JavaScript 對象進行動畫。

下面我們輪播圖的實現就是基于這個js插件(可以訪問官網下載插件)
在這里插入圖片描述

代碼:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>輪播圖</title><style>* {margin: 0;padding: 0;}ul {list-style-type: none;}.focus {position: relative;/*再移動端,如果不設置如下的樣式,則其中的元素可以拖動*/overflow: hidden;}ul.focus_img {width: 600%;margin-left: -100%;/* 以iphone6 為例  375*5 */}.focus_img li {/* border: 1px solid black; */float: left;width: 16.666%;/*375*6*0.2*/}.focus_img img {width: 100%;/*375*6*0.2*/}.focus_sort {position: absolute;right: 20px;bottom: 20px;border-radius: 5px;/* border: 1px solid black; */}.focus_sort li {display: inline-block;width: 20px;height: 10px;background-color: #fff;margin-right: 10px;cursor: pointer;}.focus_sort .current {background-color: red;}</style></head><body><div class="focus"><!--輪播圖片--><ul class="focus_img"><li><img src="./images/focus4.jpg" alt=""></li><li><img src="./images/focus1.webp" alt=""></li><li><img src="./images/focus2.webp" alt=""></li><li><img src="./images/focus3.jpg" alt=""></li><li><img src="./images/focus4.jpg" alt=""></li><li><img src="./images/focus1.webp" alt=""></li></ul><ul class="focus_sort"><li class="current" data-index="0"></li><li data-index="1"></li><li data-index="2"></li><li data-index="3"></li></ul></div><script>var focus_img = document.querySelector('.focus_img')var focus = document.querySelector('.focus')var focusWidth = focus.offsetWidthvar focus_sort = document.querySelector('.focus_sort')// 聲明變量,用來存儲輪播圖的計數器var index = 0// 聲明變量,存儲指示器計數器var sort = 0var timer = setInterval(function () {index++var translatex = -index * focusWidthfocus_img.style.transition = 'all 1s'focus_img.style.transform = 'TranslateX(' + translatex + 'px)'// 指示器切換changeSort()}, 3000)// 切換指示器function changeSort() {// for (var i = 0; i < focus_sort.children.length; i++) {//     focus_sort.children[i].className = ''// }// 將上面的代碼替換成使用classList實現focus_sort.querySelector('.current').classList.remove('current')focus_sort.children[sort].className = 'current'}// 為focus_img 添加過渡結束事件(transitionend),每當過渡效果完成后// 會觸發這個事件// 如果用戶快速拖動元素,在過渡沒有完成的情況下就再次拖動元素,則會// 打破過渡的執行,導致不會觸發這個事件focus_img.addEventListener('transitionend', function () {/*如果index==4,說明當前輪播圖切換完成后,顯示的是最后一張圖片而最后一張圖片與第一張圖片一樣,所以可以做如下操作:快速的將ul拖動到初始位置*/if (index == 4) {index = 0focus_img.style.transition = 'none'focus_img.style.transform = 'TranslateX(0px)'}else if (index < 0) {index = 3var translatex = -index * focusWidthfocus_img.style.transition = 'none'focus_img.style.transform = 'TranslateX(' + translatex + 'px)'}// 將九流閥設置為trueflag = truesort = indexchangeSort()})/* 實現手指拖動實現輪播效果1)手指按下,停止自動輪播,手指離開屏幕繼續開啟自動輪播2)實現輪播圖(focus_img)隨著手指的移動而移動3)手指離開屏幕后,判斷用戶手指的移動距離,根據距離判斷是切換輪播圖還是回彈輪播圖4)如果用戶只是按下手指,并沒有移動,然后手指就離開屏幕,可以不執行第三步。:如何判斷:只要用戶移動手指就會觸發touchmove事件,如果用戶沒有移動手指,不會觸發這個事件*/// 聲明變量,存儲手指的按下時的位置var startx = 0// 聲明變量,存儲手指的移動距離var movex = 0// 聲明一個變量,節流閥,用于指示是否可以切換輪播圖;如果只為true:可以,值為false:不可以var flag = true// 定義變量,標志用戶是否移動了手指isMoove = false // false 表示沒有移動手指focus_img.addEventListener('touchstart', function (e) {// 停止計時器clearInterval(timer)// 獲取手指按下時的位置,賦值給startxstartx = e.targetTouches[0].pageX})focus_img.addEventListener('touchmove', function (e) {// 只要用戶觸發了touchmove事件,就說明用戶的手指在元素上移動了isMoove = trueif (flag) {// 獲取手指的移動距離movex = e.targetTouches[0].pageX - startx// 計算focus_img 的新坐標:原始位置+手指移動距離var translatex = - index * focusWidth + movexfocus_img.style.transition = 'none'this.style.transform = 'TranslateX(' + translatex + 'px)'}})focus_img.addEventListener('touchend', function () {if (!isMoove) {return false}isMoove = falseconsole.log(movex);if (flag) {// 將節流閥設置為falseflag = false// console.log(movex);if (Math.abs(movex) >= 50) {if (movex > 0) {index--} else {index++}var translatex = -index * focusWidthfocus_img.style.transition = 'all 1s'this.style.transform = 'TranslateX(' + translatex + 'px)'} else {// 顯示當前的輪播圖var translatex = -index * focusWidthfocus_img.style.transition = 'all .3s'this.style.transform = 'TranslateX(' + translatex + 'px)'}}// 重新開啟自動輪播圖clearInterval(timer)timer = setInterval(function () {index++var translatex = -index * focusWidthfocus_img.style.transition = 'all 1s'focus_img.style.transform = 'TranslateX(' + translatex + 'px)'}, 3000)})</script>
</body></html>

在這里插入圖片描述

?原創不易,還希望各位大佬支持一下\textcolor{blue}{原創不易,還希望各位大佬支持一下}

👍 點贊,你的認可是我創作的動力!\textcolor{green}{點贊,你的認可是我創作的動力!}

?? 收藏,你的青睞是我努力的方向!\textcolor{green}{收藏,你的青睞是我努力的方向!}

?? 評論,你的意見是我進步的財富!\textcolor{green}{評論,你的意見是我進步的財富!}

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

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

相關文章

原創jquery插件treeTable(轉)

由于工作需要&#xff0c;要直觀的看到某個業務是由那些子業務引起的異常&#xff0c;所以我需要用樹表的方式來展現各個層次的數據。 需求&#xff1a; 1、數據層次分明&#xff1b; 2、數據讀取慢、需要動態加載孩子節點&#xff1b; 3、支持默認展開多少層。 在網上找到了很…

初探Vue3

&#x1f31c;本篇文章目錄\textcolor{green}{本篇文章目錄}本篇文章目錄 &#x1f31b; &#x1f435; 新構建工具Vite\textcolor{blue}{新構建工具Vite}新構建工具Vite &#x1f435; CompositionAPI火爆來襲\textcolor{blue}{Composition API火爆來襲}CompositionAPI火爆來…

linux執行python命令后permission denied

linux下執行python后顯示被拒絕問題定位&#xff1a; 1、檢查下要執行的文件的權限是否存在執行權限&#xff0c;否則執行chmod命令賦予權限&#xff1b; 2、若賦予權限后仍然顯示沒有權限&#xff0c;檢查下執行的python文件是否有權限&#xff0c;否則執行chmod賦予執行權限。…

mysql zip 安裝

第一步下載mysql.zip https://dev.mysql.com/downloads/mysql/5.7.html#downloads 第二步&#xff1a;解壓文件后在其目錄下&#xff0c; 新建 my.ini 注意編碼為ansi&#xff0c;新建 data 空文件夾 my.ini內容為&#xff1a; [mysql]# 設置mysql客戶端默認字符集default…

Vue3的響應式原理解析

Vue3的響應式原理解析 Vue2響應式原理回顧 // 1.對象響應化&#xff1a;遍歷每個key&#xff0c;定義getter、setter // 2.數組響應化&#xff1a;覆蓋數組原型方法&#xff0c;額外增加通知邏輯 const originalProto Array.prototype const arrayProto Object.create(orig…

react Native 環境安裝配置——圖解版一目了然

?原創不易&#xff0c;還希望各位大佬支持一下\textcolor{blue}{原創不易&#xff0c;還希望各位大佬支持一下}原創不易&#xff0c;還希望各位大佬支持一下 &#x1f525; Flutter和reactNative的區別\textcolor{green}{Flutter和react Native的區別}Flutter和reactNative的…

第七章 字典和集合[DDT書本學習 小甲魚]【2】

7.1.2 字典的各種內置方法在序列里為不存在位置賦值&#xff0c;會出現錯誤&#xff1b;而在字典不存在得位置賦值&#xff0c;會創建。工廠函數&#xff08;類型&#xff09;以前學過 str(),int(),list(),tuple()....... 1.fromkeys() 用于創建和返回一個新的字典 不是修改 2…

Installing Node.js and Express on Ubuntu

Installing Node.js and Express on Ubuntu 1. 在nodejs官網上下載Linux Binaries(已經包含了npm):2. 安裝Node.js下載后解壓&#xff0c;并在解壓的文件夾中啟動Terminal后&#xff0c;輸入命令&#xff1a; sudo cp * /usr/local/ -r再輸入命令&#xff1a; node -v …

Chrome插件我只服你——10w人都在使用的瀏覽器插件

?文章摘要導讀\textcolor{blue}{文章摘要導讀}文章摘要導讀 &#x1f525; 為什么選擇Chrome插件\textcolor{green}{為什么選擇Chrome插件}為什么選擇Chrome插件 &#x1f525; 插件具備的強大優勢\textcolor{green}{插件具備的強大優勢}插件具備的強大優勢 &#x1f525; …

H3C通過端口ID決定端口角色

轉載于:https://www.cnblogs.com/fanweisheng/p/11153312.html

特殊屬性

轉載于:https://www.cnblogs.com/mengbin0546/p/10338371.html

一款超強的手機屏幕投影工具

?文章摘要導讀\textcolor{blue}{文章摘要導讀}文章摘要導讀 &#x1f525; 前言\textcolor{green}{前言}前言 &#x1f525; 準備工作\textcolor{green}{準備工作}準備工作 &#x1f525; Scrcpy安裝\textcolor{green}{Scrcpy安裝}Scrcpy安裝 &#x1f525; 工具調試\text…

長度不超過n的連續最大和___優先隊列

題目鏈接: https://nanti.jisuanke.com/t/36116 題目: 在蒜廠年會上有一個抽獎&#xff0c;在一個環形的桌子上&#xff0c;有 nn 個紙團&#xff0c;每個紙團上寫一個數字&#xff0c;表示你可以獲得多少蒜幣。但是這個游戲比較坑&#xff0c;里面竟然有負數&#xff0c;表示你…

JS一維數組轉化為三維數組有這個方法就夠了

今天在CSDN上問答區看到一個提問的小伙伴&#xff0c;是想要將一維數組轉化為三位數組的需求&#xff0c;正好不是很忙&#xff0c;樂于助人的我立馬給這位同學安排上 下面是后端同學返給我們的一維數組數據格式 [{品牌: xiaomi, 機型: 10, 配置: 512},{品牌: xiaomi, 機型: 10…

Hadoop集群安裝

一、完全分布式模式的安裝和配置的具體步驟&#xff1a; 1.配置jdk&#xff1b;2.配置hosts文件&#xff1b;3.建立hadoop運行賬號&#xff1b;4.配置ssh免密碼連入&#xff1b; 5.下載并解壓hadoop安裝包&#xff1b;6.配置namenode&#xff0c;修改site文件&#xff1b;7.配置…

11系列

夢想這東西和經典一樣 永遠不會隨時間而褪色 反而更顯珍貴轉載于:https://www.cnblogs.com/tianjinquan/archive/2010/11/03/1867694.html

webpack相關配置

文章目錄&#x1f4a6; webpack的概念&#x1f4a6; webpack的基本使用項目目錄并初始化創建首頁及js文件以jQuery為例安裝jQuery導入jQuery安裝webpack&#x1f4a6; webpack的相關設置設置webpack的打包入口/出口設置webpack的自動打包配置html-webpack-pluginwebpack中的加載…

Day 21 20190205 老男孩python學習第21天 內容整理

今天寫作業&#xff0c;明天后天要在外旅游 寫作業寫了7個小時。 1 def read_file_as_dict(where):2 staff_dict {}3 f open(%s % where, mode"r", encodingutf-8)4 data f.read()5 f.close()6 row data.strip().split(\n)7 for staff i…

SCOM 簡單界面操作指南 [SCOM中文系列之三]

今天大概介紹下SCOM的管理界面&#xff0c;大概分三個重要的功能版塊 Monitoring 監控版面 Authoring &#xff08;中文版不知道翻譯成什么&#xff0c;主要編輯MP&#xff09; Administration 管理操作 首先說一下管理操作區&#xff0c;開始裝好的SCOM都需要來這里配置一下的…

趁著對象泡腳的功夫,我把vueX吃透了

文章目錄vueX&#x1f31f;Vuex的概述什么是vuexVuex管理數據的優點&#x1f31f;Vuex的基本使用步驟1.安裝 npm i vuex --save2.在src文件目錄下新建store>index.js文件3.口文件里面引入store&#xff0c;然后再全局注入4.使用&#x1f31f;Vuex中的核心特性State在組件中訪…