【发布时间】:2015-11-02 15:22:49
【问题描述】:
我正在尝试制作带有渐变块动画的滑块,就像here 一样。麻烦的是,就我而言,我正在尝试全屏,这意味着高度和宽度将是可变的。这意味着 background-position 技巧将不起作用,因为它不会调整背景大小以适应屏幕,而是将其“原样”。更容易看到here(请记住,#slides 将是 100% 的高度和 100% 的宽度以及 .slide>img)。我已经没有解决它的想法,任何帮助将不胜感激。我宁愿不使用 jQuery,但如果有必要,也可以。
先谢谢你。
到目前为止,我的脚本是:
function animateBlocks(x,y,speed) {
var width = document.getElementById('slides').offsetWidth;
var height = document.getElementById('slides').offsetHeight;
var newWidth = width/x;
var newHeight = height/y;
for (var i = 0; i<(x*y); i++) {
var newDiv = document.createElement("div");
document.getElementsByClassName('active-slide')[0].appendChild(newDiv);
newDiv.className = "slide-block";
newDiv.style.width = newWidth + 'px';
newDiv.style.height = newHeight + 'px';
newDiv.style.backgroundImage = 'url("' + document.getElementsByClassName('active-slide')[0].firstElementChild.src + '")';
newDiv.style.backgroundPosition = ('-' + newDiv.offsetLeft + 'px ' + '-' + newDiv.offsetTop + 'px');
if (i == x*y-1) {
document.getElementsByClassName('active-slide')[0].firstElementChild.style.display = 'none';
}
}
}
【问题讨论】:
-
感谢您的回答!我想这就是我要找的。但是,我看到您使用
window.innerWidth来获取浏览器,但在我尝试的测试中(在 Firefox 中)它包含滚动条,这会破坏代码。这是正常的行为吗?另外,在 while 和 for 语句之前声明变量会提高性能吗? -
因为firefox在jsfiddle上的窗口宽度好像是一些浮点数,大家都知道在处理float的时候要慎重对待,比如我的情况是
644.8,window.innerWidth给我645,它 100% 确定这些块会更宽并破裂。我已经通过document.documentElement.getBoundingClientRect();更改了获取实际宽度的方式,并向下舍入以使以后的划分永远不会变得更大。第二,这只是因为var是函数作用域,我不喜欢在循环中重新声明它。
标签: javascript html css animation