2015-11-02 98 views
0

我正在嘗試使用褪色塊動畫製作滑塊,就像here。麻煩的是,在我的情況下,我試圖全屏顯示,這意味着高度和寬度將是可變的。這意味着背景位置技巧將不起作用,因爲它不會調整背景以適合屏幕,而是將其視爲「原樣」。這很容易看到here(請記住,#滑動將是高度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'; 
    } 
} 

}

+1

喜歡此http://jsfiddle.net/43s4x1s5/2/ – fuyushimoya

+0

謝謝您的回答!我認爲這正是我所期待的。不過,我已經看到你已經使用'window.innerWidth'來獲取瀏覽器,但是在我嘗試的測試中(在Firefox中)它包含了滾動條,這會破壞代碼。這是正常的行爲嗎?另外,在while和for語句之前聲明變量是否會提高性能? – minimino

+0

這是因爲firefox在jsfiddle上的窗口寬度似乎是浮點數,我們都知道在處理float時,應該小心謹慎,就像我的情況是'644.8',而'window.innerWidth'給了我'645'。 ,它100%肯定這些街區會變寬並且破裂。我已經通過'document.documentElement.getBoundingClientRect();'改變了獲取真正寬度的方法,並且爲了使後面的分割永遠不會有更大的變化。第二,這只是因爲'var'是函數範圍,我不喜歡在循環中重新聲明它。 – fuyushimoya

回答

1

的意見反饋後,當有浮於windowwidth可能發生的問題。因此,使用document.documentElement.getBoundingClientRect();來獲得精確的大小,並舍入,這可能會犧牲一些像素,以確保塊不會溢出到下一行。 jsfiddle

function animateBlocks(x,y,speed) { 
 
    var img = document.querySelector('#slides img'); 
 
    var viewPortSize = document.documentElement.getBoundingClientRect(); 
 
    // Round down if there's floating points on width. 
 
    var windowWidth = Math.floor(viewPortSize.width); 
 
    var windowHeight = window.innerHeight; 
 
\t var newWidth = windowWidth/x; 
 
\t var newHeight = windowHeight/y; 
 
    
 
    var newDiv; 
 
    var domFrag = document.createDocumentFragment(); 
 
    var i, j; 
 
    for (i = 0; i < y; i +=1) { 
 
     for (j = 0; j < x; j += 1) { 
 
      newDiv = document.createElement("div"); 
 
      domFrag.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.backgroundSize = windowWidth + 'px ' + windowHeight + 'px'; 
 

 
      newDiv.style.backgroundPosition = ('-' + newWidth*j + 'px ' + '-' + newHeight*i + 'px'); 
 
     } 
 
    } 
 
    
 
    for (var i = 0; i<(x*y); i++) { 
 

 
\t } 
 
    document.getElementsByClassName('active-slide')[0].appendChild(domFrag); 
 
    document.getElementsByClassName('active-slide')[0].firstElementChild.style.display = 'none'; 
 
}
body { 
 
    width: 100%; 
 
    height: 100%; 
 
    margin: 0; 
 
    overflow: hidden; /* makes the scroll bar disappear. */ 
 
} \t 
 

 
#slides { 
 
\t \t position: relative; 
 
\t \t height: 100px; 
 
     margin: 0px; 
 
     padding: 0px; 
 
\t } 
 
\t 
 
\t .slide { 
 
\t \t position: absolute; 
 
\t \t height: 100%; 
 
\t \t width: 100%; 
 
\t \t top: 0; 
 
\t \t left: 0; 
 
\t \t display: none; 
 
\t } 
 
\t 
 
\t .slide>img { 
 
\t \t position: absolute; 
 
\t \t left: 0; 
 
\t \t top: 0; 
 
\t \t height: 100px; 
 
\t } 
 
\t 
 
\t .active-slide { 
 
\t \t display: block; 
 
\t } 
 

 
.slide-block { 
 
\t float: left; 
 
}
<button onclick="animateBlocks(5,5,0)">Click here to see how it looks</button> 
 
<ul id="slides"> 
 
\t <li class="slide active-slide"> 
 
\t \t <img src="http://www.planwallpaper.com/static/images/colorful-triangles-background_yB0qTG6.jpg"> 
 
\t </li> 
 
</ul> 
 
    <br><br><br><br><br><br> 
 
    <p>How it should look</p> 
 
    <img style="height: 100px;" src="http://www.planwallpaper.com/static/images/colorful-triangles-background_yB0qTG6.jpg">

+0

作爲一種替代方法,您可以獲得任何寬度的寬度:「100%」元素。謝謝! – minimino