好的,我有一种情况,我基本上构建了一个小的通知下拉框,当用户做某事时发生,最后它转换为 opacity: 0;状态。
但是,由于用户可能会单击其他会再次触发此通知框的内容,因此我试图想出一种方法将其重置为正常状态,而不会影响任何正在进行的转换,并尝试使动画由 CSS 而不是 JavaScript 完成.
代码笔: http://codepen.io/gutterboy/pen/WoEydg
HTML:
<a href="#">Open Notify Window</a>
<div id="top_notify" class="top-notify">
<div class="container-fluid">
<div class="row">
<div class="content col-xs-12">
<div class="alert" role="alert"></div>
</div>
</div>
</div>
</div>
body {
text-align: center;
padding-top: 150px;
}
.top-notify {
position: fixed;
top: 0;
width: 100%;
z-index: 9999;
.content {
text-align: center;
background-color: transparent;
transform-style: preserve-3d;
}
.alert {
display: inline-block;
transform: translateY(-100%);
min-width: 250px;
max-width: 500px;
border-top-left-radius: 0;
border-top-right-radius: 0;
&.visible {
transform: translateY(0%);
transition: 0.8s 0s, opacity 1s 3.8s;
opacity: 0;
}
}
}
$('a').on('click', function(e){
e.preventDefault();
myFunc();
});
function myFunc() {
// Set file to prepare our data
var loadUrl = "https://crossorigin.me/http://codepen.io/gutterboy/pen/ObjExz.html";
// Run request
getAjaxData(loadUrl, null, 'POST', 'html')
.done(function(response) {
var alert_el = $('#top_notify').find('.alert');
// Update msg in alert box
alert_el.text(response);
alert_el.addClass('alert-success');
// Slide in alert box
alert_el.addClass('visible');
})
.fail(function() {
alert('Problem!!');
});
// End
}
function getAjaxData(loadUrl, dataObject, action, type) {
return jQuery.ajax({
type: action,
url: loadUrl,
data: dataObject,
dataType: type
});
}
$('#top_notify').find('.alert').removeClass().addClass('alert'); // The classes it ends up with vary
animate所以我可以在动画完成后运行重置程序吗?
最佳答案
好吧,我想出了一个令人费解的一哈之后,想出了一个简单的解决方案。
我应该首先想到的简单解决方案是在 ajax 之前删除任何额外添加的类。称呼;我太专注于在 ajax 内做这件事阻止,当然那没有用,但是直到我开始尝试其他解决方案之前,我从未尝试过。
无论如何,简单的解决方案就是简单地移动这段代码:
var alert_el = $('#top_notify').find('.alert');
ajax打电话,而不是在里面。alert_el.removeClass('visible alert-success alert-info alert-danger alert-warning');
function myFunc() {
// Set file to prepare our data
var loadUrl = "https://crossorigin.me/http://codepen.io/gutterboy/pen/ObjExz.html";
var alert_el = $('#top_notify').find('.alert');
alert_el.removeClass('visible alert-success alert-info alert-danger alert-warning');
// Run request
getAjaxData(loadUrl, null, 'POST', 'html')
.done(function(response) {
// Update msg in alert box
alert_el.text(response);
alert_el.addClass('alert-success');
// Slide in alert box
alert_el.addClass('visible');
})
.fail(function() {
alert('Problem!!');
});
// End
}
visible动画完成后的类(因为我知道没有办法在完成时提醒 JS)但是 visible class - 如果您使用此方法,我会更改其名称 - 不会添加任何新样式,它只是运行动画。.visible类和添加一些 @keyframes .&.visible {
animation: slideDown 0.8s 0s, keepThere 3s 0.8s, fadeAway 1s 3.8s;
}
delay设置。slideDown 开始动画片:slideDown 0.8s 0s0s在它开始运行并且动画运行之前 0.8s ,这是动画:@keyframes slideDown {
0% {
transform: translateY(-100%);
}
100% {
transform: translateY(0%);
}
}
transform 向下滑动即可来自 -100%至 0%而这个动画需要 0.8s正如我们在调用此动画时设置的那样。transform: translateY(-100%) 时消失了。因为我们在 .visible 中没有额外的样式类,我们不能在那里放置任何额外的样式,因为我们将无法将它重置回它的原始状态(样式明智)。fadeAway动画不会再开始 3 秒,目前它没有任何东西可以消失(确实如此,但您看不到它,因为它是隐藏的)。fadeAway动画开始。keepThere 3s 0.8sfadeAway 的设置动画是:fadeAway 1s 3.8s这意味着我们有 3 秒 在这个动画开始之前,因此在我们可以用它控制任何样式之前。0.8s所以keepThere动画直到 slideDown 才开始一个已经完成;然后我们设置 3s 的持续时间计算等待时间,直到 fadeAway动画开始,这是keepThere动画片:@keyframes keepThere {
0%, 100% {
transform: translateY(0%);
}
}
0%, 100% 的一个选择器。正如你所看到的,这正如它所说的那样,在 3s 的设置持续时间内保持元素可见。直到我们可以使用 fadeAway 控制样式动画片。fadeAway 中。动画,如果你想以 % 等于 来计算3 秒 因此知道什么时候开始淡出元素。fadeAway动画片:fadeAway 1s 3.8sdelay至 3.8s , 0.8s偏移量以允许 slideDown要运行的动画和额外的 3s延迟,因为这是我们希望元素可见的时间,直到它开始消失,然后当然消失需要 1s去完成。@keyframes fadeAway {
0%, 100% {
transform: translateY(0%);
}
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
keepThere动画已经完成,我们必须确保元素可见,这样淡入淡出有一些可见的东西实际上淡出,这就是为什么我们确保包含样式 transform: translateY(0%);作为从开始到结束的值(value);在那之后,我认为它在做什么就很明显了。.top-notify {
position: fixed;
top: 0;
width: 100%;
z-index: 9999;
.content {
text-align: center;
background-color: transparent;
transform-style: preserve-3d;
}
.alert {
display: inline-block;
transform: translateY(-100%);
min-width: 250px;
max-width: 500px;
border-top-left-radius: 0;
border-top-right-radius: 0;
&.visible {
animation: slideDown 0.8s 0s, keepThere 3s 0.8s, fadeAway 1s 3.8s;
}
}
}
@keyframes slideDown {
0% {
transform: translateY(-100%);
}
100% {
transform: translateY(0%);
}
}
@keyframes keepThere {
0%, 100% {
transform: translateY(0%);
}
}
@keyframes fadeAway {
0%, 100% {
transform: translateY(0%);
}
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.visible 的目的。类在每次运行开始时(在 ajax 调用之前),然后当它在 ajax 调用期间被重新添加时,它会再次运行。关于javascript - 从元素中删除类而不影响正在进行的 css 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40831805/
我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用
我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes
我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决