移动端原生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.mzph.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应用程序服务…