js代码编写无缝轮播图


Posted in Javascript onSeptember 13, 2020

本文实例为大家分享了js编写无缝轮播图的具体代码,供大家参考,具体内容如下

前言

这个是一个轮播图

提示:

请让最后一个img和第一个img是一张图片相同
且 li数目为img数目-1;

一、无缝轮播图

让第一张和最后一张相同
type:第一张和最后一张相同;
在最后一张向下一张切换时,立刻跳到第一张 然后向第二张正常切换

二、使用步骤

1.html代码

代码如下(示例):

<div class="banner">
 <div class="qh">
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
 </div>
 <div class="left"></div>
 <div class="right"></div>
 <ul class="banner_img clear">
  <li>
  <img src="img/1.png" alt="">
  </li>
  <li>
  <img src="img/2.png" alt="">
  </li>
  <li>
  <img src="img/3.png" alt="">
  </li>
  <li>
  <img src="img/4.png" alt="">
  </li>
  <li>
  <img src="img/5.png" alt="">
  </li>
  <li>
  <img src="img/6.png" alt="">
  </li>
  <li>
  <img src="img/7.png" alt="">
  </li>
  <li>
  <img src="img/1.png" alt="">
  </li>
 </ul>
</div>

css代码

*{
 margin:0;
 padding:0;
}
 .banner {
  position: relative;
  margin: auto;
  margin-top: 20px;
  width: 1140px;
  height: 600px;
  border: 1px solid #000;
  overflow: hidden;
 }

 .banner ul {
  position: relative;
  width: 10000px;
 }

 .banner ul li {
  width: 1140px;
  height: 100%;
  float: left;
 }

 .banner ul img {
  width: 1140px;
  height: 100%;
  object-fit: cover;
 }

 .banner>div {
  position: absolute;
 }

 .banner .qh {
  position: absolute;
  bottom: 0;
  right: 0;
  height: 20px;
  z-index: 1;
 }

 .banner .qh div {
  margin-right: 10px;
  width: 10px;
  height: 10px;
  background: transparent;
  border: 1px solid #f0f;
  border-radius: 5px;
  float: left;
  z-index: 1;
 }
 .left{
  top: 0;
  bottom: 0;
  margin: auto;
  height: 40px;
  width: 20px;
  background: #f0f;
  left: 0;
  z-index: 1;
 }
 .right{
  top: 0;
  bottom: 0;
  margin: auto;
  height: 40px;
  background: #f0f;
  width: 20px;
  right: 0;
  z-index: 1;
 }

2.js代码

代码如下:

startMove是一个运动框架 缓冲运动;当然你也可以用其他的

var odiv = document.querySelector(".banner");
var oul = document.querySelector(".banner_img");
var aimg = oul.querySelectorAll("img");
var oqh = document.querySelector(".qh")
var aqh_div = oqh.querySelectorAll("div");
var alist = aimg[0].offsetWidth;
var i=0;
 init();
 function init(){
  for (var j=0; j<aimg.length-1;j++) {
  aqh_div[j].style.background="transparent";
  }
  if (i<aimg.length-1) {
  aqh_div[i].style.background="#f0f"; 
  }else{
  aqh_div[0].style.background="#f0f"; 
  }
 
 }
 function next() {//下一张
  i++;
  let left =i*(-alist);
  if (left <= -alist * (aimg.length)) {
  oul.style.left = "0px";
  i=1;
  left =-alist*i;
  }
  startMove(oul, { left: left });
  init();
 }
 function back() {//上一张
  i--;
  let left = i*(-alist);
  if(i<0) {
  oul.style.left = (aimg.length-1)* (-alist)+"px";
  i=aimg.length-2;
  left= i*(-alist);
  }
  startMove(oul, { left: left });
  init();
 }
 function move(i) {//跳到第i张 i从0开始
  window.i=i;
  left = i* (-alist);
  startMove(oul, { left: left });
  init();
 }
 for (let i in aqh_div) {
  aqh_div[i].onclick = function () {
  move(i);
  console.log(i);
  }
 }


