应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

干货!div滚动到一定位置就固定他。Vue中实现一侧滚动到底部就固定

13446人阅读 2019/2/17 22:53 总访问:5182756 评论:0 收藏:0 手机
分类: 前端

尊重原创:转载请注名出处


div滚动到一定位置就固定他,例如左边的内容很多,右边的内容很少,如果不处理滚动到一定位置后

右边的数据就看不到了,所以可以在滚动到一点层度后保持右边的数据不动不随着滚动条的滚动而

滚动,这样不会只看到一边的内容,另外一边是空白的情况,用户体验很更好,颜值会更高....。

 废话不多说!直接上基础的代码(tip:后面有更详细一些的示例代码,可以直接复制运行) 。

不要小看这点代码,自己一点一点写还是会遇到坑的,会花不少时间的,抛砖引玉,分享才会创造更多价值

  1. <script src="~/lib/jquery/dist/jquery.js"></script>
  2. <title>首页</title>
  3. <style>
  4.     .mydiv {
  5.         margin-left200px;
  6.         width180px;
  7.         height: auto;
  8.         background#ff5555;
  9.         overflow: auto;
  10.     }
  11.     .content {
  12.         display: -webkit-box !important;
  13.         display: -moz-box !important;
  14.         display: -o-box !important;
  15.         display: -webkit-flex !important;
  16.         display: -ms-flexbox !important;
  17.         display: flexbox !important;
  18.         display: flex !important;
  19.         display: box !important;
  20.         flex-direction: row;
  21.     }
  22. </style>
  23. <div class="content">
  24.     <div class="text-center" style="height:1800px;background:#abcdff;width:500px;">
  25.         新年好
  26.     </div>
  27.     <div>
  28.         <div class="mydiv" id="rightdiv">
  29.             <div style="width:180px;height:300px;background:#00ff00; flex: auto;">
  30.                 hello girl1
  31.             </div>
  32.             <div style="width:180px;height:300px;background:#0abcde;margin-top:30px; flex: auto;">
  33.                 hello girl2
  34.             </div>
  35.             <div style="width:180px;height:300px;background:#ccff00;margin-top:30px; flex: auto;">
  36.                 hello girl3
  37.             </div>
  38.         </div>
  39.     </div>
  40. </div>
  41. <script>
  42.     $(window).scroll(function ({
  43.         //获取滚动条的高度
  44.         var scrollTop = $(this).scrollTop();
  45.         //获取一个屏幕的高度
  46.         var windowHeight = document.body.clientHeight;
  47.         console.log("div本身的高度:" + $('#rightdiv').height());
  48.         console.log("距离顶部的的位置" + scrollTop);
  49.         //当滚动条滚动到一边的最底部,把需要的div滚动到底部就固定div不让移动了
  50.         if (scrollTop > $('#rightdiv').height() - windowHeight) {
  51.             $("#rightdiv").css("position""fixed"); //固定div让其不随着滚动条的滚动而滚动
  52.             $("#rightdiv").css("bottom""10px");
  53.         }
  54.         else {
  55.             $("#rightdiv").css("position""static");//恢复div可以跟随滚动条滚动
  56.         }
  57.     });
  58. </script>

怎么判断滚动条是否滚动到一边的最底部

其实不是scrollTop=右边的高度就行,这样的话不是滚动到最低部,而是右边的内容刚好已经滚动完了,所以还应该减去一个屏幕的高度,其实画个图就很好理解了

根据这个图我们可以很容易的看出来。此时滚地条的位置 = 右边的高度(需要固定的高度)- 屏幕的高度


浮动布局的情况

这里左右两边的div用的是flex布局,也可以使用浮动,但是如果是使用浮动的情况,设置了position:fixed浮动就会失效了,就会出现左边两边页面重叠的情况,这个时候其实也好解决因为设置了固定布局后可以设置left,这种属性,可以在加载完成的时候先获取他的位置,然后在需要固定的时候设置这个位置即可

  1.  //在加载完成的时候先获取他的位置
  2.  var cirhgtleft = $("#crightdiv").offset().left;
  3.  //在需要固定的时候设置这个位置即可
  4.  $("#crightdiv").css("left", cirhgtleft);


在实际运用中,可能还会遇到一些细节问题,就需要大家自己去摸索了

例如设置了固定布局后宽度百分比就会是相对整个浏览器,这个时候可以先获取一下div的宽度,在需要固定的

时候把这个宽度给他就行了,不然当固定div的时候宽度会发生变化



注意:当html使用了DOCTYPE申明,获取浏览器高度的方法需要调整一下

这个时候如果使用:document.body.clientHeight

获取的不是一个屏幕的高度,而是个页面的高度!!!.

可以参考一下这篇文章:https://www.tnblog.net/15826438993/article/details/4045


也可以参考一下下面的方法获取

  1.      //获取浏览器高度
  2.         function findHeigt()
  3.         {
  4.             var winHeight = 0;
  5.             //获取窗口高度
  6.             if (window.innerHeight)
  7.                 winHeight = window.innerHeight;
  8.             else if ((document.body) && (document.body.clientHeight))
  9.                 winHeight = document.body.clientHeight;
  10.             return winHeight;
  11.         }


还要注意有时候某些临界值可能会存在没有机会变回来了,应该还要设置一个一定能变回来的点
可以判断是否已经滚动到顶部了,如果已经滚动到顶部了肯定要变回的撒。

在贴一下到目前为止的一点示例代码,可以直接复制运行:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>Document</title>
  7.     <script src="js/jquery.min.js"></script>
  8.     <style>
  9.         .mydiv {
  10.             margin-left200px;
  11.             width180px;
  12.             height: auto;
  13.             background#ff5555;
  14.             overflow: auto;
  15.         }
  16.         .content {
  17.             display: -webkit-box !important;
  18.             display: -moz-box !important;
  19.             display: -o-box !important;
  20.             display: -webkit-flex !important;
  21.             display: -ms-flexbox !important;
  22.             display: flexbox !important;
  23.             display: flex !important;
  24.             display: box !important;
  25.             flex-direction: row;
  26.         }
  27.     </style>
  28. </head>
  29. <body>
  30.     <div class="content">
  31.         <div class="text-center" style="height:1800px;background:#abcdff;width:500px;">
  32.             新年好
  33.         </div>
  34.         <div>
  35.             <div class="mydiv" id="rightdiv">
  36.                 <div style="width:180px;height:300px;background:#00ff00; flex: auto;">
  37.                     hello girl1
  38.                 </div>
  39.                 <div style="width:180px;height:300px;background:#0abcde;margin-top:30px; flex: auto;">
  40.                     hello girl2
  41.                 </div>
  42.                 <div style="width:180px;height:300px;background:#ccff00;margin-top:30px; flex: auto;">
  43.                     hello girl3
  44.                 </div>
  45.             </div>
  46.         </div>
  47.     </div>
  48. </body>
  49. </html>
  50. <script>
  51.     //获取浏览器高度
  52.     function findHeigt({
  53.         var winHeight = 0;
  54.         //获取窗口高度
  55.         if (window.innerHeight)
  56.             winHeight = window.innerHeight;
  57.         else if ((document.body) && (document.body.clientHeight))
  58.             winHeight = document.body.clientHeight;
  59.         return winHeight;
  60.     }
  61.     $(window).scroll(function ({
  62.         //获取滚动条的高度
  63.         var scrollTop = $(this).scrollTop();
  64.         //获取一个屏幕的高度
  65.         var windowHeight = findHeigt();
  66.         console.log("div本身的高度:" + $('#rightdiv').height());
  67.         console.log("距离顶部的的位置" + scrollTop);
  68.         /*
  69.             有时候某些临界值可能会存在没有机会变回来了,应该还要设置一个一定能变回来的点,
  70.             可以判断是否已经滚动到顶部了,如果已经滚动到顶部了肯定要变回的撒。
  71.             这里写成scrollTop===0也可以,之所以写成scrollTop<10只是为了加一点判断范围而已,这个可以自己控制。
  72.             还要注意一点这个判断要放到是否滚动到底部那个判断前面去,因为之所以写这个判断就是怕下面那个判断滚动条
  73.             是否在底的在某些情况下恒成立了,这样固定的那一块就变不回去了,所以要在那个判断前面先判断,这样优先级就
  74.             会更高一点。
  75.         */
  76.         if (scrollTop < 10) {
  77.             //alert("滚动到顶部了")
  78.             $("#rightdiv").css("position""static");//恢复div可以跟随滚动条滚动
  79.         }
  80.         //当滚动条滚动到一边的最底部,把需要的div滚动到底部就固定div不让移动了
  81.         else if (scrollTop > $('#rightdiv').height() - windowHeight) {
  82.             $("#rightdiv").css("position""fixed"); //固定div让其不随着滚动条的滚动而滚动
  83.             $("#rightdiv").css("bottom""10px");
  84.         }
  85.         else {
  86.             $("#rightdiv").css("position""static");//恢复div可以跟随滚动条滚动
  87.         }
  88.     });
  89. </script>


在Vue中实现其实也是差不多的

本来在vue中最好不要去用jquery的,可以直接去监听滚动条的事件来实现的,这会比较忙就不慢慢去写了,由于这个vue项目里边已经全局引用了jquery了,可以直接使用,就直接也用jquery了。

这里直接就贴一个js就行了,页面差不多的

  1. mounted() {
  2.   let my = this
  3.   $(window).scroll(function ({
  4.     //获取滚动条的高度
  5.     var scrollTop = $(this).scrollTop();
  6.     //获取一个屏幕的高度
  7.     var windowHeight = my.findHeigt();
  8.     console.log("div本身的高度:" + $('#rightdiv').height());
  9.     console.log("距离顶部的的位置" + scrollTop);
  10.     /*
  11.       有时候某些临界值可能会存在没有机会变回来了,应该还要设置一个一定能变回来的点,
  12.       可以判断是否已经滚动到顶部了,如果已经滚动到顶部了肯定要变回的撒。
  13.       这里写成scrollTop===0也可以,之所以写成scrollTop<10只是为了加一点判断范围而已,这个可以自己控制。
  14.       还要注意一点这个判断要放到是否滚动到底部那个判断前面去,因为之所以写这个判断就是怕下面那个判断滚动条
  15.       是否在底的在某些情况下恒成立了,这样固定的那一块就变不回去了,所以要在那个判断前面先判断,这样优先级就
  16.       会更高一点。
  17.     */
  18.     if(scrollTop<10)
  19.     {
  20.       //alert("滚动到顶部了")
  21.       $("#rightdiv").css("position""static");//恢复div可以跟随滚动条滚动
  22.     }
  23.     //当滚动条滚动到一边的最底部,把需要的div滚动到底部就固定div不让移动了
  24.     else if (scrollTop > $('#rightdiv').height() - windowHeight) {
  25.       console.log("固定了")
  26.       $("#rightdiv").css("position""fixed"); //固定div让其不随着滚动条的滚动而滚动
  27.       $("#rightdiv").css("bottom""10px");
  28.       // 右边宽度默认是250就设置一个,不然设置为fiexd后会影响宽度,这里根据实际情况来调整吧,因为我这里右边这块的宽度是固定的所以直接给一个宽度就行了,很方便
  29.       $("#rightdiv").css("width""250px");
  30.     }
  31.     else {
  32.       $("#rightdiv").css("position""static");//恢复div可以跟随滚动条滚动
  33.     }
  34.   });
  35. },
  36. methods: {
  37.   //获取浏览器高度
  38.   findHeigt() {
  39.     var winHeight = 0;
  40.     //获取窗口高度
  41.     if (window.innerHeight)
  42.       winHeight = window.innerHeight;
  43.     else if ((document.body) && (document.body.clientHeight))
  44.       winHeight = document.body.clientHeight;
  45.     return winHeight;
  46.   }
  47. }

vue3中的使用:vue3 实现div滚动到一定位置就固定他,实现一侧滚动到某个位置就固定,实现滚动条滚动到一边的最底部就固定 - TeachingNote的专栏 - TNBLOG


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

抖音怎么涨粉丝比较快?抖音涨粉技巧实操干货!

抖音现在可以说是短视频领域中流量最大的平台,很多个人创作者和商家入驻到抖音平台中,从而利用抖音平台获得流量用户和粉...

开课-B端产品经理山顶冲刺计划干货整理

我自己报了开课吧的《B端产品经理山顶冲刺计划》,目前已经学习了第一章1-1: 解析企业服务市场趋势以及产品经理核心价值为什...

vue3 实现div滚动到一定位置就固定他,实现一侧滚动到某个位置就固定,实现滚动条滚动到一边的最底部就固定

在vue2以及普通页面里边使用参考:https://www.tnblog.net/aojiancc2/article/details/1273本来在vue中最好不要去用jquery...

Vue.js常用指令,事件绑定等,Vue过滤器解析状态过滤器多个参数。Vue表格状态解析。Vue解析类型,element ui解析类型,状态,el-tag

按照html的编码显示:v-html&lt;div class=&quot;font_info&quot; v-html=&quot;item.Content&quot;&gt;{{item.Content}}&l...

import 引入vue 组件命名规则。Vue引入自定义的组件

端午节快乐~其实就是两种方法:第一种就是完全按照组件的名字去使用&lt;template&gt; &lt;MainLayout&gt; &lt;p&gt;我是...

vue路由实现一个二级菜单。Vue页面切换,vue子页面切换。Vue菜单选中

效果如下:这种二级菜单或者三级菜单如果我们使用.net 的mvc来实现就很简单,整两个布局页可以轻松搞定来试试使用vue的路由...

vue3,vue组件,props给一个对象参数。Vue组件间传参数vue父组件给子组件传参数。组件参数类型。父组件调用子组件的方法。Vue组件事件监听,给子组件传递方法,子组件调用父组件方法

[TOC]组件可以使用props给组件传值,可以同时传递多个,可以是任意类型,比如字符串或者对象。 下面是个简单的例子: &lt...

vue使用axios调用接口,解决跨域。Vue调用api接口。Vue请求封装

一.先下载axios依赖npminstallaxios二.在需要的地方引入importaxiosfrom&#39;axios&#39;三.环境准备好了之后就可以使用axio...

vue-element-admin左边树形,右边表格的布局。Vue模板

大概的界面如下:代码:&lt;template&gt; &lt;divclass=&quot;app-container&quot;&gt; &lt;el-row:gutter=&quot;20&quot...

vue-element-admin api相关,api配置。Vue-element-admin 统一配置api前缀

api请求的前缀是配置在env.xx文件里边env.development是本地环境,env.production这个文件配置的是正式环境这里可以看到默...

elementui对话框Dialog使用,配合表单使用。Vue-element-ui 弹窗,弹出层

Dialog 弹出一个对话框,适合需要页面元素更多的场景。需要设置visible属性,它接收Boolean,当为true时显示 Dialog。Dialo...

vue filtervue 过滤器的使用vue解析状态,解析审核状态等。Vue解析类型。Vue表格状态解析el-tagelement ui 状态

使用v-if解析审核状态代码如下:&lt;divstyle=&quot;width:29px;height:29px;line-height:29px;text-align:center;&quot;&g...

nginx发布vue,nginx异常处理404处理结合nginx优化路由404。Vue项目发布在服务器中

nginx发布vue这里用vue3-admin-template来举例,其实都是一样的。 先打包 使用的打包命令类似npm run build:prod,反正根...