【问题标题】:Preloader with sprite animation带有精灵动画的预加载器
【发布时间】:2014-06-07 11:16:36
【问题描述】:

我对 JS 还很陌生。参加了一些 lynda 课程,但我无法全神贯注地创建一个 sprite 预加载器(动画)。谷歌了很多,通过stackoverflow搜索,接近我想要的,但没有得到它。至此,我创建了这个徽标(已经将其设置为精灵),因此我希望精灵根据加载文件的百分比进行动画处理。

例如。在 0%-15% 时,我将拥有第一个,第二个在 15% 和 30% 之间,依此类推,直到最后一个,我将 div 设置为可见性:隐藏,如下所示:

HTML

<div id="preloader">

CSS

#preloader {
margin: 0-auto;
width: 450px;
height: 400px;
background-color: #282727;
background-image: url(http://roprojects.net/preloader/sprite.PNG)
}

JS 不确定,如果下面的文字看起来很愚蠢,请见谅。

// var percent = Something that would get the numeric progress of the page load;
$( window ).load(function() {
// example of first animation. And I don't even know how I should be going on from here.
// Maybe a for statement, some sort of a loop, was even thinking conditionals. 
// Maybe a case/switch
// if (percent > 15 && percent <= 30) {below } 
  $('#preloader').css('backgroundPosition', '0 -400px');
});
// But ultimately that would require it to ..update itself (loop, I guess?)

这是我的第一篇文章,感谢您的时间和耐心。也欢迎任何外部参考,不要指望你为我写。再次感谢您很多

编辑精灵本身。 http://roprojects.net/preloader/sprite.PNG

edit #2 我意识到我还应该给出预加载器的最终结果示例,所以这里是:http://www.fk-agency.com/。所以我通过查看js意识到

 if(navigator.appName == "Microsoft Internet Explorer")
 {
  var pos = navigator.appVersion.indexOf("MSIE");
  var ver = navigator.appVersion.substr(pos,8);
  if((ver == "MSIE 6.0") || (ver == "MSIE 7.0")) { var oldie = true}
}     
    if(oldie != true){
    $(window).load(function() { 
        setTimeout(function(){
        $("#loading").fadeOut(function() { 
            $("#container").fadeIn(1500) 
        })
        },300);
    })
    }

所以我从中得到的是,我们进行了一次浏览器检查,如果一切正常,一旦页面加载,预加载器 div 就会淡出并进入主页面。但仍然对精灵是如何获取的一无所知填充。 (我假设它只是两个图像,另一个从左到右完成。)仍然必须弄清楚如何将 css 属性更改绑定到数字页面加载过程本身。 ...任务仍在继续。

【问题讨论】:

  • 好吧,终于到家了,现在我有时间思考答案了。您从其他网站发布的 browsercheck 不应该作为示例,您几乎总是希望检查您想要使用的功能,而不是浏览器,首先您要让它在您喜欢的几个浏览器上工作并且可以在一段时间内检查和调试并忽略所有其他人。
  • 欢迎回家!我一直在寻找和寻找,并把我的眼睛溢出来。我仍在尝试同时查看 jquery 事件触发器,也许我会得到一些结果。
  • 但是从@user3549636 之前发布的内容来看,我至少对如何设置“所说”触发器有所了解。帧不是要走的路,因为速度稳定(而且很难随机编号),我需要它与元素相应地加载。我在想这样:如果我可以将要加载的对象设置为数组,并且如果我有一个循环不断检查它们是否已加载,我可以根据加载的元素总数分配某个精灵.说要加载 150 个元素,如果 elLoaded >elToLoad/4 => 将 div 的属性更改为 -400px(精灵 2)。

标签: javascript jquery ajax html css


【解决方案1】:

i++ 替换为您的百分比代码。
JS:

var i = 1;
setInterval(function () {
    if (i < 318) {
        i++;
    } else {
        document.getElementById("transparentImg").style.display = "none";
        document.getElementById("percentage").style.display = "none";
        document.getElementById("background").style.display = "none";
    }
    document.getElementById("percentage").style.width = i + "px";
}, 100);

HTML:

<div id="background"><div/>
<div id="percentage"><div/>
<img id="transparentImg" src="http://vividvid.tk/images/imageedit_4_9586029984.gif"/>

CSS:

