23_js面向对象

上次我们讲运动函数,实际开发不会写运动函数。只是讲一下思想。

现在讲一下用原生js去实现轮播图,引入到对象

首先,要明确 面向对象不是语法,是一个思想,是一种编程模式

面向:朝向

面向对象:脸朝着对象 === 关注对象的编程模式

面向过程:脸朝着过程 === 关注过程的编程模式

举例

  • 在面向过程时,我们要关注每一个元素,每一个元素之间的关系,顺序。。。

  • 在面向对象时,我们只需要找到一个对象来帮我做某件事儿,我等待结果。

要去吃面条

  • 面向过程:

    • 用多少面粉

    • 加多少水

    • 和面

    • 切面条

    • 煮开水

    • 。。。

    • 煮面

    • 吃面

  • 面向对象

    • 找一个面馆

    • 要一碗面

    • 等着吃

C 面向过程的

js java ios 面向对象的

01-轮播图

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {padding: 0;margin: 0;list-style: none;}.box {width: 1000px;height: 500px;border: 2px solid red;position: relative;}img {width: 1000px;height: 500px;position: absolute;left: 0;top: 0;}span {position: absolute;width: 50px;height: 100px;background-color: rgba(0, 0, 0, 0.5);color: #fff;text-align: center;line-height: 100px;z-index: 2;font-size: 30px;}.left {left: 0;top: 200px;}.right {right: 0;top: 200px;}b {display: inline-block;width: 15px;height: 15px;border-radius: 50%;background-color: #ccc;}.focus {position: absolute;bottom: 30px;right: 100px;z-index: 2;}.active {background-color: tomato;}</style>
</head><body><div class="box"><ul><li><img style="z-index:1" src="./imgs/1.jpg" alt=""></li><li><img src="./imgs/2.webp" alt=""></li><li><img src="./imgs/3.webp" alt=""></li><li><img src="./imgs/4.webp" alt=""></li></ul><span class="left"> &lt; </span><span class="right">&gt;</span><div class="focus"><b class="active"></b><b></b><b></b><b></b></div></div><script>// 1-点击焦点  有选中的样式   同时还需要切换图片// 2-自动轮播// 3-点击左右箭头// 4-鼠标移入 停止播放   移除 继续播放var focus = document.querySelectorAll("b");var imgs = document.querySelectorAll("img");focus.forEach((list, i) => {list.onclick = function () {// 提前把所有的b身上的classname都去掉// 提前把所有的img身上的zindex归0focus.forEach((item, idx) => {item.className = "";imgs[idx].style.zIndex = 0})focus[i].className = "active";imgs[i].style.zIndex = 1;}});// 自动轮播  每隔一秒钟切换图片和下边的焦点// 自动轮播和点击焦点   做的事儿是一样的!!!!var num = 0;  //充当就是索引let timer = setInterval(() => {num++;if (num > 3) {num = 0;}focus.forEach((item, idx) => {item.className = "";imgs[idx].style.zIndex = 0})focus[num].className = "active";imgs[num].style.zIndex = 1;}, 1000)let box = document.querySelector(".box");// 鼠标移入停止轮播box.onmouseover = function () {clearInterval(timer);}// 鼠标移出 继续轮播  继续开启定时器box.onmouseout = function () {timer = setInterval(() => {num++;if (num > 3) {num = 0;}focus.forEach((item, idx) => {item.className = "";imgs[idx].style.zIndex = 0})focus[num].className = "active";imgs[num].style.zIndex = 1;}, 1000)}// 点击左右箭头// 切换图片,,,和 焦点样式let left = document.querySelector(".left");left.onclick = function () {num--;if(num<0){num = 3}focus.forEach((item, idx) => {item.className = "";imgs[idx].style.zIndex = 0})focus[num].className = "active";imgs[num].style.zIndex = 1;}</script>
</body></html>

02-轮播图封装

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {padding: 0;margin: 0;list-style: none;}.box {width: 1000px;height: 500px;border: 2px solid red;position: relative;}img {width: 1000px;height: 500px;position: absolute;left: 0;top: 0;}span {position: absolute;width: 50px;height: 100px;background-color: rgba(0, 0, 0, 0.5);color: #fff;text-align: center;line-height: 100px;z-index: 2;font-size: 30px;}.left {left: 0;top: 200px;}.right {right: 0;top: 200px;}b {display: inline-block;width: 15px;height: 15px;border-radius: 50%;background-color: #ccc;}.focus {position: absolute;bottom: 30px;right: 100px;z-index: 2;}.active {background-color: tomato;}</style>
</head><body><div class="box"><ul><li><img style="z-index:1" src="./imgs/1.jpg" alt=""></li><li><img src="./imgs/2.webp" alt=""></li><li><img src="./imgs/3.webp" alt=""></li><li><img src="./imgs/4.webp" alt=""></li></ul><span class="left"> &lt; </span><span class="right">&gt;</span><div class="focus"><b class="active"></b><b></b><b></b><b></b></div></div><script>// 1-点击焦点  有选中的样式   同时还需要切换图片// 2-自动轮播// 3-点击左右箭头// 4-鼠标移入 停止播放   移除 继续播放function change(i) {// 提前把所有的b身上的classname都去掉// 提前把所有的img身上的zindex归0focus.forEach((item, idx) => {item.className = "";imgs[idx].style.zIndex = 0})focus[i].className = "active";imgs[i].style.zIndex = 1;}var focus = document.querySelectorAll("b");var imgs = document.querySelectorAll("img");focus.forEach((list, i) => {list.onclick = function () {change(i)}});// 自动轮播  每隔一秒钟切换图片和下边的焦点// 自动轮播和点击焦点   做的事儿是一样的!!!!var num = 0;  //充当就是索引let timer = setInterval(() => {num++;if (num > 3) {num = 0;}change(num);}, 1000)let box = document.querySelector(".box");// 鼠标移入停止轮播box.onmouseover = function () {clearInterval(timer);}// 鼠标移出 继续轮播  继续开启定时器box.onmouseout = function () {timer = setInterval(() => {num++;if (num > 3) {num = 0;}change(num)}, 1000)}// 点击左右箭头// 切换图片,,,和 焦点样式let left = document.querySelector(".left");left.onclick = function () {num--;if (num < 0) {num = 3}change(num);}</script>
</body></html>

03-swiper轮播库(框架)使用

搜索:swiper官网

轮播图:左右点击/图片切换播放

开发有很多js库 现在是挺麻烦的。你想用别人的东西下下载再说,引入

教你怎么看怎么使用

下载方法

怎么套

这些都是轮播图的配置

复制过来右键格式化一下。这些类名什么不要乱改。不需要的你才删掉。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="https://unpkg.com/swiper@8/swiper-bundle.min.css"><!--3.样式也可以复制过来看看--><style>.swiper {width: 600px;height: 300px;
}  </style>
</head><body><!--2.添加html内容也是从库复制过来的--><div class="swiper"><div class="swiper-wrapper"><div class="swiper-slide">Slide 1</div><div class="swiper-slide">Slide 2</div><div class="swiper-slide">Slide 3</div></div><!-- 如果需要分页器 --><div class="swiper-pagination"></div><!-- 如果需要导航按钮 --><div class="swiper-button-prev"></div><div class="swiper-button-next"></div></div>//注意引入库的顺序,你得先引入库,才能使用里面的构造函数。不然就是报错未定义  Swiper库未定义<script src="https://unpkg.com/swiper@8/swiper-bundle.min.js"> </script>//4.初始化Swiper也是复制过来的放到标签下边<script>var mySwiper = new Swiper('.swiper', {  //第一步:通过new创建一个Swiper对象//第二步:一个个参数配置// direction: 'vertical', // 垂直切换选项loop: true, // 循环模式选项// autoplay:true,autoplay:{delay:1000},// 如果需要分页器pagination: {el: '.swiper-pagination',},// 如果需要前进后退按钮navigation: {nextEl: '.swiper-button-next',prevEl: '.swiper-button-prev',},})        </script></body></html>

04-面向对象

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>// 构造函数和对象 ==》 使用构造函数创建一个对象!!// 1- 构造函数  就是一个普通的函数 这个函数描述了对象的特点(对象的模板)// 2- 字面量创建对象// 3- 自定义构造函数// 内置的构造函数let obj = new Object();obj.name = "李福";obj.age = 18;obj.eat = function(){console.log("我喜欢吃鱼!!");}// console.log(obj);// 字面量创建let obj1 = {};obj1.name = "李白";obj1.age = 19;obj1.sing=function(){console.log("我喜欢唱歌!!!");}// console.log(obj1);let obj2 = {name:"杨浩",age:20,dance:function(){return "我喜欢跳舞!!!"}}// console.log(obj2.name,obj2.age,obj2.dance());// 3- 自定义构造函数 -- 可以批量的定制对象的属性和方法 (是一个模板)//   构造函数内部定义了  对象需要的属性和方法!!!//   使用构造函数创建的一个个对象  他们都具有构造函数里边定义好的属性和方法!// 构造函数的特点:// 1- 首字母大写的函数是构造函数// 2- 每次用这个构造函数时,需要加new 关键字  可以创建一个新的对象!!// 构造函数内 都是属性和方法function Person(name,age){// 每new一次时,都会创建一个新的对象,-存入到this变量上 // let this = {}// 构造函数内的this是指加  new 调用时候所创建的对象//console.log(this);this.name = name;this.age = age;this.eat = function(){return "我喜欢吃面条"}// XXXX}let p1 = new Person("李福",18);let p2 = new Person("李白",19);let p3 = new Person("杨浩",20);console.log(p1.eat());console.log(p2);console.log(p3);</script>
</body>
</html>

05-轮播图-面向对象版

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {padding: 0;margin: 0;list-style: none;}.box {width: 1000px;height: 500px;border: 2px solid red;position: relative;}img {width: 1000px;height: 500px;position: absolute;left: 0;top: 0;}span {position: absolute;width: 50px;height: 100px;background-color: rgba(0, 0, 0, 0.5);color: #fff;text-align: center;line-height: 100px;z-index: 2;font-size: 30px;}.left {left: 0;top: 200px;}.right {right: 0;top: 200px;}b {display: inline-block;width: 15px;height: 15px;border-radius: 50%;background-color: #ccc;}.focus {position: absolute;bottom: 30px;right: 100px;z-index: 2;}.active {background-color: tomato;}</style>
</head><body><div class="box"><ul><li><img style="z-index:1" src="./imgs/1.jpg" alt=""></li><li><img src="./imgs/2.webp" alt=""></li><li><img src="./imgs/3.webp" alt=""></li><li><img src="./imgs/4.webp" alt=""></li></ul><span class="left"> &lt; </span><span class="right">&gt;</span><div class="focus"><b class="active"></b><b></b><b></b><b></b></div></div><script>// 1-点击焦点  有选中的样式   同时还需要切换图片// 2-自动轮播// 3-点击左右箭头// 4-鼠标移入 停止播放   移除 继续播放// 一个功能就是一个构造函数!!!!// 1-点击焦点  有选中的样式   同时还需要切换图片// 构造函数里都是 属性 和方法!!!function MyMiSwiper() {// let this = {}this.focus = document.querySelectorAll("b");this.imgs = document.querySelectorAll("img");this.miEvent =  ()=> {this.focus.forEach((list, i) => {list.onclick =  ()=> {// 提前把所有的b身上的classname都去掉// 提前把所有的img身上的zindex归0this.focus.forEach((item, idx) => {item.className = "";this.imgs[idx].style.zIndex = 0})this.focus[i].className = "active";this.imgs[i].style.zIndex = 1;}});}this.miEvent();}let m1 = new MyMiSwiper()console.log(m1);// 自动轮播  每隔一秒钟切换图片和下边的焦点// 自动轮播和点击焦点   做的事儿是一样的!!!!// var num = 0;  //充当就是索引// let timer = setInterval(() => {//     num++;//     if (num > 3) {//         num = 0;//     }//     focus.forEach((item, idx) => {//         item.className = "";//         imgs[idx].style.zIndex = 0//     })//     focus[num].className = "active";//     imgs[num].style.zIndex = 1;// }, 1000)// let box = document.querySelector(".box");// // 鼠标移入停止轮播// box.onmouseover = function () {//     clearInterval(timer);// }// // 鼠标移出 继续轮播  继续开启定时器// box.onmouseout = function () {//     timer = setInterval(() => {//         num++;//         if (num > 3) {//             num = 0;//         }//         focus.forEach((item, idx) => {//             item.className = "";//             imgs[idx].style.zIndex = 0//         })//         focus[num].className = "active";//         imgs[num].style.zIndex = 1;//     }, 1000)// }// // 点击左右箭头// // 切换图片,,,和 焦点样式// let left = document.querySelector(".left");// left.onclick = function () {//     num--;//     if (num < 0) {//         num = 3//     }//     focus.forEach((item, idx) => {//         item.className = "";//         imgs[idx].style.zIndex = 0//     })//     focus[num].className = "active";//     imgs[num].style.zIndex = 1;// }</script>
</body></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

torch不能使用cuda的解决方案

遇到了这样的报错&#xff0c;说明 torch不能使用cuda 反思 我频繁地尝试安装不同的 nvdia 驱动&#xff0c;浪费了很多时间。因为我的错误地认为nvidia会自带cuda&#xff0c;其实cuda需要单独安装。 还有我的torch是cpu版本的&#xff0c;即使nvidia cuda安装了&#xff0…

kettle从入门到精通 第九十三课 ETL之kettle kettle 调用web service接口5种方法,一文彻底搞懂

场景&#xff1a;群里有小伙伴向我求助如何调用web service接口&#xff0c;趁着周末时间&#xff0c;给兄弟们搞demo。 1、本次使用的web service服务接口地址是http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?opgetSupportCityDataset&#xff0c; 此接口根据用户输入…

蓝桥杯 14 天 十五届蓝桥杯 数字诗意

static boolean kkk(long x) {if(x1)return true;else {// 初始化xx为1&#xff0c;用于计算2的幂long xx 1;// 循环60次&#xff0c;检查2的幂是否等于xfor (int i 1; i < 60; i) {xx * 2; // 每次将xx乘以2if (xx x) { // 如果xx等于x&#xff0c;说明x是2的幂&#xf…

异常与捕获

1.C 异常概念 异常是一种处理错误的方式&#xff0c;当一个函数发现自己无法处理的错误时就可以抛出异常&#xff0c;让函数的直接或间接的调用者处理这个错误。 throw&#xff1a;当问题出现时&#xff0c;程序会抛出一个异常。这是通过使用 throw 关键字来完成的。catch&am…

2025年最新自动化/控制保研夏令营预推免面试真题分享(东南大学苏州校区/华东理工/南航/天大)

笔者来2021级本科自动化专业&#xff0c;以下部分将介绍我在夏令营以及预推免期间发生经历和问题 东南大学苏州校区蒙纳士大学联培 东南大学苏州校区的项目算是一个比较小众的项目&#xff0c;是第一年在苏州校区&#xff0c;二三年到南京校区找导师&#xff08;不提供住宿自…

【SQL】MySQL基础2——视图,存储过程,游标,约束,触发器

文章目录 1. 视图2. 存储过程2.1 创建存储过程2.2 执行存储过程 3. 游标4. 约束4.1 主键约束4.2 外键约束4.3 唯一约束4.4 检查约束 5. 触发器 1. 视图 视图是虚拟的表&#xff0c;它是动态检索的部分。使用视图的原因&#xff1a;避免重复的SQL语句&#xff1b;使用表的部分而…

OGG故障指南:OGG-01163 Bad column length (xxx) specified for column

报错 OGG-01163 Bad column length (xxx) specified for column AAA in table OWNER.TABLE, maximum allowable length is yyy原因 源端修改了字段长度。 虽然源端和目标端的长度已经通过DDL语句修改到一致&#xff0c;在extract进程未重启的情况下&#xff0c;生成的trail文…

Linux进程状态补充(10)

文章目录 前言一、阻塞二、挂起三、运行R四、休眠D五、四个重要概念总结 前言 上篇内容大家看的云里雾里&#xff0c;这实在是正常不过&#xff0c;因为例如 写实拷贝 等一些概念的深层原理我还没有讲解&#xff0c;大家不用紧张&#xff0c;我们继续往下学习就行&#xff01;&…

信息学奥赛一本通 1609:【例 4】Cats Transport | 洛谷 CF311B Cats Transport

【题目链接】 ybt 1609&#xff1a;【例 4】Cats Transport 洛谷 CF311B Cats Transport 【题目考点】 1. 动态规划&#xff1a;斜率优化动规 【解题思路】 解法1&#xff1a;设a点的前缀和 输入的 d d d序列是从 d 2 d_2 d2​到 d n d_n dn​&#xff0c;共n-1个数字。人…

bluecode-20240913_1_数据解码

时间限制&#xff1a;C/C 1000MS&#xff0c;其他语言 2000MS 内存限制&#xff1a;C/C 256MB&#xff0c;其他语言 512MB 难度&#xff1a;困难 数据解码 指定有一段经过编码的二进制数据&#xff0c;数据由0个或多个"编码单元"组成。"编码单元"的编码方式…

接口自动化进阶 —— Pytest全局配置pytest.ini文件详解!

pytest.ini 是 Pytest 的全局配置文件&#xff0c;用于自定义测试运行的行为和规则。通过配置 pytest.ini&#xff0c;可以避免在命令行中重复输入参数&#xff0c;提升测试的效率和一致性。 1. 配置文件的位置和格式 位置&#xff1a;pytest.ini 文件通常放在项目的根目录下。…

ModuleNotFoundError: No module named ‘demjson‘

错误 ModuleNotFoundError: No module named demjson 表明 Python 无法在其环境中找到名为 demjson 的模块。demjson 是一个第三方库&#xff0c;用于在 Python 中编码和解码 JSON 数据。如果你尝试导入它但遇到了这个错误&#xff0c;那很可能是因为你的 Python 环境中没有安装…

1、C51单片机(STC8G2K64S4)串口实验

一、串口1接线图 1、下面是单片机外接电路图&#xff0c;P30,P31分别用于RXD和TXD功能引脚 2、我们来查看单片机手册 串口1需要设置的寄存器 串口1的功能脚配置选择位&#xff0c;看电路图选择的是P3.0,P3.1。 3、串口1&#xff1a;SCON控制寄存器 设置为0x50:0101 0000。&a…

3PL EDI:SA Piper Logistics EDI需求分析

SA Piper Logistics成立于2005年&#xff0c;是一家专注于全球供应链管理的第三方物流服务商&#xff08;3PL&#xff09;&#xff0c;总部位于美国芝加哥。公司以“优化物流效率&#xff0c;重塑供应链价值”为使命&#xff0c;提供仓储管理、运输规划、订单履行及跨境清关等一…

vscode正则表达式使用

小标题 ^\d.\d.\d\s.*$ ^表示匹配字符串的开头。\d\.\d\.\d表示匹配一到多个数字&#xff0c;接着一个小数点&#xff0c;再接着一到多个数字&#xff0c;然后又一个小数点和一到多个数字&#xff0c;用来匹配类似 “2.1.1” 这样的标题号部分。\s表示匹配一个空格。.*表示匹配…

力扣.旋转矩阵Ⅱ

59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; class Solution {const int MAX25; public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> ans;vector<int> hang;int len_nn;int arry[25][25]…

软件工程面试题(十)

1、OSI七层模型tcp四层模型是什么样的 OSI七层参考模型 :物理层 、数据链路层 、网络层 、传输层、应用层、会话层、表示层 TCP/IP:第一层网络接口层第二层 第二层??网间层 第三层??传输层 第四层??应用层 2、JAVA测试模式(ZZ): 模式(一) Main 模式 模式(二)…

淘宝双十一大促监控系统开发:实时追踪爆品数据与流量波动

以下是开发一个淘宝双十一大促监控系统&#xff0c;以实时追踪爆品数据与流量波动的详细步骤及示例代码&#xff1a; 实现思路 数据获取&#xff1a;利用淘宝 API 或者爬虫技术&#xff0c;获取商品的销售数据、浏览量等信息。数据存储&#xff1a;将获取到的数据存储到数据库…

高并发金融系统,“可观测-可追溯-可回滚“的闭环审计体系

一句话总结 在高并发金融系统中&#xff0c;审计方案设计需平衡"观测粒度"与"系统损耗"&#xff0c;通过双AOP实现非侵入式采集&#xff0c;三表机制保障操作原子性&#xff0c;最终形成"可观测-可追溯-可回滚"的闭环体系。 业务痛点与需求 在…

Docker 的实质作用是什么

Docker 的实质作用是什么 目录 Docker 的实质作用是什么**1. Docker 的实质作用****2. 为什么使用 Docker?****(1)解决环境一致性问题****(2)提升资源利用率****(3)简化部署与扩展****(4)加速开发与协作****3. 举例说明****总结**Docker 的实质是容器化平台,核心作用…