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 相关文章推荐
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
Nov 15 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
Jun 30 Javascript
jQuery实现HTML表格单元格的合并功能
Apr 06 Javascript
深入剖析JavaScript中的函数currying柯里化
Apr 29 Javascript
jQuery回到顶部的代码
Jul 09 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 jQuery
SeaJS中use函数用法实例分析
Oct 10 Javascript
前端MVVM框架解析之双向绑定
Jan 24 Javascript
vuejs 制作背景淡入淡出切换动画的实例
Sep 01 Javascript
详解webpack-dev-server使用方法
Sep 14 Javascript
详解Vue中的scoped及穿透方法
Apr 18 Javascript
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
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学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
2017/01/19 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
进一步探究Python的装饰器的运用
2015/05/05 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
python mysql断开重连的实现方法
2019/07/26 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
求职信格式范本
2013/11/15 职场文书
教育学专业实习生的自我鉴定
2013/11/26 职场文书
基层党员对照检查材料
2014/08/25 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
四风对照检查材料范文
2014/09/27 职场文书
先进班组事迹材料
2014/12/25 职场文书
导游词400字
2015/02/13 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
Go web入门Go pongo2模板引擎
2022/05/20 Golang