body{
  background-color: black;
}
#percentage{
background-color: rgb(255,255,255);
  width:320px;
  height:80px;
  margin-left:-150px;
  left:47%;
  margin-top:-40px;
  top:50%;
  position:absolute;
  z-index:1;
}
#background{
  background-color: rgb(100,100,100);
  width:320px;
  height:80px;
  margin-left:-150px;
  left:50%;
  margin-top:-40px;
  top:50%;
  position:absolute
}
#transparentImg{
  width:320px;
  position:relative;
  top:0px;
}

【讨论】:

  • 感谢您抽出宝贵时间查看此内容,我首先设置了一个水平滚动条来查看它是如何显示的,我确定这不是我需要的。动画看起来有问题,就像某种 gif。我想要做的是直接加载与页面加载百分比成比例的部分精灵。我刚刚在roprojects.net/preloader/test2.html 翻转了图像以进行预览。所以,是的,不幸的是,这对我不起作用。感谢您的尝试!
  • @2easy 是的,对不起,我很抱歉,但是看看你给出的例子,我认为它不可能用颜色......如果你愿意,我可以发布一个单色版本跨度>
  • +1 阅读此解决方案后,我不得不承认它非常复杂。欢迎来到 Stackoverflow(你们俩),如果你们呆一段时间,你们的编码风格将会大大改善 :) 但是,这就是动画的样子。
  • @user3549636 哦,是的,我更喜欢这个解决方案,它更清晰、更短,您可能想用新代码更新您的帖子。你的旧代码有一些......异国情调......做事方式(如果你愿意,我可以是一个家伙并指出:)
  • @Winchestro 哈哈好吧。
【解决方案2】:

如果您查看 Performance API window.performance,您会发现为加载图形提供动力所需的所有数据。

https://developer.mozilla.org/en-US/docs/Navigation_timing

再想一想,如果您刚开始使用 JS,那么从性能 API 开始可能有点过头了。

为您提供有关您可以使用的更简单工具的概述:

  • requestAnimationFrame(yourFunction) 这个函数将获取你的函数并在有意义的情况下有效地执行它(用户正在查看你的选项卡,计算机可以实际渲染它等)如果你将它放在函数内的任何位置并让它调用 本身这样,您就有了一个高效的动画循环,让您可以流畅地为您的图像制作动画。

  • 事件监听器。您已经使用了一个,您当前的代码在文档加载时执行。但是您当然也可以在加载的每个资源上添加加载事件,并让它更新动画中的某些内容。

    有大量的事件监听器,让你几乎可以收听 一切并进行适当的更新,因此您不必检查所有 如果有事情发生的时间。如果您只更新一个计数器 每次加载资源时除以 1,然后除以总量 资源的百分比。

  • Canvas:我很喜欢你的精灵,我毫不怀疑它可以用 css 动画,但是如果你想对特殊效果有很多控制,或者甚至生成自己的图像并为它们制作动画或做一些事情精灵,比如改变颜色、变换、混合、在它们上绘图,画布将是你可能想要成为朋友的东西。

如果你想要灵感http://jsfiddle.net/bbVTB/2/

除非您的加载时间预计会超过几秒钟,否则我什至不会费心让它以某种方式可视化实际加载进度,而是分散用户的注意力并让他感觉短期和长期进度,这就是为什么有这种愚蠢的旋转,同时缓慢地“编织”某些东西,用户会好奇它变得足够长以完成加载。

我认为实际显示加载时间甚至可能是一个错误,除非花费了这么长时间,人们会失去耐心并离开。这就像盯着时钟,等待时间过去。为什么不让用户盯着至少有一点乐趣的东西呢?但这并不是真正的编程相关,而是设计决定。

【讨论】:

  • 谢谢。我会去看看文档,看看我能不能把一些东西放在一起。完成后我会发布一个编辑。再次感谢您。
  • 我很高兴,我目前正在再次阅读您的问题并看到更多要解决的问题,因为我觉得我的回答非常简短且不完整
  • 我仍然在与那里的文档一起工作,但我想如果我举一个最终结果的例子可能会有所帮助:fk-agency.com。他们的预加载器就是一个例子。我目前正在查看他们的 javascript 以获得更好的想法,也许只是理解更多。我将编辑原始帖子,以免您查看头部标签中的一堆脚本。
猜你喜欢
  • 2014-06-18
  • 2014-07-26
  • 2019-03-09
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
相关资源
最近更新 更多