jQuery,禁止在脚本完成前加载页面
jQuery, forbid load page before script is done
在我的网站上,我想添加一些用户友好的脚本。首先,我想在点击加载 gif 后添加一些。当用户点击 link(重定向前)时,用户会看到正在加载 gif(持续时间或更短时间),然后才进行用户重定向。所以,我的 html(使用 ruby 代码注入):
<% for post in Posts do %>
<%= link_to post do %>
<div id="post-<%= post %>">
<div id="loading_gif" style="margin: 75px 0 0 125px; padding: 0 auto; display: block; visibility: hidden; height: 50px; width: 50px; position: absolute">
<%= image_tag '/loading/main-loading.gif' %>
</div>
<%= post.theme %>
<%= post.picture %>
</div>
<% end %>
<% end %>
还有我的脚本:
<script>
$("post-<%= post %>").click(function(){
$('#loading_gif').css('visibility', 'visible');
return true;
});
$.delay(1000);
</script>
使用该脚本时我遇到了一个问题:当我返回原来的页面时,我仍然看到加载动画。
但我真的不明白如何让脚本完成他的工作,然后暂停(向用户显示 post 正在加载(例如 1 秒或更短时间))然后才重定向至 post。
试试这个:
<script>
$("post-<%= post %>").click(function() {
var href = $(this).parent().attr("href");
$('#loading_gif').css('visibility', 'visible');
setTimeout(function() {
$('#loading_gif').css('visibility', 'hidden');
window.location = href;
}, 1000);
return false;
});
</script>
在我的网站上,我想添加一些用户友好的脚本。首先,我想在点击加载 gif 后添加一些。当用户点击 link(重定向前)时,用户会看到正在加载 gif(持续时间或更短时间),然后才进行用户重定向。所以,我的 html(使用 ruby 代码注入):
<% for post in Posts do %>
<%= link_to post do %>
<div id="post-<%= post %>">
<div id="loading_gif" style="margin: 75px 0 0 125px; padding: 0 auto; display: block; visibility: hidden; height: 50px; width: 50px; position: absolute">
<%= image_tag '/loading/main-loading.gif' %>
</div>
<%= post.theme %>
<%= post.picture %>
</div>
<% end %>
<% end %>
还有我的脚本:
<script>
$("post-<%= post %>").click(function(){
$('#loading_gif').css('visibility', 'visible');
return true;
});
$.delay(1000);
</script>
使用该脚本时我遇到了一个问题:当我返回原来的页面时,我仍然看到加载动画。
但我真的不明白如何让脚本完成他的工作,然后暂停(向用户显示 post 正在加载(例如 1 秒或更短时间))然后才重定向至 post。
试试这个:
<script>
$("post-<%= post %>").click(function() {
var href = $(this).parent().attr("href");
$('#loading_gif').css('visibility', 'visible');
setTimeout(function() {
$('#loading_gif').css('visibility', 'hidden');
window.location = href;
}, 1000);
return false;
});
</script>