js实现无缝轮播图


Posted in Javascript onMarch 09, 2020

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

CSS样式:

<style type="text/css">
 #box{width: 1000px;height: 375px;border: 3px solid black;
 margin: 30px auto;position: relative;overflow: hidden;}
 #box .img{position: absolute;left: 0;top: 0;}
 #box .img img{width: 1000px;height: 375px;float: left;}
 #box .btn input{border-radius: 50%;border: 0;width: 40px;
 height: 40px;font-size: 25px;z-index: 5;top: 165px;position: absolute;}
 #left{left: 0;}
 #right{right: 0;}
</style>

HTML结构:

<div id="box">
 <div class="img">
 <img src="img/1.jpg" >
 <img src="img/2.jpg" >
 <img src="img/3.jpg" >
 <img src="img/4.jpg" >
 <img src="img/1.jpg" > //利用第一张图,达到无缝轮播的视觉效果
 </div>
 <div class="btn">
 <input type="button" id="left" value="<" />
 <input type="button" id="right" value=">" />
 </div>
</div>

JavaScript:

<script>
 class LunBO{
 constructor() {
  this.img = document.querySelector(".img");
 this.child = this.img.children;
 this.left = document.getElementById("left");
 this.right = document.getElementById("right");
 this.index = 0;
 }
 init(){
 this.img.style.width = this.child.length * this.child[0].offsetWidth + "px"; //有多少图片设置多少宽度
 }
 addEvent(){
 var that = this;
 this.left.onclick = function(){
 that.changeIndex(1); //点击左按钮,设置索引
 }
 this.right.onclick = function(){
 that.changeIndex(2); //点击右按钮,设置索引
 }
 }
 changeIndex(i){
 if(i==1){
 if(this.index == 0){
  this.index = this.child.length - 2;
  this.img.style.left = -(this.child.length-1) * this.child[0].offsetWidth + "px";
 }else{
  this.index--;
 }
 }else{
 if(this.index == this.child.length-1){
  this.index = 1;
  this.img.style.left = 0;
 }else{
  this.index++;
 }
 }
 this.setSplace();
 }
 setSplace(){
 move(this.img,"left",-this.index * this.child[0].offsetWidth); //调用动画
 }
 }
 var lb = new LunBO();
 lb.init();
 lb.addEvent();
</script>

设置动画:

function move(ele,attr,target){
 clearInterval(ele.t);
 ele.t=setInterval(()=>{
 let iNow;
 if(attr=="opacity"){
 iNow=getStyle(ele,attr)*100;
 }else{
 iNow=parseInt(getStyle(ele,attr));
 }
 let speed=(target-iNow)/8;
 speed=speed<0?Math.floor(speed):Math.ceil(speed);
 if(iNow==target){
 clearInterval(ele.t);
 }else{
 if(attr=="opacity"){
 ele.style.opacity=(iNow+speed)/100;
 }else{
 ele.style[attr]=iNow+speed+"px";
 }
 }
 },30)
}
function getStyle(ele,attr){
 if(ele.currentStyle){
 return ele.currentStyle[attr];
 }else{
 return getComputedStyle(ele,false)[attr];
 }
}

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

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

Javascript 相关文章推荐
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
JavaScript通过元素的ID和name设置样式
Jul 08 Javascript
jquery代码实现简单的随机图片瀑布流效果
Apr 20 Javascript
TypeError document.getElementById(...) is null错误原因
May 18 Javascript
省市二级联动小案例讲解
Jul 24 Javascript
浅谈时钟的生成(js手写简洁代码)
Aug 20 Javascript
20170918 前端开发周报之JS前端开发必看
Sep 18 Javascript
Layui表格行工具事件与数据回填方法
Sep 13 Javascript
功能完善的小程序日历组件的实现
Mar 31 Javascript
详解为什么Vue中不要用index作为key(diff算法)
Apr 04 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
Jul 15 Javascript
JavaScript实现切换多张图片
Jan 27 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
Mar 09 #Javascript
原生js实现瀑布流效果
Mar 09 #Javascript
原生JS实现贪吃蛇小游戏
Mar 09 #Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
Mar 09 #Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 #Javascript
Node.js+Vue脚手架环境搭建的方法步骤
Mar 08 #Javascript
JS中的const命令你真懂它吗
Mar 08 #Javascript
You might like
php打开文件fopen函数的使用说明
2013/07/05 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
2016/05/19 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
利用vue-i18n实现多语言切换效果的方法
2019/06/19 Javascript
JS实现百度搜索框关键字推荐
2020/02/17 Javascript
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 数据结构之旋转链表
2017/02/25 Python
Python中optparser库用法实例详解
2018/01/26 Python
python使用多进程的实例详解
2018/09/19 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
英国手工制作的现代与经典的沙发和床:Love Your Home
2020/09/26 全球购物
有多年工作经验的自我评价
2014/03/02 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
基于Redis的List实现特价商品列表功能
2021/08/30 Redis
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
索尼ICF-36收音机评测
2022/04/30 无线电
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server