【问题标题】:how to link a menu item to its right section with transition如何通过转换将菜单项链接到其右侧部分
【发布时间】:2016-08-25 19:57:31
【问题描述】:

我正在尝试实现我的 jsfiddle:http://jsfiddle.net/BjpWB/4/ 在我的 Wordpress 网站中显示的相同原则。

所以我的 navbar.js 目前是这样的:

(function( $ ){   
   $(document).ready(function(){
       $(".burguer-nav").on("click", function(){
          $("header nav ul").toggleClass("open");  
       });        
       function scrollToAnchor(aid){
            var aTag = $("a[name='"+ aid +"']");
            $('html,body').animate({scrollTop: aTag.offset().top},'slow');
            $("header nav ul li:first-child a").addClass("about-item");
            $("header nav ul li:last-child a").addClass("contact-item");
        }
        $(".about-item").click(function() {
           scrollToAnchor('about-us');
        });
        $(".contact").click(function() {
           scrollToAnchor('contact');
        });
   });    
})(jQuery);

这就是我的一个部分的样子:

<a name="about-us"></a>    
<section class="about container about-marker">           
    <?php               
    $queryposts = array(                            
        'post__in' => array(7),                 
        'post_type' => 'page',                
        'posts_per_page' => -1,                  
        'order' => 'ASC'             
        );                     
    $lastblog = new WP_Query( $queryposts );                        
    if($lastblog->have_posts() ):                
        while($lastblog->have_posts()): $lastblog->the_post(); ?>                    
            <?php the_content(); ?>                  
                <?php endwhile;            
                endif;                        
                wp_reset_postdata();       
                ?>    
</section>

但似乎我的函数 scrollToAnchor 没有采取任何行动,因为当我检查元素时,我没有看到添加到 a 标签的类。 这是正在处理的网站:http://scentology.burnnotice.co.za/ 如何正确实现此功能,以便每当我单击 about 或 contact 时,它都会转到相应的部分而无需跳转?

【问题讨论】:

    标签: javascript jquery html wordpress


    【解决方案1】:

    给你的 div 一个 ID,你可以这样做:

    $('html, body').animate({
        scrollTop: $("#myDiv").offset().top
    }, 2000);
    

    但是 JQuery animate 的性能很差。如果你想要真正流畅的动画,你可以使用velocity.js 并以https://codepen.io/anon/pen/XKLzLQ 为例

    【讨论】:

    • 我不太明白。你发送的sn-p不起作用。
    • 糟糕,这个 codepen 在 safari 上运行完美,但在 chrome 上却不行。也许库导入不好。但是,如果您查看velocityjs.org/#scroll,有一个很好的示例可以让您使用velocity.js 轻松滚动
    • 我更新了 codepen.io 链接。现在可以了,你可以再试一次
    • 但我想首先需要解决第一个问题。如果你检查元素,你会发现我试图添加到链接的类没有被添加......这意味着函数中存在问题
    • 现在将尝试实施,如果我发现任何限制,请告诉您
    【解决方案2】:

    请试试这个 javascript sn-p。

    (function( $ ){   
    	$(document).ready(function () {
    
    		$("#primary-menu > li > a").on("click", function(event){
    			event.preventDefault();
    			var bookMark = $(this).attr("href").substring(1,$(this).attr("href").length);
    			bookMarkTag = $("a[name='"+ bookMark +"']");
    			if(bookMark !== undefined) {
    				$('html,body').animate({scrollTop: bookMarkTag.offset().top}, Math.floor(bookMarkTag.offset().top));
    			}
    			
    		})
    	});
    
    })(jQuery); 

    【讨论】:

    • 我已经编辑了上面的答案,请使用上面的javascript代码sn-p并检查。谢谢!
    • 它确实有所作为,但是......似乎该部分越往下,向下滚动的速度就越快。例如:当我点击关于项目时,它会很好地转到关于部分。当我点击产品和服务时,它会快一点。如果我点击联系人,它会快得多。有没有办法控制速度?
    • 我已经修改了代码以使速度保持恒定,您实际上可以将一些数字与 animate 函数中的第二个参数相乘/除以改变恒定速度。实际上,第二个参数表示它将为该元素设置动画的时间,因此您必须根据可变距离给出可变时间。希望对您有所帮助!
    • 这真的有很大的不同。但是我怎样才能控制速度呢?假设我希望它快一点。
    • @Wosley Alarico。停用您的 widgetkit 滑块,看看当您点击联系我们时它是否仍然会暂停
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多