js实现:使用鼠标点击箭头控制轮播图的运动

2023-05-16

1.首先来看一下html文件的代码:

<div class="main">
    <div class="main-wrapper">
        <div class="carousel-map" id="banner-group">
            <ul class="carousel-img" id="banner-ul">
                <li><a href="#"><img src="./../../dist/images/news.min.jpg" alt=""></a></li>
                <li><a href="#"><img src="./../../dist/images/news01.min.jpg" alt=""></a></li>
                <li><a href="#"><img src="./../../dist/images/news02.min.jpg" alt=""></a></li>
                <li><a href="#"><img src="./../../dist/images/news03.min.jpg" alt=""></a></li>
            </ul>
            <span class="arrow left-arrow"><</span>
            <span class="arrow right-arrow">></span>
        </div>
        <div class="header-sec">
        </div>
    </div>
</div>
  1. 然后来看一下css文件中的样式:
.main {
  margin-top: $headerHeight + 10px;

  .main-wrapper {
    width: $mainWrapperWidth;
    margin: 0 auto;

    .carousel-map {
      overflow: hidden;
      height: $headerSecHeight;
      width: 100%;
      margin: 0 auto;
      position: relative;

      .carousel-img {
        width: $carouselImgTotalWidth;
        height: $carouselImgHeight;
        margin: 0 auto;
        position: absolute;

        li {
          float: left;
          list-style: none;

          a {
            text-decoration: none;

            img {
              width: $carouselImgWidth;
              height: $carouselImgHeight;
            }
          }
        }
      }

      .arrow{
        font-family: "Helvetica,Helvetica Neue,Arial,sans-serif";
        font-size: 80px;
        color: #ffffff;
      //  将其设置为绝对定位,相对于bannerGroup,就可以显示出箭头
        position: absolute;
        overflow: hidden;
        cursor: pointer;
      //  默认情况下,不显示
        display: none;
      }
      .left-arrow{
        top: 35%;
        margin-left: 35px;
      }
      .right-arrow {
        top: 35%;
        margin-left: 1220px;
      }
    }
  }
}
  1. 接下来就是js文件中实现控制轮播图的运动,
//定义一个对象
function Banner() {
	//定义对象的属性
	this.index = 0;
	this.leftArrow = $(".leftArrow");
	this.rightArrow = $(".rightArrow");
	this.bannerGroup = $("#banner-group");
	this.bannerUl = $("#banner-ul");
	// 统计banner-ul下面的子标签li的个数,
	this.liList = this.bannerUl.children("li");
	this.bannerCount = this.liList.length;
}

