天黑了、让我为你关窗帘吧

news2024/9/28 23:28:11

今天遇到朋友发来的一个需求,需要做一个窗户上下拉窗帘的小小的交互,于是就有了今天的小DEMO,要实现下图一个效果,需要开窗帘,关窗帘,中途还可以暂停,就这样一个小小的效果,我们来分析一下思路开始实现吧。

分析思路

看看上图设计非常简单,一个窗口,一个窗帘,窗户不动,窗帘需要被控制移动,那我知道这个需求的第一时间,我们的脑子里就有了基础布局了,很简单的布局,绘制一个div 将窗帘设为div的背景图,再将窗帘设置为绝对定位,此时布局已经完成。

<div class="window"> <img :src='src' class="curtains" :style="{ top: `${top}px`}"" />
</div> 
.window{width: 400px;height: 400px;background-image: url(https://file.jiangly.com/images/36762512.png);background-size: 400px 400px;position: relative;overflow: hidden;
}

.curtains{position: absolute;width: 300px;height: 410px;top: -410px;left: 55px;
} 

通过简单布局,此时窗帘已经被我们隐藏到窗户上面了,我们只需要对窗帘的top值就行改变,就可以打开关闭窗帘了,所以我们为其绑定一个Top

接下来,就是如何控制他了,我们加上三个按钮,分别是开始,暂停,结束,此时我们分别对其绑定上,三个事件,当我们点击开始的时候,窗帘下降,意味着top值会变大,所以,我们在点击开始的时候,设置一个定时器对top值累加即可:

function open(){this.timer =setInterval( () =>{this.top += 10}, 50)
} 

同理,当我们关闭的时候,就需要对其累减了

function open(){this.timer =setInterval( () =>{this.top -= 10}, 50)
} 

似乎看起来没有问题,但是如果我们点击开启,就会一直往下,所以我们需要一个边界判断,例如我们开启的时候,当top值达到了最大的top值的时候,我们就需要关闭定时器

function open(){this.timer =setInterval( () =>{this.top += 10if(this.top > maxHeight) clearInterval(this.timer) }, 50)
} 

反之,当我们关闭的时候,当top大于-maxHeight的时候,我们同样关闭定时器,同样点击暂停按钮就单纯之间关闭定时器即可,看似没有问题了,现在这种场景已经可以正式运行了。

但是测试会发现,重复点击开始会越来越快,很明显,我们没有对开启事件做限制,重复点击会一直加载新的定时器,所以在点击开启的时候我们还需要对其进行判断,窗帘是否在移动中,如果是第二次点击则不生效。

所以此时我们需要加入一个新的变量,窗帘的状态status,当首次点击开始或者关闭按钮的时候,初次启动定时器就需要赋予其状态为movein,移动中,只有当达到边界或者手动点击暂停的时候,我们在关闭定时器的同时,再改变其状态为完成。

然后在每次点击开启或者关闭的时候判断窗帘是否在移动中,如果是,则阻止此次点击。

好了,一个开关窗户的效果就做好了,这就是一个需求的思路分析和解决步骤,在下面体验一下吧!

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

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

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

相关文章

阿里18年架构师,带你分析经典算法应用思路,探究分布式背后原理

你要知道 长期以来,在996的工作压力下&#xff0c;工程师们更重视实践中的技巧&#xff0c;力求快速解决眼前的问题,而鲜有时间关注问题背后的底层原理。 表面看来&#xff0c;这种做法提高了工作效率&#xff0c;但实际上&#xff0c;这样容易形成“头疼医头&#xff0c;脚疼…

【Python】解决CNN中训练权重参数不匹配size mismatch for fc.weight,size mismatch for fc.bias

目录 1.问题描述 2.问题原因 3.问题解决 3.1思路1——忽视最后一层权重 额外说明&#xff1a;假如载入权重不写strictFalse, 直接是model.load_state_dict(pre_weights, strictFalse)&#xff0c;会报错找不到key&#xff1f; 解决办法是&#xff1a;加上strictFalse&…

Ajax学习:解决跨域_JSONP

JSONP&#xff1a;非官方的跨域解决方案,纯粹依靠程序员的聪明才智&#xff0c;只支持get请求 JSONP是怎么工作的&#xff1a;再页面中有一些标签天生具有跨域能力&#xff0c;就像是link,img,iframe,script JSONP就是利用script标签的跨域能力来发送请求 如下所示&#xff1a…

[附源码]计算机毕业设计毕业生就业管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【Docker】Docker常用命令(包含Dockerfile指令)

目录一.Docker常用命令1.帮助命令2.镜像命令3.容器命令4.其他常用命令5.更多更详细命令二.Dockerfile常用指令1.常用指令2.CMD 和 ENTRYPOINT 的区别一.Docker常用命令 1.帮助命令 # docker version //查看docker版本号 # docker info //查看docker的系统信息…

外贸员的日常工作分享

外贸人米贸搜的日常工作流程为你整理如下。希望能帮到你: 外贸业务员的职责 一、业务人员在向国外买家询价前&#xff0c;要了解客户的基本信息&#xff0c;包括是否是终端客户&#xff0c;年采购量&#xff0c;消费区域&#xff0c;产品的用途&#xff0c;规格&#xff0c;质…

(附源码)SSM座位管理系统 毕业设计 250858

基于SSM的座位管理系统 摘 要 21世纪时信息化的时代&#xff0c;几乎任何一个行业都离不开计算机&#xff0c;将计算机运用于学校的各种信息管理也是十分常见的。过去使用手工的管理方式对高校教室座位进行管理&#xff0c;造成了管理繁琐、难以维护等问题&#xff0c;如今使用…

python的opencv使用总结

作为最容易上手之一的语言&#xff0c;python拥有着大量的第三方库&#xff0c;这些第三方库的存在使得很多人可以专注于业务逻辑、数学逻辑而忽略繁琐的代码操作&#xff0c;python的opencv第三方库就是其中之一。 一、第三方库的安装和简单使用 安装 简单的pip安装就可以了…

【雷达波位编排】基于matlab相控阵雷达的波位编排仿真【含Matlab源码 2251期】

⛄一、相控阵雷达最优波位编排策略仿真算法 1 波位编排的最优化 相控阵雷达的扫描空域一般在修正球坐标系下进行指定,它的坐标原点为雷达站,雷达阵面法线在水平面的投影作为方位角的零度,顺时针为正,逆时针为负,有效取值范围为[-π/2,π/2],以水平面作为俯仰角的零度,向上为正…

分享5款2023年不容错过的宝藏软件

今天带来五款宝藏软件&#xff0c;身为宝藏男孩和宝藏女孩的你们&#xff0c;不试一下吗&#xff1f; 1.EPUB阅读器——Starrea Starrea 是一款Windows平台的EPUB电子书阅读器&#xff0c;它虽然只支持一个平台&#xff0c;但是提供了很多额外的功能&#xff0c;其中包括 文…

MySQL学习笔记(十)crash-safe 和两段提交

crash-safe CrashSafe指MySQL服务器宕机重启后&#xff0c;能够保证&#xff1a; 所有已经提交的事务的数据仍然存在。所有没有提交的事务的数据自动回滚。 如果MySQL宕机了&#xff0c;重启后&#xff0c;就需要检查redolog 日志文件里面&#xff0c;系统会自动定位到上次c…

Jmeter插件duang duang duang 学会模拟各种场景

为什么要使用jmeter线程组插件呢&#xff1f; jmeter自带的线程组插件模拟的压测场景非常有限&#xff0c;当需要模拟复杂压测场景的时候&#xff0c; 推荐大家使用jmeter线程组插件。 如何下载jmeter线程组插件呢&#xff1f; 早期版本的jmeter可以针对我们需要的扩展功能&…

解决远程连接 docker中mysql 失败

在docker安装好mysql之后 端口也设置好&#xff0c;同时云服务器的端口3306也打开。但是使用navicat 连接不上。 其实是因为Navicat只支持旧版本的加密,需要更改mysql的加密规则 进入MySQL容器,登陆MySQL docker exec -it mysql /bin/bash 登陆mysql** mysql -u root -p 输入密…

炫龙T6-E7A2电脑如何U盘重装系统解决系统故障教学

炫龙T6-E7A2电脑如何U盘重装系统解决系统故障教学。对于一些比较严重的系统故障问题来说&#xff0c;普通用户很难去进行问题的解决。比如系统故障导致无法开机&#xff0c;普通用户无法自己解决问题&#xff0c;这个时候可以通过U盘重装系统的方法来解决&#xff0c;这个方法还…

深入URP之Shader篇2: 目录结构和Unlit Shader分析[上]

Unity和URP版本 我使用的Unity版本为2020.3.33f1&#xff0c;对应的URP和SRP Core版本为10.8.1。阅读URP源码建议把package从Library/PackageCache中拷贝到Packages目录&#xff0c;也就是自定义package的方式&#xff0c;然后推荐使用VS code打开工程&#xff0c;这样可以很方…

Golang【Web 入门】 08 集成 Gorilla Mux

阅读目录集成 Gorilla Mux为什么不选择 HttpRouter&#xff1f;安装 gorilla/mux使用 gorilla/mux迁移到 Gorilla Mux1. 新增 homeHandler2. 指定 Methods () 来区分请求方法3. 请求路径参数和正则匹配4. 命名路由与链接生成集成 Gorilla Mux 我们将选用 gorilla/mux 来作为 g…

CSS页面布局(超详解)

目录 1 CSS页面布局概述 1.1 概述 1.2 网页栏目划分 1.3 元素类型转化 1.3.1 块元素 1.3.2 行内元素 1.3.2 块元素和行内元素的转换 1.4 定位 1.4.1 静态定位 1.4.2 相对定位 1.4.3 绝对定位 1.4.4 固定定位 1.4.5 定位元索的层叠次序 1.5 浮动 1.5.1 概述 1.5…

JAVA中如何精确取到时间

文章目录0 写在前面1 使用方法2 举例3 写在最后0 写在前面 做业务的时候&#xff0c;总要统计数据&#xff0c;几月份到几月份的全部数据。这个时候就要找到起始月份的具体时间和终止月份的具体时间。 此时我们用原始的Date类去处理就比较麻烦&#xff0c;可以自己写一个工具类…

Web3中文|什么是以太坊虚拟机(EVM),它是如何工作的?

来源 | cointelegraph 编译 | DaliiNFTnews.com 以太坊已成为仅次于比特币的第二重要区块链。以太坊能发展得这么好&#xff0c;它的原生Solidity编程语言和以太坊虚拟机&#xff08;EVM&#xff09;发挥了重要的作用。 以太坊区块链凭借自身拥有的灵活性、大量可用的开发工…

MySQL高级SQL语句

一.准备 mysql -uroot -p123123create database train_ticket; #创建库use train_ticket; create table REGION(region varchar(10),site varchar(20)); create table FARE(site varchar(20),money int(10),date varchar(15)); #创建表desc REGION; desc FARE; #查看表结构ins…