热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用css3过渡动画-打开和关闭-Transitionanimationwithcss3-OpenandClose

ImmakingamodalusingCSS3andalternatingclasseswithjQuery.我正在使用CSS3制作模态,并使用jQuery交替使用类。Th

I'm making a modal using CSS3 and alternating classes with jQuery.

我正在使用CSS3制作模态,并使用jQuery交替使用类。

The modal open correctly (with css3 effect) but my trouble is when I close the modal. I cannot make the modal close with the css3 effect in reverse way. In other words, I want open the modal with the effect and close the modal with it in reverse way.

模态正确打开(具有css3效果),但我的麻烦是当我关闭模态时。我不能以相反的方式使模态与css3效果接近。换句话说,我想用效果打开模态并以相反的方式关闭模态。

The modal open 0%: -70deg%´ ---- ´100%: 0. I try create an animation called closemodal with reverse effect. 0%: 0 ---- 100%: -70deg but without successful.

模态打开0%: - 70deg%'----'100%:0。我尝试使用反向效果创建一个名为closemodal的动画。 0%:0 ---- 100%: - 70deg但没有成功。

How I can open and close the modal with effect appearing... and effect coming out?

我如何打开和关闭模式效果出现...效果出来?

Pls, looks the snippet:

请看看片段:

$(document).ready(function(){
	$('.modal-open').click(function(){
		$('.overlay').addClass('modal-show');
		$('.modal').addClass('modal-show modal-perspective');
		$('.modal-content').addClass('modal-animate');
	});
	$('.modal-close').click(function(){
		$('.overlay').removeClass('modal-show');
		$('.modal').removeClass('modal-show modal-perspective');
		$('.modal-content').removeClass('modal-animate');
	    $('.modal-content').addClass('modal-remove');

	});
});
html, body{
	margin: 0;
	padding: 0;
	box-sizing: border-box;
	background: #FF3300;
	font-family: 'Ubuntu', sans-serif;
}

.modal{
	position: fixed;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 50%;
	height: auto;
	min-width: 300px;	
	z-index: 2;
	visibility: hidden;	
	display: flex;
	align-items: center;
	justify-content: center;

}

.modal-content{
	padding: 120px 10px;
	text-align: center;
	color: #000;
	background: #bd330f;
	border-radius: 10px;	
	border: 1px solid #909090;	
	box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.9);	
}

.modal-open{
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	border: transparent;
	background: #fff;
	font-size: 15px;
	font-weight: bold;
	padding: 20px 50px;
	border-radius: 5px;
}

.modal-open:active{
	outline: transparent;
}

.modal-close{
	padding: 8px 40px;
    border-radius: 8px;
    border: transparent;
    background: #212121;
    color: #fff;
    outline: transparent;	
}

.overlay {
	position: fixed;
	width: 100%;
	height: 100%;
	visibility: hidden;
	top: 0;
	left: 0;
	z-index: 1;
	opacity: 0;
	background: rgba(0, 0, 0, 0.5);
	transition: all 0.7s;
}

.modal-show {
	opacity: 1;
	visibility: visible;	
}

.modal-perspective{
	    -webkit-perspective: 900px; 
	    perspective: 900px;			
}

.modal-animate{
	animation: openmodal 300ms ease-in forwards;	
}

.modal-remove{
	animation: closemodal 300ms ease-in-out forwards;	
}

@keyframes openmodal{
	0%{
		transform: rotateX(-70deg);
		-webkit-transform: rotateX(-70deg);
		-moz-transform: rotateX(-70deg);
		-ms-transform: rotateX(-70deg);
	}	

	100%{
		transform: rotateX(0deg);
		-webkit-transform: rotateX(0deg);
		-moz-transform: rotateX(0deg);
		-ms-transform: rotateX(0deg);
	}
}

@keyframes closemodal{
	0%{
		transform: rotateX(0deg);
		-webkit-transform: rotateX(0deg);
		-moz-transform: rotateX(0deg);
		-ms-transform: rotateX(0deg);
	}	

	100%{
		transform: rotateX(-70deg);
		-webkit-transform: rotateX(-70deg);
		-moz-transform: rotateX(-70deg);
		-ms-transform: rotateX(-70deg);		
	}
}





In addition, in my jQuery code, there are a better way to toggle the classes? I think that is a better way to toggle them. How I can make it?

