JS控制div跳转到指定的位置的几种解决方案总结


Posted in Javascript onNovember 05, 2016

总结一下自己在写这个需求遇到的问题,相信大家应该是经常遇到的。即要求滚轮滚动到指定的位置。先看下基本的解决方案。

1.给链接a加个#的方式来实现跳转。(锚点方法)这里直接贴下代码:

<div id="container">
    <a href="#div1">div1</a>
    <a href="#div2">div2</a>
    <a href="#div3">div3</a>
</div>
  <div id="div1">div1</div>
  <div id="div2">div2</div>
  <div id="div3">div3</div>

css样式:

div {
      height: 800px;
      width: 400px;
      border: 2px solid black;
    }
 #container{
      position: fixed;
      margin:50px 500px;
 }

该锚点法,不需要任何的js代码,即可实现跳转的方法。缺点:点击链接url发生变化,刷新的话会有问题。此方法貌似只能在.html后缀的页面才能起作用,对于.cshtml页面不起作用。

2.用animate属性,当点击锚点后,页面滚动到相应的DIV。接着上面的代码,具体添加如下代码:

html页面:
  

<div id="container">
     <p id="p1">div1</p>
     <p id="p2">div2</p>
     <p id="p3">div3</p>
</div>
  <div id="div1">div1</div>
  <div id="div2">div2</div>
  <div id="div3">div3</div>

css样式页面同上,看下js代码如下:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
$(document).ready(function() {
  $("#p1").click(function() {
    $("html, body").animate({
      scrollTop: $("#div1").offset().top }, {duration: 500,easing: "swing"});
    return false;
  });
  $("#p2").click(function() {
    $("html, body").animate({
      scrollTop: $("#div2").offset().top }, {duration: 500,easing: "swing"});
    return false;
  });
  $("#p3").click(function() {
    $("html, body").animate({
      scrollTop: $("#div3").offset().top }, {duration: 500,easing: "swing"});
    return false;
  });
});

3.简单的window.scrollTo方法使用,这里不再详细说,看下用法。

即滚动到坐标为(100,500)的地方。比较单一,且没有缓慢的效果

function scrollWindow(){
  window.scrollTo(100,500);
}

4.用js的srollIntoView方法进行使用。这里贴下代码:

html页面:
 

<ul>
    <li><a href="javascript:;" data-tab="eat">吃饭</a></li>
    <li><a href="javascript:;" data-tab="sleep">睡觉</a></li>
    <li><a href="javascript:;" data-tab="walk">逛街</a></li>
 </ul>
<div >
  <div data-tab="eat" style="background:cyan; height:500px;">
    吃饭
  </div>
  <div data-tab="sleep" style="background:lightgreen;height:2000px;">
    睡觉
  </div>
  <div data-tab="walk" style="background:LightSalmon;height:1000px;">
    逛街
  </div>
</div>

js代码如下:

[].slice.call(document.querySelectorAll('a')).forEach(function(el){
      el.addEventListener('click', function(){
        var target = document.querySelector('div[data-tab=' + this.getAttribute('data-tab')+ ']' )
        target.scrollIntoView(true);
      })
 })

注意一个问题,object.scrollIntoView(bool),前面是对象,通常原生的获取对象都是下面的写法:

document.getElementById('#xxx' ).scrollIntoView(true);

那么如果用jquery来调用该方法的话,需要写成下面这样的:

$('#xxx')[0].scrollIntoView(true);

5.如果需要缓慢的移动滚动可添加一个定时器。看下我们这个需求。先贴下代码:

js部分:

return cPageView.extend({
      pageid: 10320608681,
      hpageid: 10320608681,
      events: {
        "click .nav_list li ": "setHightLight",
      },
})

点击事件部分:

//设置标签选中,并且滚动到相应的位置
     setHightLight: function (e) {
       var obj = $(e.currentTarget);
       var _tag = this.$el.find('.nav_list li');
       var $innerText = this.$el.find('.fsp_hd');
       var items = $(".fs_prd_wrap").find('.item');
       this.$el.find('.nav_list li').removeClass('current');
       var itemIndex = "";
       var objCurrent = [];
       obj.addClass('current');
       var scrollMove = function (scrollTo, time) {
         var scrollFrom = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
         var count = 0;
         var every = 10;
         scrollTo = parseInt(scrollTo);
         time /= every;
 
         var interval = setInterval(function () {
           count++;
           document.documentElement.scrollTop = document.body.scrollTop = (scrollTo - scrollFrom) / time * count + scrollFrom;
           if (count >= time) {
             clearInterval(interval);
           }
         }, every);
       };
       for (var i = 0; i < items.length; i++) {
         var self = this;
         items[i].index = i;
         if (obj.index() == items[i].index) {
           items.each(function () {
             var currentItem = $(this);
             // items[i].scrollIntoView(false);     
             scrollMove(items[i].offsetTop-75, 500);
           });
           
           // console.log(items[i].index);
         }
       }
     },

看下效果如下所示:
JS控制div跳转到指定的位置的几种解决方案总结
在chrome下测试和真机测试,效果都还行,这个需求主要是,没法通过高度来控制完成,因为,我们这个中间的内容元素都是动态加载进来的,高度是变得

因此我通过控制它的index来控制,固定其div模块,距离顶部的高度top为75px,滚动单个的div模块,而不是整个的body一起滚动。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript高级程序设计
Dec 29 Javascript
JS 日期验证正则附asp日期格式化函数
Sep 11 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
Feb 26 Javascript
做web开发 先学JavaScript
Dec 12 Javascript
使用coffeescript编写node.js项目的方法汇总
Aug 05 Javascript
Bootstrap每天必学之栅格系统(布局)
Nov 25 Javascript
Javascript原型链的原理详解
Jan 05 Javascript
jQuery模仿单选按钮选中效果
Jun 24 Javascript
JavaScript轮播图简单制作方法
Feb 20 Javascript
详解微信小程序实现WebSocket心跳重连
Jul 31 Javascript
小程序如何使用分包加载的实现方法
May 22 Javascript
微信小程序自定义波浪组件使用方法详解
Sep 21 Javascript
xcode中获取js文件的路径方法(推荐)
Nov 05 #Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
Nov 05 #Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
Nov 05 #Javascript
JavaScript中绑定事件的三种方式及去除绑定
Nov 05 #Javascript
Ajax与服务器(JSON)通信实例代码
Nov 05 #Javascript
Javascript 普通函数和构造函数的区别
Nov 05 #Javascript
Javascript 函数的四种调用模式
Nov 05 #Javascript
You might like
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
2014/03/12 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
python写的一个squid访问日志分析的小程序
2014/09/17 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
Python中的枚举类型示例介绍
2019/01/09 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
python中如何设置代码自动提示
2020/07/15 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
python实现计算图形面积
2021/02/22 Python
Skyscanner波兰:廉价航班
2017/11/07 全球购物
三星印度官网:Samsung印度
2019/08/03 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
园林毕业生自我鉴定范文
2013/12/29 职场文书
机房搬迁方案
2014/05/01 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
焦点访谈观后感
2015/06/11 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python