ОК, я получил это работает! Вам придется посмотреть на мой источник, чтобы увидеть, что я сделал, потому что я так сильно изменился, но в основе вашей проблемы лежит тот факт, что элемент «прокручиваемый» отличается на разных платформах / браузерах.
Иногда это элемент html
, в других случаях это элемент body
. Я использовал несколько строк кода из плагина scrollTo , чтобы позаботиться об этом. Я использовал CSS для позиционирования песочных часов. И я использовал цветные блоки div, чтобы создать видимость движения песка. Вам больше не нужно обрабатывать события изменения размера браузера (что может свести вас с ума в IE, поверьте мне:)
Вот демоверсия .
Я тестировал в Safari и FF на Mac, но он должен корректно работать в IE7 +.
Вот код jQuery (не включая фрагмент из scrollTo):
<script type="text/javascript">
$(function(){
var low = 28,
high = 50,
max = 86.5,
range = high - low,
$mtop = $("#mask-top"),
$mbottom = $("#sandy-bottom")
scroller = $()._scrollable(); // Uses part of the scrollTo plugin
$(window).scroll(function(e){
var scrollTop = $(scroller).scrollTop(),
bodyHeight = document.body.scrollHeight,
itemHeight = $('#outline').outerHeight();
var percentScrolled = scrollTop / (bodyHeight - itemHeight);
percentScrolled = Math.floor(percentScrolled * 100) / 100;
var newHeight = (range * percentScrolled);
newHeight = Math.floor(newHeight * 10) / 10;
$mtop.height( (newHeight + low) + "%" );
$mbottom.css( 'top', (max - newHeight) + "%" );
})
})
</script>
Вот обновленный HTML, который я перевел, чтобы стать ребенком body
:
<div id="hourglass">
<img id="outline" src="img/hourglass-outline.png" width="634" height"1080" alt="Hourglass Outline" />
<!-- A new image I created based on your two-->
<img id="sandy" src="hourglass-insides.png" width="634" height="1080" />
<div class="mask" id="mask-top" ></div>
<img id="sandy-bottom" src="hourglass-insides.png" width="634" height="1080" />
</div>
А для тех, кто хочет посмотреть, вот CSS, который я использовал для позиционирования песочных часов:
<style type="text/css" media="screen">
#hourglass {
left: 0; top: 0; bottom: 0; right: 0;
}
#outline, #sandy, #sandy-bottom {
position: fixed;
top: 0;
height: 100%;
left: 50% !important;
margin: 0;
margin-left: 215px;
max-height: 100%;
min-height: 100%;
width: auto;
}
#sandy {
top: -32%;
}
#sandy-bottom {
top: 86.5%;
}
.mask {
background: #262B28;
position: fixed;
width: 100%;
left: 0;
right: 0;
}
#mask-top {
top: 0;
height: 28%;
}
</style>