我只想在页面左下角的点击中显示通知提醒。通知框正确显示,但转换不起作用。我试过这种方式。
#notification-alert {
display: none;
font-family: 'Montserrat-regular';
color: white;
bottom: 20px;
right: 20px;
position: fixed;
background-color: #f4b251;
border-bottom: 4px solid #E89F3C;
color: #fff;
padding: 20px;
border-radius: 14px;
transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
transition-duration: 500ms;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='submit' onclick='$("#notification-alert").show()'>
<div id="notification-alert">
<span>Great job, you're under way!</span>
</div>
&#13;
以下是fiddle代码有什么问题?
答案 0 :(得分:2)
这是工作结果。
var notificationTimer = 2000; // miliseconds to hide the notification alert
$('.submit-button').on('click', function () {
$('.notification-alert').addClass('notification-alert--shown');
setTimeout(function () {
$('.notification-alert').removeClass('notification-alert--shown');
}, notificationTimer)
});
&#13;
.notification-alert {
color: white;
bottom: 20px;
right: 20px;
position: fixed;
background-color: #f4b251;
border-bottom: 4px solid #E89F3C;
color: #fff;
padding: 20px;
border-radius: 14px;
transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
transform: translateX(100%);
transition: all 500ms;
opacity: 0;
z-index: -1;
}
.notification-alert--shown {
opacity: 1;
transform: translateX(0);
transition: all 500ms;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="submit-button">show notification</button>
<div class="notification-alert">
<span>Great job, you're under way!</span>
</div>
&#13;
我改变了一些事情:
notification-alert
更改为了一个类,因为将类用于CSS转换是一种很好的做法,因为这些类表示元素将转换到的不同状态。notification-alert--shown
,它表示显示该元素时的状态。notification-alert--shown
。现在我们需要解释CSS过渡的工作原理:
CSS转换通过向不同的CSS类添加帧来实现(作为一种好的做法)。为了实现转换,您至少需要两个类。在这种情况下,那是notification-alert
和notification-alert--shown
。这些类仅与属性transform
和opacity
不同(即具有冲突的属性)。
由于这两个类之间的属性不同,我可以告诉CSS在它们发生变化时转换(即在两者之间添加帧)。
因此,当我添加课程notification-alert--shown
时,我告诉浏览器添加框架以从状态{opacity: 0; transform: translateX(100%);}
过渡到新状态{opacity: 1; transform: translateX(0);}
< / p>
我告诉浏览器,我想通过将all
添加到transition: all ...
来转换所有不同的属性。
您还在评论中提出了几个问题:
这很有效。但它只显示淡化效果。但为什么这种动画不起作用?transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.275);
这让我觉得你对transition-timing-function
财产有轻微的误解。 transition-timing-function
与元素的精确移动无关 - 它只关注您要求的转换如何随时间推移应用。您可以阅读有关转换计时属性here的更多信息。
你还要求再做一件事:
现在看起来很棒!几秒后我怎么能淡出?
为此,您可以使用window.setTimeout
运行一些代码,在一定时间后删除该类。
我已经更新了示例以进行演示。
答案 1 :(得分:1)
您无法转换显示属性,它是可见与否,无中间步骤。但是,您可以使用动画不透明度轻松实现所需的视觉效果:
function showAlert () {
var $alert = $("#notification-alert").show()
setTimeout(function() {
$alert.addClass("show")
})
}
&#13;
#notification-alert {
display: none;
opacity: 0; /* <---- additional opacity */
color: white;
bottom: 20px;
right: 20px;
position: fixed;
background-color: #f4b251;
border-bottom: 4px solid #E89F3C;
color: #fff;
padding: 20px;
border-radius: 14px;
transition-property: opacity;
transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
transition-duration: 500ms;
}
#notification-alert.show {
opacity: 1;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="submit" onclick="showAlert()">
<div id="notification-alert">
<span>Great job, you're under way!</span>
</div>
&#13;
注意,您需要安排动画阶段在下一个渲染周期中运行,为此您可以设置setTimeout
的延迟。
最后,为什么同时使用display: none
和opacity: 0
?好吧,我们不希望用户点击&#34;隐形&#34;意外警报,如果您只使用opacity
,就会发生这种情况。因此,我们还需要使用display: none
(或其他方式,如负面位置)隐藏警报。
答案 2 :(得分:1)
过渡更像是动画。
mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setMessage("Wait a moment, loading image...");
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
Picasso.with(getActivity()).load(mImagePath).into(mImageView, new Callback() {
@Override
public void onSuccess() {
mProgressDialog.dismiss();
}
@Override
public void onError() {
mProgressDialog.dismiss();
Toast.makeText(getActivity(), "Download failed", Toast.LENGTH_LONG).show();
}
});
所以你需要通过一个动作来调用那个动画。
div.sicon a {
background:-moz-radial-gradient(left, #ffffff 24%, #cba334 88%);
transition: background 0.5s linear;
-moz-transition: background 0.5s linear; /* Firefox 4 */
-webkit-transition: background 0.5s linear; /* Safari and Chrome */
-o-transition: background 0.5s linear; /* Opera */
-ms-transition: background 0.5s linear; /* Explorer 10 */
}
同时检查浏览器支持情况,如果您仍然遇到任何问题,请尝试进行操作!检查样式表中的css-overrides,并查看div.sicon a:hover {
background:-moz-radial-gradient(left, #cba334 24%, #ffffff 88%);
}
css hacks ..
可能有一些事情压倒你的过渡!
答案 3 :(得分:1)
据我所知,CSS转换不会影响display: none
CSS属性。为此,您需要更改代码,如下所示:
#notification-alert {
display: none;
font-family: 'Montserrat-regular';
color: white;
bottom: 20px;
right: 20px;
position: fixed;
background-color: #f4b251;
border-bottom: 4px solid #E89F3C;
color: #fff;
padding: 20px;
border-radius: 14px;
transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
transition-duration: 500ms;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='submit' class="showme">
<div id="notification-alert">
<span>Great job, you're under way!</span>
</div>
<script>
$(".showme").on("click", function(){
$("#notification-alert").fadeIn();
});
</script>
答案 4 :(得分:0)
<script type="text/javascript">
$('#alert').fadeIn("slow");setTimeout(function(){$("#alert").fadeOut(2000);},3000);
</script>
尝试此操作,将 #alert 更改为您的提醒ID。
答案 5 :(得分:0)
像这样更新CSS:
#notification-alert{
color: white;
bottom: 20px;
right: 20px;
position: fixed;
background-color: #f4b251;
border-bottom: 4px solid #E89F3C;
color: #fff;
padding: 20px;
border-radius: 14px;
}
HTML就像这样:
<input type='submit' onclick='$("#notification-alert").fadeIn(1000)'>
<div id="notification-alert" style="display:none;">
<span>Great job, you're under way!</span>
</div>
答案 6 :(得分:0)
你可以通过jQuery实现:
试试这个:
$("#notification-alert").css({"opacity" : "0"}); //put the opacity to 0
$("#submit_btn").click(function(e){ //Create an identifier for the submit button
$("#notification-alert").fadeTo(500, 1);
});
答案 7 :(得分:0)
还有JS,像这样:
var button = document.getElementById('btn');
button.onclick = function() {
var alertBlock = document.getElementById('notification-alert')
alertBlock.classList.add('notification-alert-visible');
};
&#13;
#notification-alert {
color: white;
bottom: 20px;
right: 20px;
position: fixed;
background-color: #f4b251;
border-bottom: 4px solid #E89F3C;
color: #fff;
padding: 20px;
border-radius: 14px;
}
.notification-alert-hidden {
transition: all .5s ease-in-out;
opacity: 0;
}
.notification-alert-visible {
opacity: 1;
}
&#13;
<input type='submit' id='btn'>
<div id="notification-alert" class="notification-alert-hidden">
<span>Great job, you're under way!</span>
</div>
&#13;