javascript轮播图(缓冲运动)
哈喽,大家好呀!我又来咯!相信大家在翻网页的时候都会看到首页的轮播图!今天讲讲实现原理,感觉有用就收藏吧!
轮播图主要是利用缓冲运动来实现图片的切换,这样看起来比较有画面感哈!
那么什么叫做缓冲运动呢???
实际上就是图片的运动曲线:慢--快-慢
实现目标:添加轮播图实现图片默认进行缓冲运动,点击左右按钮实现图片的切换!
运动原理:运动元素都要绝对定位,根据动态设置left值或者top值进行运动
实现步骤:
1.html部分,一个轮播图视口box,一个li标签容器ul,以及图片容器li标签,以及左右两个按钮,li标签宽高要和图片一样哟!
<div class="box"><ul><li><img src="../images/b1.png" alt=""></li><li><img src="../images/b2.png" alt=""></li><li><img src="../images/b3.png" alt=""></li><li><img src="../images/b4.png" alt=""></li></ul><div class="left"></div><div class="right"></div></div>
2.给以上标签设置css(内容简单,不做过多介绍,直接上代码了哦!)
<style>img {width: 960px;height: 500px;}li {list-style: none;width: 960px;height: 500px;float: left;}ul {height: 500px;position: relative;width: 3840px;padding: 0;}.box {width: 960px;height: 500px;margin: 0 auto;margin: 0;padding: 0;overflow: hidden;position: relative;}.left,.right {width: 50px;height: 50px;position: absolute;background-color: rgba(0, 0, 0, .3);z-index: 2;top: 50%;transform: translateY(-50%);/* display: none; */}.left {left: 0;}.right {right: 0;}</style>
3.获取节点
在script中获取对应的BOM节点,并克隆ul中的第一个li标签,添加到ul的末尾处,这样实现轮播图的无缝运动,并且根据li标签的个数动态设置ul容器的宽度,如果宽度不够的话,li标签浮动不起来!这里注意,一定要先克隆,再设置ul宽度!给每个li标签声明一个自定义属性index,代表的是第几张图片!
var ul = document.querySelector("ul");var lis = document.querySelectorAll("li")var liWidth = document.querySelectorAll("li")[0].offsetWidth;var left = document.querySelector(".left");var right = document.querySelector(".right");var index = 1, timer = null;var box = document.querySelector(".box");var copyLi = lis[0].cloneNode(true);ul.appendChild(copyLi);ul.style.width = (lis.length + 1) * liWidth + "px";
4.封装缓冲运动函数,留作备用!
每句话后面都有详细的注释,方面初学者学习理解!
//obj:运动对象
//target:目标位置
//style:运动对象的样式,比如left,top,width,height等
//callback:回调函数,当运动结束时调用,执行回调函数内部的代码段function move(obj, target, style,callback) { // 对象移动封装clearInterval(obj.timer) //再重复点击时,清除上一次的计时器,这样计时器不会叠加obj.timer = setInterval(function () { //给每一个对象添加一个计时器var cur = parseInt(getComputedStyle(obj)[style]);//获取当前对象的偏移量;var speed = (target - cur) / 8; //定义速度变量if (speed < 1) { //判断当前对象的目标位置如果小于当前对象的偏移量,则速度变成负值speed = Math.ceil(speed); //也就是当前对象向左移动的left值逐渐缩小,否则就是正常向右移动}if (speed >= 0 && cur + speed >= target || speed < 0 && cur + speed < target) { //如果速度变量大于0,并且当前对象的偏移量加上速度变量大于对象的目标位置obj.style[style] = target + "px"; //或者速度变量小于0,并且当前对象的偏移量减去速度变量小于对象的目标位置时clearInterval(obj.timer);if (callback) {callback();} //当前对象的偏移量等于目标位置并且清除计时器} else { //否则就正常执行对象的移动obj.style[style] = cur + speed + "px"; //当前对象的偏移量等于当前对象的偏移量加上速度变量(一直运动)}},30)
}
5.创建一个有名无参函数;
函数内部开启计时器,规定切换图片的间隔时间(时间不要太短),调用缓冲运动函数,并且传入参数,并且在函数内部进行判断,当图片等于最后一张时,秒换回第一张继续进行缓冲运动!
start()function start() {timer = setInterval(function () {if (index == lis.length + 1) {index = 1;ul.style.left = "0px"}move(ul, -liWidth * index, "left");index++;console.log(index);}, 2000)}
6.设置鼠标移入轮播视口时,左右两个按钮显示,移出时进行隐藏,css设置默认隐藏;
建议使用添加类名,这样可以设置透明度以及平移,效果会比这个要好些,因为每天要敲很多代码,所以没有找到,不会的可以关注我私聊告诉你原理!
box.onmouseover = function () {clearInterval(timer);left.style.display = "block"right.style.display = "block"}box.onmouseout = function () {start();left.style.display = "none"right.style.display = "none"};
7.点击左按钮进行左切换,点击右按钮进行右切换
这里就用到上面设置的自定义属性了,是根据li标签的属性值进行的切换,
例如:右按钮点击事件;
判断当图片在最后一张时,秒换回第一张(index属性赋值为第一张,ul的left值为0即可),否则就是正常的切换,左按钮的原理一样
right.onclick = function () {if(index == lis.length+1){index = 1;ul.style.left = "0px"}index++;move(ul, -liWidth * (index - 1), "left")}
left.onclick = function(){if(index == 1){index = lis.length + 1;ul.style.left = lis[0].offsetWidth - ul.offsetWidth + "px";}index--;move(ul,-liWidth*(index - 1),"left")}
8.最后给大家留个小作业
动态根据li标签的个数添加轮播导航条,实现点击对应导航条实现图片的切换
方法提示:
1.利用for循环得到长度个数,创建dl>dd
2.根据index的值以及缓冲运动进行切换
javascript轮播图(缓冲运动)相关推荐
- JavaScript轮播图代码
JavaScript轮播图代码 <html><head><meta charset="utf-8"><title>轮播图</t ...
- JavaScript轮播图(面向对象)
步骤 轮播图1 HTML+CSS 轮播图2 动态生成页面 通过 JavaScript程序 生成 div标签中 所有 轮播图需要的标签 生成 ul ol div 标签节点 根据数组动态生成 原始 ul& ...
- 原生JavaScript轮播图效果实现
原生JavaScript实现轮播图切换效果的实现过程 本文所用代码仅供个人学习.此部分代码系按原腾讯电脑管家首页的轮播图效果,采用原生JS技术予以实现(原网页采用jQurey等技术). 1. 文件准备 ...
- 阶段二 网页搭建入门之javaScript与前端案例 javaScript轮播图
加粗样式## 效果图 图片素材 html <!doctype html> <html lang="en"> <head><meta cha ...
- js原生 JavaScript轮播图【渐变淡入淡出】效果实现(附代码)
目录 前言 轮播图的组成以及实现思想 左右按钮的隐藏与显示 核心思想 代码实现 动态生成底部小圆圈 核心思想 代码实现 右左按钮实现 核心思想 代码实现 实现自动播放 核心思想 代码实现 整体代码(复 ...
- JavaScript 轮播图案例
前言 一名刚刚入坑前端的小白,如有错误还望指出,谢谢您的查阅 提示:以下是本篇文章正文内容,下面案例可供参考 轮播图案例(仅供参考) <!DOCTYPE html> <html la ...
- html 轮播图自适应,JavaScript 自适应轮播图
JavaScript 自适应轮播图 代码 话不多说,先上代码,方便复制粘贴.演示 轮播图 *{ margin: 0; padding: 0; } ul{ list-style: none; } img ...
- HTML+CSS+JavaScript实现轮播图效果
前言 先奉上本文需要的所有资源,免费下载,代码有详细注释,可搭配本文使用: 前端JavaScript实现轮播图效果 百度网盘:百度网盘 请输入提取码 提取码:slbt 没有添加动画效果,添加了自动切换 ...
- 2021-3-2打砖块游戏,轮播图,swiper,自执行函数
文章目录 打砖块 测试碰撞 完全体 轮播图 轮播图缓冲 缓冲测试 swiper 自执行函数 打砖块 <!DOCTYPE html> <html lang="en" ...
最新文章
- ls和find命令查找的一些小技巧
- layer的一种用法,自己画出弹出框样式
- [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉
- simulink中s-function使用
- 一起来造一个RxJava,揭秘RxJava的实现原理
- 基于.NET平台常用的框架整理(转)
- mysql 10进制转2进制_Oracle 10进制转换2进制
- 更新鸿蒙系统运行评价,全球首批!升级使用鸿蒙OS真实反馈评价出炉:差评/好评都很真实...
- Mysql索引优化实例讲解
- java对xml解析_Java中对xml的解析
- 使用Python快速压缩目录中图片
- v-pre让Vue直接显示{{}}不编译
- 树莓派上3g模块的使用
- 干掉卫星、无人机?只用气球就能获取10厘米分辨率遥感影像
- 管外磁水处理器的简单介绍
- 多元线性回归分析(Stata)
- 机器学习笔记(10)——逻辑回归算法优化之随机梯度下降法
- 基于springboot手工diy网站 毕业设计-附源码 310226
- 【精通内核】Linux内核自旋锁实现原理与源码解析
- iphone,ipad,关于icon图标的那些事(必须1024啦~~)