滚动时活动部分的图像突出显示(悬停状态)?

时间:2014-03-10 11:29:42

标签: javascript jquery html css scroll

我的页面上的每个部分上方都有这些图标(较大的圆形图标,请参见示例:http://pftest.fhero.net)并带有彩色悬停状态...我真正喜欢做的是将它们更改为活动状态当用户滚动到每个部分时悬停状态(最好使用简单的淡入淡出过渡) - 非常类似于在导航中突出显示活动链接/部分的效果。

本网站上有很多教程,插件和问题等等,但是在导航中突出显示活动部分,但似乎没有太多关于将效果应用到另一个div或图像上的问题。页...

我绝对不是任何一种jQuery专家,但我想知道是否有大量可用于突出显示导航中活动状态的脚本/插件可以简单地适应这种情况以某种方式实现相同影响?甚至可能是我目前在我的页面上使用的那个?

以下是我用来突出显示页面导航中活动部分的脚本:

/* Scroll Navigation highlight */

$("#work-section1").parent().addClass('active');
var main = main = $('#mainmenu ul');

$('.scroll').click(function(event) {

event.preventDefault();

var full_url = this.href,
    parts = full_url.split('#'),
    trgt = parts[1],
    target_offset = $('#'+trgt).offset(),
    target_top = target_offset.top;

$('html, body').animate({scrollTop:target_top}, 500);

/* Remove active class on any li when an anchor is clicked */

main.children().removeClass();

/* Add active class to clicked anchor's parent li */

$(this).parent().addClass('active');

});

$(window).scroll(function(event) {
   if($("#work-section").offset().top < $(window).scrollTop() + $(window).outerHeight()){
    $("#work-section1").parent().addClass('active'); 
    $("#about-section1").parent().removeClass('active'); 
    $("#footer-section").parent().removeClass('active'); 
    $("#services-section1").parent().removeClass('active'); 
    $("#process-section1").parent().removeClass('active');      
}
   if($("#about-section").offset().top < $(window).scrollTop() + $(window).outerHeight()) {
    $("#about-section1").parent().addClass('active'); 
    $("#work-section1").parent().removeClass('active'); 
    $("#footer-section1").parent().removeClass('active');  
    $("#services-section1").parent().removeClass('active'); 
    $("#process-section1").parent().removeClass('active');                
} 
   if($("#services-section").offset().top < $(window).scrollTop() + $(window).outerHeight()){
    $("#services-section1").parent().addClass('active'); 
    $("#about-section1").parent().removeClass('active'); 
    $("#work-section1").parent().removeClass('active');
    $("#footer-section1").parent().removeClass('active');
    $("#process-section1").parent().removeClass('active');       
}
   if($("#process-section").offset().top < $(window).scrollTop() + $(window).outerHeight()){
    $("#process-section1").parent().addClass('active'); 
    $("#about-section1").parent().removeClass('active'); 
    $("#work-section1").parent().removeClass('active');
    $("#footer-section1").parent().removeClass('active'); 
    $("#services-section1").parent().removeClass('active');          
} 
   if($("#footer-section").offset().top < $(window).scrollTop() + $(window).outerHeight()){
    $("#footer-section1").parent().addClass('active'); 
    $("#about-section1").parent().removeClass('active'); 
    $("#work-section1").parent().removeClass('active'); 
    $("#services-section1").parent().removeClass('active'); 
    $("#process-section1").parent().removeClass('active');              
}       
});

和HTML:

    <nav id="mainmenu" name="mainmenu">
    <ul>
        <li><a class="scroll" id="work-section1" href="#work-section">Works</a></li>           
        <li><a class="scroll" id="about-section1" href="#about-section">About</a></li>            
        <li><a class="scroll" id="services-section1" href="#services-section">Services</a></li>
        <li><a class="scroll" id="process-section1" href="#process-section">Process</a></li>                
        <li><a class="scroll" id="footer-section1" href="#footer-section">Contact</a></li>
    </ul>                
    </nav> 

<section id="about-section" data-anchor-offset="90"> 
<section id="work-section" data-anchor-offset="90"> 
...ect...

这可能会以某种方式适应我正在寻找的效果吗?或者我应该关注的任何其他/更好的方法或插件?

我应该补充说,图标使用精灵方法,这可能会使CSS方面的东西变得有点棘手,虽然我愿意在必要时将它们更改为非精灵图像......

2 个答案:

答案 0 :(得分:2)

您可以使用一个小函数来检查元素是否在屏幕上。我为你设置了一个小小的JSFiddle:http://jsfiddle.net/LHrkB/1/

代码:

function isElementVisible(elementToBeChecked)
{
    var TopView = $(window).scrollTop();
    var BotView = TopView + $(window).height();
    var TopElement = $(elementToBeChecked).offset().top;
    var BotElement = TopElement + $(elementToBeChecked).height();
    return ((BotElement <= BotView) && (TopElement >= TopView));
}

$(window).scroll(function () {
       isOnView = isElementVisible(".inview");
       if(isOnView){
          //What to do when element is visible
           $(".inview").css({"background":"#ccc"});
       }else{ // If not visible

       }
});

好的,所以我稍微更改了JSFiddle,现在它在一个看不见的元素上使用了一个fadeIn:http://jsfiddle.net/LHrkB/2/


好的,我再次改变了JSFiddle。当你在结果窗格中滚动时,你可以看到元素更改类在屏幕上以及它再次消失时的情况。我对JS进行了评论,因此您可以看到它的作用以及它的作用。 http://jsfiddle.net/LHrkB/4/

答案 1 :(得分:0)

感谢Veritas87的帮助(他非常棒),设法使用以下代码完成所有工作:

function isElementVisible(elementToBeChecked)
{
    var TopView = $(window).scrollTop();
    var BotView = TopView + $(window).height();
    var TopElement = $(elementToBeChecked).offset().top;
    var BotElement = TopElement + $(elementToBeChecked).height();
    return ((BotElement <= BotView) && (TopElement >= TopView));
}

$(window).scroll(function () {
       isOnView = isElementVisible(".about-icon");                 
       if(isOnView){
          //What to do when element is visible
           $('.about-icon').addClass('about-icon-active');

       }else{ // If not visible
           $('.about-icon').removeClass('about-icon-active');      
       }
       isOnView = isElementVisible(".works-icon");                 
       if(isOnView){
          //What to do when element is visible
           $('.works-icon').addClass('works-icon-active');

       }else{ // If not visible
           $('.works-icon').removeClass('works-icon-active');      
       }
       isOnView = isElementVisible(".services-icon");                  
       if(isOnView){
          //What to do when element is visible
           $('.services-icon').addClass('services-icon-active');

       }else{ // If not visible
           $('.services-icon').removeClass('services-icon-active');        
       }
       isOnView = isElementVisible(".process-icon");                   
       if(isOnView){
          //What to do when element is visible
           $('.process-icon').addClass('process-icon-active');

       }else{ // If not visible
           $('.process-icon').removeClass('process-icon-active');      
       }                           
});

当然,“... icon-active”类包含图标悬停状态的样式。