// 定义一个函数,轮播图运动起来的函数
Banner.protype.loop = function() {
	var self = this;
	// 咋着里需要设置一个定时器,
	self.timer = setIntervel(function(){
		if(self.index >= self.bannerCount - 1){
		self.index = 0;
		}else {
			self.index++;
		}
		// 假设这里的每个图片的宽度为1300px,这样的话,每次运动起来就是一个1300px的距离
		self.bannerUl.animate({"left": -1300*self.index},500)
	},2000);

// 监听鼠标处于轮播图之上轮播图的动作的执行
Banner.protype.listenBannerHover = function() {
	var self = this;
	self.bannerUl.hover(function() {
		// js中有一个函数为hover,这个函数里面可以有两个函数,第一函数可以定义鼠标移动到轮播图上的时候,轮播图所执行的动作
		// 清除定时器即可,此时将鼠标移动至轮播图之上的时候,就会自动的清除定时器
		clearIntervel(self.timer);
		self.toggleArrow(true);
	},function(){
	//第二个函数可以用来定义鼠标从UN博图上移走的之后,轮播图执行的动作
		//重新调用loop函数,使昆博图运动起来
		self.loop();
		self.toggleArrow(false);
	});
}

// 定义函数监听箭头的显示与否
//此时函数中就需要传递一个参数,根据该参数可以判定箭头是否应该显示
Banner.protype.toggleArrow = function(isShow) {
	// 为了避免每次加载页面都需要重新从文档流中查找左右箭头,这样我们就可以即将箭头设置为对象的属性进行保留
	// 我们需要知道的是,这里的this代表的是当前的函数
	//而self代表的是banner对象,我们如果想要使用banner对象上的属性就可以使用self
	var self = this;
	if(isShow){
		self.leftArrow.show();
		self.rightArrow.show();
	}else{
		self.leftArrow.hide();
		sef.rightArrow.hide();
	}
}

// 定义用箭头控制轮播图的运动与否
Banner.protype.listenArrowClick = function () {
	var self = this;
	// 定义左箭头被点击的函数,左箭头将会执行什么样的操作
	self.leftArrow.click(function() {
		if(self.index === 0){
			self.index = self.bannerCount - 1;
		}else {
			self.index--;
		}
		self.bannerUl.animate({"left": -1300*self.index},500)
	});
	// 定义右箭头被点击的函数,右箭头会执行什么样的函数
	self.rightArrow.click(function() {
		if(self.index === self.bannerCount - 1){
			self.index = 0;
		}else{
			self.index++;
		}
		self.bannerUl.animate({"left": -1300*self.index},500)
	});
}

// 定义一个run函数作为轮播图运动起来的主入口
Banner.protype.run = function() {
	this.loop();
	this.listenBannerHover();
	this.listenArrowClick();
}

// $()函数只有当文档流中所有的元素都加载完毕之后,才会执行。
$(function() {
	// new一个对象
	var banner = new Banner();
	// banner这个对象就拥有了Banner的所有属性和方法,即可以调用run使轮播图运动起来。
	banner.run();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js实现:使用鼠标点击箭头控制轮播图的运动 的相关文章

  • Java多线程里共享变量线程安全问题的原因

    Java多线程里共享变量线程安全问题的原因 Java多线程里对于共享变量的操作往往需要考虑进行一定的同步互斥操作 xff0c 原来是因为Java内存模型导致的共享内存对于线程不可见 Java 内存模型规定 xff0c 将所有的变量都存放在主
  • 重构-改善既有代码的设计读书笔记一

    重构 定义 为何重构 改进软件设计 使软件更容易理解 帮助找到Bug提高编程速度 何时重构 添加功能修改错误复审 总而言之 xff0c 当你觉得代码的可读性 可维护性 可修改性到达一定难以接受的程度 xff0c 就可以开始考虑是否可以使用重
  • Spring文档学习笔记一

    Spring文档学习笔记一 目录 Spring文档学习笔记一 Spring的宗旨 主要特征 几个核心理念 IoC 依赖解析过程 Spring循环依赖的解决方式 更详细的得估计得看Spring源码 1 4 2 Dependencies and
  • python数据结构算法DAY2| 快速排序

    目录 快速排序 xff08 quick sort xff09 1 什么是快速排序 2 快速排序思路 3 快速排序代码 4快速排序复杂度 5 快速排序函数与冒泡排序的效率比较 6 快速排序的缺点 解决办法 xff1a 快速排序 xff08 q
  • Go里w http.ResponseWriter,调用w.Write()方法报错

    Go里w http ResponseWriter写入报错http request method or response status code does not allow 1 下面是报错截图 2 点进去Write方法 它首先是一个接口 x
  • CCF 202012-3 带配额的文件系统 练习

    大模拟 xff0c 没涉及什么算法主要是数据结构的设计 细节的考虑 xff0c 挺锻炼的 xff0c 记录一下 xff0c 代码加了注释 include lt iostream gt include lt string gt include
  • 多接口继承和多层抽象类设计理解

    多接口继承和多层抽象类设计理解 以JDK集合List框架为例有感 以后可能又会有新的理解 xff0c 先记录一下 设计得好的接口一般也要遵循单一职责原则 xff0c 最上层的接口一般属于独立的 xff0c 不再有依赖的 xff0c 如Ite
  • 202012-5 星际旅行 (线段树模板60分)记录一下

    include lt bits stdc 43 43 h gt using namespace std typedef long long ll const int maxn 61 1e5 43 5 const ll MOD 61 1e9
  • 联机象棋(1)

    联机象棋 xff08 1 xff09 需求架构与开发技术主要设计与实现1 棋盘 棋子布局2 选棋 下棋3 人人对战匹配4 判断是否被将5 通信模块6 其他如声音效果等提升用户体验7 人机对战 尚未实现 8 最终实现效果图 需求 登录 注册
  • AbstractQueuedSynchronizer源码阅读(1)(AQS JDK1.8)

    AbstractQueuedSynchronizer 前言AbstractQueuedSynchronizer xff08 1 xff09 JDK 1 8 用途主要源码分析Node内部类ConditionObject类重要方法 主要的属性及
  • ReentrantLock源码阅读(1)(JDK1.8)

    ReentrantLock 前言ReentrantLock JDK 1 8 实现了Lock接口Sync类NonfairSync类FairSync类重要属性和方法 总结 前言 最近在使用Java 并发包时遇到一些问题 xff0c 感觉对于其还
  • SpringBoot整合Kafka控制消费启停遇到的问题记录(@KafkaListener注解使用)

    最近在做一个SpringBoot整合Kafka的一个项目 xff0c 需要控制Kafka客户端消费数据的停止与启动 xff0c 遇到一个问题 xff0c 排查下来感觉对自己有一定帮助 xff0c 趁此记录一下 配置KafkaListener
  • 我的第一次实质性开源贡献——Apache IoTDB

    前言 虽然之前也在Github上尝试提过一些PR 但都是一些doc typo等类型的入门实践 真正算得上有一定实质性工作 xff0c 要数最近在Apache IoTDB上提交的一个功能PR 如果大家对开源感兴趣的话 xff0c 可以看我的一
  • 开源相关知识介绍

    以下是自己网上搜集的一些有关开源的一些背景知识进行分享 xff0c 欢迎对开源感兴趣的同学可以阅读 xff0c 跟我一起走进开源 拥抱开源 目录 一 开源项目的演进 二 开源项目的成功案例 Apache Linux Mozilla Ubun
  • python数据结构算法DAY3| 堆排序

    目录 前言 1 什么是堆排序 xff1f 堆的向下调整性质 2 堆排序思路 3 堆排序代码 python中堆排序的内置模块 4 堆排序时间复杂度 5 堆排序解决topk问题 前言 堆排序是基于完全二叉树 xff0c 堆是一种特殊的完全二叉树
  • Apache IoTDB’s UDF源码分析(1)

    目录 前言 命令行注册UDF函数 Create Function xxx as 34 全限定类名 34 语法分析 生成物理计划 执行物理计划进行函数注册 Select带有UDF函数的查询 前言 继上个月开始了Apache IoTDB的源码贡
  • 新手入门贡献Apache IoTDB

    名词解释 Issue 开源社区的一个任务的统称 xff0c 通常会有一个Issue 列表 xff0c 用于表示各种任务 xff0c 比如功能Issue Bug Issue Improvement Issue等 PR Pull Request
  • Apache IoTDB介绍

    什么是时序数据库 时序数据库 为万物互联插上一双翅膀 有态度的HBase Spark BigData 总体介绍 Apache IoTDB 始于清华大学软件学院 xff0c 是一款时序数据库 主要使用场景是在物联网相关行业 xff0c 如 x
  • 以回溯的思想求解0-1背包问题

    以回溯法的思想求解0 1背包问题 目录 介绍 求解 介绍 0 1背包问题 问题描述 给定n种物品和一背包 物品i的重量是wi xff0c 其价值为pi xff0c 背包的容量为C 问应如何选择装入背包的物品 xff0c 使得装入背包中物品的

随机推荐