另外,在我的jQuery代码中,有一种更好的方法可以切换类吗?我认为这是一种更好的方式来切换它们。我怎么能做到的?

1 个解决方案

#1


2  

You must avoid using CSS3 keyframe animations when you need the reverse effect. What you really should use (and need) is CSS3 transition which is capable of producing the reverse effect whenever the class that adds the forward effect is removed.

当您需要反向效果时,必须避免使用CSS3关键帧动画。你真正应该使用(和需要)的是CSS3过渡,它能够在删除添加前向效果的类时产生相反的效果。

Just set the transform: rotateX(-70deg) to the original state (that is, .modal-content) and then set the transform: rotateX(0deg) on the open state (.modal-animate). This means the element will be invisible originally and gets displayed when open. Finally add the transition property to the element.

只需将transform:rotateX(-70deg)设置为原始状态(即.modal-content),然后在打开状态(.modal-animate)上设置transform:rotateX(0deg)。这意味着元素最初是不可见的,并在打开时显示。最后将transition属性添加到元素中。

(Note: As discussed in comments and in this post it is generally not good to use all in transition but the impact of that in this example is very minimal in my opinion.)

(注意:正如评论和本文中所讨论的那样,在转换过程中使用all并不是一件好事,但在我看来,这个示例中的影响非常小。)

$(document).ready(function() {
  $('.modal-open').click(function() {
    $('.overlay').addClass('modal-show');
    $('.modal').addClass('modal-show modal-perspective');
    $('.modal-content').addClass('modal-animate');
  });
  $('.modal-close').click(function() {
    $('.overlay').removeClass('modal-show');
    $('.modal').removeClass('modal-show modal-perspective');
    $('.modal-content').removeClass('modal-animate');
  });
});
html,
body {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  background: #FF3300;
  font-family: 'Ubuntu', sans-serif;
}
.modal {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 50%;
  height: auto;
  min-width: 300px;
  z-index: 2;
  visibility: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}
.modal-content {
  padding: 120px 10px;
  text-align: center;
  color: #000;
  background: #bd330f;
  border-radius: 10px;
  border: 1px solid #909090;
  box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.9);
  
  transition: all 300ms ease-in;
  
  /* added for original state - vendor prefixed version should come before unprefixed property */
  -webkit-transform: rotateX(-70deg);
  -moz-transform: rotateX(-70deg);
  -ms-transform: rotateX(-70deg);
  transform: rotateX(-70deg);
}
.modal-open {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  border: transparent;
  background: #fff;
  font-size: 15px;
  font-weight: bold;
  padding: 20px 50px;
  border-radius: 5px;
}
.modal-open:active {
  outline: transparent;
}
.modal-close {
  padding: 8px 40px;
  border-radius: 8px;
  border: transparent;
  background: #212121;
  color: #fff;
  outline: transparent;
}
.overlay {
  position: fixed;
  width: 100%;
  height: 100%;
  visibility: hidden;
  top: 0;
  left: 0;
  z-index: 1;
  opacity: 0;
  background: rgba(0, 0, 0, 0.5);
  transition: all 0.7s;
}
.modal-show {
  opacity: 1;
  visibility: visible;
}
.modal-perspective {
  -webkit-perspective: 900px;
  perspective: 900px;
}
.modal-animate {
  transition: all 300ms ease-in-out;
  /* remove animation, set below for open state */
  -webkit-transform: rotateX(0deg);
  -moz-transform: rotateX(0deg);
  -ms-transform: rotateX(0deg);
  transform: rotateX(0deg);
}






推荐阅读
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 使用 `git stash` 可以将当前未提交的修改保存到一个临时存储区,以便在后续恢复工作目录时使用。例如,在处理中间状态时,可以通过 `git stash` 命令将当前的所有未提交更改推送到一个新的储藏中,从而保持工作目录的整洁。此外,本文还将详细介绍如何解决 `git stash pop` 时可能出现的冲突问题,帮助用户高效地管理代码变更。 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在List和Set集合中存储Object类型的数据元素 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 在HTML5应用中,Accordion(手风琴,又称抽屉)效果因其独特的展开和折叠样式而广泛使用。本文探讨了三种不同的Accordion交互效果,通过层次结构优化信息展示和页面布局,提升用户体验。这些效果不仅增强了视觉效果,还提高了内容的可访问性和互动性。 ... [详细]
author-avatar
卓菘碧625
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有