每次访问显示预加载器一次

时间:2018-02-20 18:18:37

标签: javascript visitor

我一直试图解决这个问题,我想每次访问只显示一次预加载器。我怎么能这样做?

当前代码:

$(window).on('load', function() {  
        $('#status').fadeOut();  
        $('#preloader').delay(350).fadeOut('slow'); 
        $('body').delay(350).css({'overflow':'visible'});
      })

2 个答案:

答案 0 :(得分:0)

您可以尝试 sessionStorage

if ( ! sessionStorage.getItem( 'doNotShow' ) ) {
        sessionStorage.setItem( 'doNotShow', true );
        $('#preloader').delay(350).fadeOut('slow'); 
    } else {
        $('#preloader').hide();
    }

或者查看此链接How to show website preloader only once

答案 1 :(得分:0)

没有cookie,无论是会话的还是持久的,都不会为该问题提供可靠的解决方案。我能看到的正确执行此操作的唯一方法是记录访问者的IP地址,并检查该记录是否与表中的记录相匹配:

  • 如果没有,请加载预加载器。
  • 如果可以,请不要加载预加载器。

唯一可能的问题是,人们会定期清除他们收集的临时网站数据,因此我将实施一个定时记录系统并将其设置为一个合理的值(例如30天),这样,如果他们在30天内没有访问过您的网站,会假设他们已经清除了缓存并获得了预加载器,这会将条件更改为;

  • 如果访客是新来的,请加载预加载器
  • 如果访问者年纪大但少于30天,请不要加载预加载器
  • 如果访问者年纪超过30天,请删除记录,创建新记录并加载 预载器

下面的代码示例;

#1:检测IP

<?php
function myIp() {
$client  = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote  = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP))
{
$ip = $client;
}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{
$ip = $forward;
}
else
{
$ip = $remote;
}
return $ip;
}
$my_ip = myIp();
global $my_ip;
?>

#2:操作

<?php
// Set preloader status
$play_preloader = "no";

// Check visitor ip records for current ip
$preloader_one = "select ip from preloader where ip='$my_ip'";
$connect_preloader_one = mysqli_query($con, $preloader_one);
$rows_preloader_one = mysqli_num_rows($connect_preloader_one);

// If no record exists, create a new one
if ($rows_preloader_one == 0) {
$preloader_insert = mysqli_prepare($con, "insert into preloader (ip) values (?)");
mysqli_stmt_bind_param($preloader_insert, "s", $my_ip);
mysqli_stmt_execute($preloader_insert);
$play_preloader = "yes";

// If records exist, find records older than 30 days
} else {
$preloader_two = "select ip,date from preloader where ip='$my_ip' and date < DATE_SUB(now(), INTERVAL 30 DAY)";
$connect_preloader_two = mysqli_query($con, $preloader_two);

// If records older than 30 days found
$rows_preloader_two = mysqli_num_rows($connect_preloader_two);
if ($rows_preloader_two > 0) {
// Delete old records
$preloader_delete = "delete from preloader where ip='$my_ip' and date < DATE_SUB(now(), INTERVAL 30 DAY)";
$preloader_delete_query = mysqli_query($con, $preloader_delete);
// Add new record
$preloader_insert = mysqli_prepare($con, "insert into preloader (ip) values (?)");
mysqli_stmt_bind_param($preloader_insert, "s", $my_ip);
mysqli_stmt_execute($preloader_insert);
$play_preloader = "yes";
// If records exist but no records are older than 1 month
} else {
$play_preloader = "no";
}
}

// Preloader
if ($play_preloader == "yes") {
$preloader = "
enter you html/js/css code for the preloader here
";
} else {
$preloader = "";
}
?>

现在将以上所有代码保存在一个php文件中,然后在您的html中引用它,然后调用$ preloader;

<html>
<head>
<?php include_once ('mypreloader.php'); ?>
</head>
<body>
<?php echo $preloader; ?>
</body>
</html>

此代码已在正在运行的服务器上经过测试,并且可以正常工作。