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 相关文章推荐
jquery $.fn $.fx是什么意思有什么用
Nov 04 Javascript
Node.js实现批量去除BOM文件头
Dec 20 Javascript
jQuery中find()方法用法实例
Jan 07 Javascript
JavaScript实现非常简单实用的下拉菜单效果
Aug 27 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
Nov 17 Javascript
js判断当前页面用什么浏览器打开的方法
Jan 06 Javascript
创建一般js对象的几种方式
Jan 19 Javascript
layer弹窗插件操作方法详解
May 19 Javascript
node.js读取Excel数据(下载图片)的方法示例
Aug 02 Javascript
使用vuex解决刷新页面state数据消失的问题记录
May 08 Javascript
ES6数组与对象的解构赋值详解
Jun 14 Javascript
微信小程序后端无法保持session的原因及解决办法问题
Mar 20 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
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
Python制作简单的网页爬虫
2015/11/22 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
python with (as)语句实例详解
2020/02/04 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
毕业自我鉴定
2013/11/05 职场文书
执行总经理岗位职责
2014/02/03 职场文书
课内比教学心得体会
2014/09/09 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
公司文体活动总结
2015/05/07 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