【问题标题】:Run script once per browser session, but freeze script at end每个浏览器会话运行一次脚本,但最后冻结脚本
【发布时间】:2016-11-10 18:19:56
【问题描述】:

我有一个正在开发的网站here,我对介绍很满意。但是,我需要此脚本在浏览器会话中运行一次,然后在会话的剩余部分中保持其最终状态。这是可能的,还是我应该重新安排一些东西。我对此很陌生,需要一些帮助!我的介绍脚本如下:

var words = ['websites', 'animation', 'branding', 'illustration'];
var i = 0;
var final = "thirdrail";
var splash = setInterval(function() {

  $("#word").hide().html(words[i++]).fadeIn(500);
  if (i == words.length + 1) {
    $("#word").html(final);
    clearInterval(splash);
    var time = setTimeout(function() {
      $(".overlay").addClass("level");
      $("#word").addClass("before");
      $(".logo").addClass("final");
      $("#static").html('<img src="symbol.svg"/>');
      $("nav").css('right', '-20px');
      $(".icon").css('right', '5%');

    }, 2000);
  }

}, 1000);

【问题讨论】:

  • 设置 cookie...
  • 您可能会查看 HTML5 的 SessionStorage,或者如果对您来说过期太快,请查看 LocalStorage。您可以在其中任何一个中设置一个标志,并在页面加载时检查它。如果它有标志,请跳过介绍。

标签: javascript session cookies


【解决方案1】:

完整的例子,如果你需要的话

var final = "thirdrail";

function startSplash() {
	var words = ['websites', 'animation', 'branding', 'illustration'];
	var i = 0;
	var splash = setInterval(function() {

		$("#word").hide().html(words[i++]).fadeIn(500);
		if (i == words.length + 1) {
			$("#word").html(final);
			clearInterval(splash);
			var time = setTimeout(function() {
				endSplash();
				localStorage.setItem("splashed", true);
			}, 2000);
		}
	}, 1000);
}

function endSplash() {
	$("#word").html(final);
	$(".overlay").addClass("level");
	$("#word").addClass("before");
	$(".logo").addClass("final");
	$("#static").html('<img src="symbol.svg"/>');
	$("nav").css('right', '-20px');
	$(".icon").css('right', '5%');
}

if(!sessionStorage.getItem("splashed")){
	startSplash();
} else {
	endSplash();
}

【讨论】:

  • 完美...谢谢
  • 一个简单的问题@br3t - endSplash 函数不包括在startSplash... 中定义的数组,并且无法访问“final”变量。可以在 endSplash 函数中创建另一个“最终”变量吗?
  • 我做了一点小修改,试试看。
【解决方案2】:

您可以使用 cookie 或 localStorage:

if(localStorage.getItem("intro"){
//go to normal page
}else{
localStorage.setItem("intro",true);
//show intro
}

就像山姆在我写这篇文章时所说的那样......

【讨论】:

  • 他们非常棒!这是 Mozilla 的 SessionStorage 页面的link
  • 谢谢大家,我确实看过 SessionStorage,但我无法找出构建介绍的最佳方式。因为,介绍页面动画进入我的网站的标题。所以,我需要将脚本“冻结”在其最终状态(标题),这有意义吗?显然,对于所有内页,我可以只创建一个固定的标题,但不能与主页...
  • 您可以为尚未访问该页面的人保留脚本,但如果他们有 SessionStorage 标志,则触发另一个直接进入结束状态的脚本。例如:if visited, trigger frozen; if not visited, trigger normal script;
  • 好的,但你忽略了禁用 js 或互联网连接非常低的人(我)。因此,我建议您将正常内容硬编码到 html 中,如果您将内容显示为 intro 状态,然后让它淡出...
  • 他所说的叫做渐进增强。这意味着您将编写一个站点,该站点可以为禁用所有功能的用户工作,然后向其中添加可以增强确实具有javascript但不需要使用的用户体验的内容网站。如果我要写一个个人网站,我想说忘记不使用 JavaScript 的约 3.6%,但这取决于你。如果它是面向业务的,您可能需要考虑 36/1000 的不良网站评论可以做什么。
最近更新 更多