使页面滚动到指定元素+优化+API介绍(JS动画)

前言

当页面最上部有顶部菜单是,使用锚点跳转的方法很容易挡住想要呈现的内容(如下图技能两个字被挡住了一半),为避免出现这样的问题,故滚动到指定元素使用用JS的方法来实现。

1  使用的API简介

  • document.querySelectorAll
  • preventDefault
  • currentTarget
  • getAttribute
  • document.querySelector
  • offsetTop
  • window.scrollTo

2  初版

  • 代码及思路如下:

    //1 点击导航跳到指定位置第一步,获取所有的a标签
    let aTags=document.querySelectorAll("nav.menu ul li a")
        //console.log(aTags)
    //2 点击导航跳到指定位置第二步遍历a标签
    for(let i=0;i<=aTags.length;i++){
        aTags[i].onclick=function(x){
            x.preventDefault();  //阻止a标签默认的跳转
            //console.log(x.currentTarget);
            let a=x.currentTarget;
            let href=a.getAttribute("href"); //找到href中的内容,如果href中时一个锚点则返回#siteSkill
            //console.log(href);
            let element=document.querySelector(href); //找到内容中的锚点对应ID的标签,如对应的锚点名为#siteSkill,则返回<section class=?"skills" id=?"siteWorks">?…?</section>?
            //console.log(element);
            let top=element.offsetTop;     //获取元素到页面最顶点的高度(不会随着页面滚动变化的高度)
            //console.log(top);
            window.scrollTo(0,top-80);
        }
    }
  • 效果图如下
  • 这样能准确的达到想要的地方并且也不会内容也不会被挡住,但是,也存在一些缺点,比如跳转太生硬,中间没有过渡,影响用户体验。

3  优化

  • 优化后代码如下:

    //1 点击导航跳到指定位置第一步,获取所有的a标签
    let aTags=document.querySelectorAll("nav.menu ul li a")
    //console.log(aTags)
    //2 点击导航跳到指定位置第二步遍历a标签
    for(let i=0;i<=aTags.length;i++){
        aTags[i].onclick=function(x){
            x.preventDefault();  //阻止a标签默认的跳
            let a=x.currentTarget;
            let href=a.getAttribute("href"); //找到href中的内容,如果href中时一个锚点则返回#siteSkill
            let element=document.querySelector(href); //找到内容中的锚点对应ID的标签,如对应的锚点名为#siteSkill,则返回<section class=?"skills" id=?"siteWorks">?…?</section>?
            let top=element.offsetTop;
            let n=25;  //动的次数
            let t=500/n;   //多久动一次
            let currentTop=window.scrollY; //所在的位置
            let targetTop=top-80;  //目标位置
            var s=(targetTop-currentTop)/n;   //每次动的距离
            let i=0;
            let id=setInterval(()=>{
                if(i===n){
                    window.clearInterval(id);
                    return;
                }             //当i=n时停止动画
                i=i+1
                window.scrollTo(0,currentTop+s*i)
    
            },t)
        }

原文地址:https://www.cnblogs.com/nolaaaaa/p/9021967.html

时间: 2024-11-05 17:29:35

使页面滚动到指定元素+优化+API介绍(JS动画)的相关文章

页面滚动到指定元素区域

该代码段可将指定元素平滑滚动到浏览器窗口的可见区域. const smoothScroll = element => document.querySelector(element).scrollIntoView({ behavior: 'smooth' }); smoothScroll('#fooBar'); smoothScroll('.fooBar'); 原文地址:https://www.cnblogs.com/zhenguo-chen/p/12032165.html

滚动到指定元素的id处+当元素出现在浏览器显示区域就会自动加载

//滚动到指定元素的id处 如:$("#Exam82") function Jump() { var scroll_offset = $("#Exam82").offset();  //得到Exam82这个div层的offset,包含两个值,top和left $("body,html").animate({ scrollTop: scroll_offset.top  //让body的scrollTop等于Exam82的top,就实现了滚动 },

jquery页面滚动到指定id

//jquery页面滚动到指定id  $body = (window.opera) ? (document.compatMode == "CSS1Compat" ? $('html') : $('body')) : $('html,body');// 这行是 Opera 的补丁, 少了它 Opera 是直接用跳的而且画面闪烁$body.animate({ scrollTop: $('#指定ID').offset().top }, 1000);

[ jquery 效果 stop(stopAll,goToEnd) ] 此方法用于停止所有在指定元素上正在运行的动画,如果队列中有等待执行的动画(并且clearQueue没有设为true),他们将被马上执行

停止所有在指定元素上正在运行的动画,如果队列中有等待执行的动画(并且clearQueue没有设为true),他们将被马上执行 实例: <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content=''.animation' is my page'> <meta ht

jQuery页面滚动图片等元素动态加载实现

一.关于滚动显屏加载 常常会有这样子的页面,内容很丰富,页面很长,图片较多.比如说光棍节很疯狂的淘宝商城页面. 或者是前段时间写血本买了个高档耳机的京东商城页面,或者是新浪微博之类. 这些页面图片数量多,而且比较大,少说百来K,多则上兆.要是页面载入就一次性加载完毕.乖乖,估计黄花都变成黄花菜了.所以,我们得做点什么,避 免这种糟糕的状况发生.目前很流行的做法就是滚动动态加载,显示屏幕之外的图片默认是不加载的,随着页面的滚动,这个要显示图片的区域进入了浏览器可是窗 口范围,则触发图片的加载显示.

页面滚动图片等元素动态加载插件jquery.scrollLoading.js

如果一个网页很长,那么该页面的加载时间也会相应的较长.而这里给大家介绍的这个jQuery插件scrollLoading的作用则是,对页面元素进行动态加载,通俗的说就是滚到哪就加载到哪,屏幕以下看不见的就不用加载了.这样还可以在一定程度上节省服务器资源.该插件作者的网页将该插件的功能和使用方法描述的非常详细,这里把最一般最普遍的使用情况给大家展现一下. 插件作者:http://www.zhangxinxu.com/ 首先我们需要加载jQuery库和本插件js文件. (jquery.scrollLo

js 页面滚动到指定位置

项目中,本来想通过点击左侧列表让页面进行快速导航(根据 id="item" 和 a标签的 href 属性[<a href="#item"></a>]),不过滚动后的页面一直是顶在浏览器页面顶部的,不符合项目需求,所以就通过 js 代码让页面进行指定位置滚动,代码如下: $(".left_nav>ul>li").click(function () { var n = parseInt($(this)[0].id)

jquery使页面滚动到底部

function scrollToEnd(){//滚动到底部 var h = $(document).height()-$(window).height(); $(document).scrollTop(h); } (摘抄自http://www.cnblogs.com/hui-blog/p/5526278.html)

页面滚动到指定位置

在chrome中使用body滚动: $("body").animate({"scrollTop":200},600) 但是在firefox中却要使用html: $("html").animate({"scrollTop":200},600) 综合一下,这样就都可以滚动了(其他浏览器也没问题): $("html,body").animate({"scrollTop":200},600)