2016-01-24 71 views
1

编辑希望这更清楚。 :)当通过视口中途滚动时显示隐藏div

现在,当您向下滚动时,您会注意到只有在触摸视口顶部时才会显示粉红色的div。当它通过视口时,我怎样才能让它出现?

https://jsfiddle.net/1p751fz5/

// constants 
 
var BTN_CLS = 'owl-thumb-item', 
 
\t \t BTN_ANIMATION_MILLIS = 200, 
 
\t \t DIV_ANIMATION_MILLIS = 1000; 
 

 
// document ready handler 
 
$(document).ready(function() { 
 
\t 
 
    // display buttons from first 'div' 
 
    showBtns('one', BTN_CLS); 
 
    
 
    // window scroll handler 
 
    $(window).scroll(function() { 
 
    $('.hidden').each(function(i, v) { 
 
     if ($(window).scrollTop() > $(this).offset().top) { 
 
     \t // show 'div' when scrolling 
 
     \t showDiv($(this), onCompleteDivAnimation($(this))); 
 
     } 
 
    }); 
 
    }); 
 

 
}); 
 

 
/** 
 
* Used to show an animated 'div' and perform some actions. 
 
* @param {Function} completeCallback Action performed after animation. 
 
* @param {Object} div Target element. 
 
*/ 
 
function showDiv(div, completeCallback) { 
 
    // check if 'div' is currently animated and avoid animation queue 
 
    if (!div.is(':animated')) { 
 
    div.animate({ 
 
     opacity: 1 
 
    }, { 
 
     complete: completeCallback, 
 
     duration: DIV_ANIMATION_MILLIS 
 
    }); 
 
    } 
 
}; 
 

 
/** 
 
* Used to perform actions after completing a 'div' animation. 
 
*/ 
 
function onCompleteDivAnimation(div) { 
 
\t showBtns(div.prop('id'), BTN_CLS); 
 
}; 
 

 
/** 
 
* Used to show button(s) from a 'div' element. 
 
* @param {String} divId Target element Id. 
 
* @param {String} btnCls Button(s) CSS class. 
 
*/ 
 
function showBtns(divId, btnCls) { 
 
    var btnGroup = getBtnGroup(divId, btnCls); 
 

 
    animateBtn(btnGroup); 
 
}; 
 

 
/** 
 
* Used for creating a group of button(s) from a 'div' element. 
 
* @param {String} divId Target element Id. 
 
* @param {String} btnCls Button(s) CSS class. 
 
* @returns {Array} btnGroup 
 
*/ 
 
function getBtnGroup(divId, btnCls) { 
 
    var domBtns = $('#' + divId + ' .' + btnCls), 
 
    btnGroup = []; 
 

 
    for (var i = 0; i < (domBtns || []).length; ++i) { 
 
    btnGroup.push(domBtns[i]); 
 
    } 
 

 
    return btnGroup; 
 
}; 
 

 
/** 
 
* Used to animate a button group that normally comes from a 'div' element. 
 
*/ 
 
function animateBtn(btnGroup) { 
 
\t btnGroup = btnGroup || []; 
 

 
    $(btnGroup.shift()).fadeIn(BTN_ANIMATION_MILLIS, function() { 
 
    if (btnGroup.length > 0) { 
 
     animateBtn(btnGroup); 
 
    } 
 
    }); 
 
};

+1

'imagePos'只在页面加载时设置一次,并使用'this'这是窗口 – charlietfl

+0

@charlietfl所以我需要让它被多次调用? o.o – user2252219

+0

yes ...请注意,滚动事件每秒触发很多次...应该使用一些去抖动以获得更好的性能 – charlietfl

回答

2

这可以使用jQuery来完成。这里是一个小提琴:https://jsfiddle.net/s13gjnwt/16/

在滚动上,获取窗口高度,用户滚动的数量和隐藏div的顶部位置。 (我设置这样的股利将不会出现,直到它的后50%的视窗口高度的一半的偏移量)

JS

$(window).on('scroll', function(){ 
    var scrollAmount = $(window).scrollTop(); 
    var windowHeight = $(window).height(); 
    var halfHeight = $(window).height()/2; 
    var topOfHiddenDiv = $('.hidden-div').offset().top; 
    if(((scrollAmount + windowHeight) - halfHeight) >= topOfHiddenDiv && !$('.hidden-div').hasClass('show')) { 
    $('.hidden-div').addClass('show'); 
    } 
}); 

.content { 
    padding-top: 1000px; 
} 
.hidden-div { 
    background: lightblue; 
    color: @white; 
    padding: 30px; 
    opacity: 0; 
    transition: opacity 0.3s; 
    margin-bottom: 300px; 
} 
.hidden-div.show { 
    opacity: 1; 
} 

注意:请务必在小提琴

向下滚动
+1

此处使用scrollTop是关键,特别是因为它在原始代码中缺失。 – rambossa

+0

@JoshSanger嗨,我更新了OP,希望更清楚。我试图将你的代码合并到我的代码中,但是我没有把它弄清楚。是否还需要'$(window).on('scroll',function(){'替换'$(document).ready(function(){' – user2252219

+0

Nope,$(document).ready()首先加载DOM,$(window).on('scroll')函数会被放在里面 –

相关问题