//下面是一个移入div暂停计时器 移出打开计时器

 odiv.Interval = setInterval(next, 2000);
 odiv.onmouseenter = function () {
  clearInterval(odiv.Interval);
 };
 odiv.onmouseleave = function () {
  clearInterval(odiv.Interval);
  odiv.Interval = setInterval(next, 2000);
 };
//下面是两个左右切换的按钮
 var left_btn=document.querySelector(".left");
 var right_btn=document.querySelector(".right");
 left_btn.onclick=function(){
  back();
 }
 right_btn.onclick=function(){
  next();
 }



//下面是一个运动框架 第一个参数是运动的对象 第二个为json对象{要改变的属性:值}
// 第三个为运动结束后要做到事情 参数是一个函数

 /**
 *
 * @param obj 运动的对象
 * @param json {width:400, height:400}
 * @param fnEnd回调
 */
 function startMove(obj, json, fn) {
  clearInterval(obj.timer);
  obj.timer = setInterval(function () {
  var bStop = true;
  for (attr in json) {
   // 1. 取得当前的值(可以是widht,height,opacity等的值)
   var objAttr = 0;
   if (attr == "opacity") {
   objAttr = Math.round(parseFloat(getStyle(obj, attr)) * 100);
   } else {
   objAttr = parseInt(getStyle(obj, attr));
   }
   // 2.计算运动速度
   var iSpeed = (json[attr] - objAttr) / 50;//缓冲运动
   iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
   // 3. 检测所有运动是否到达目标
   if (objAttr != json[attr]) {
   bStop = false;
   }
   if (attr == "opacity") {
   obj.style.filter = 'alpha(opacity=' + (objAttr + iSpeed) + ')';
   obj.style.opacity = (objAttr + iSpeed) / 100;
   } else {
   obj.style[attr] = objAttr + iSpeed + 'px';// 需要又.属性名的形式改成[]
   }
  }
  if (bStop) { // 表示所有运动都到达目标值
   clearInterval(obj.timer);
   if (fn) {
   fn();
   }
  }
  }, 10);
 }


 /**
  * 获取行间/内联/外部样式,无法设置
  * @param obj
  * @param attr
  */
 function getStyle(obj, attr) {
  if (obj.currentStyle) {
  return obj.currentStyle[attr];
  } else {
  return getComputedStyle(obj, false)[attr];
  }
 }

精彩专题分享:jQuery图片轮播 JavaScript图片轮播 Bootstrap图片轮播

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
创建一个复制UBB软件信息的链接或按钮的js代码
Jan 06 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
Sep 06 Javascript
基于JQuery的Select选择框的华丽变身
Aug 23 Javascript
JS获取select的value和text值的简单实例
Feb 26 Javascript
让JavaScript中setTimeout支持链式操作的方法
Jun 19 Javascript
使用JQuery实现智能表单验证功能
Mar 08 Javascript
jQuery根据name属性进行查找的用法分析
Jun 23 Javascript
js print打印网页指定区域内容的简单实例
Nov 01 Javascript
详解用vue.js和laravel实现微信支付
Jun 23 Javascript
结合Vue控制字符和字节的显示个数的示例
May 17 Javascript
对angularJs中ng-style动态改变样式的实例讲解
Sep 30 Javascript
通过js给网页加上水印背景实例
Jun 17 Javascript
vue-cli脚手架的.babelrc文件用法说明
Sep 11 #Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
Sep 11 #Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
Sep 11 #Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
Sep 11 #Javascript
vue界面发送表情的实现代码
Sep 11 #Javascript
在vue中配置不同的代理同时访问不同的后台操作
Sep 11 #Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
Sep 11 #Javascript
You might like
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
PHP 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
nicejforms——美化表单不用愁
2007/02/20 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
几种响应式文字详解
2017/05/19 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
微信小程序实现的五星评价功能示例
2019/04/25 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
利用layer实现表单完美验证的方法
2019/09/26 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
Python函数式编程指南(四):生成器详解
2015/06/24 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server