iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >JS如何解决position:sticky的兼容性问题
  • 450
分享到

JS如何解决position:sticky的兼容性问题

2024-04-02 19:04:59 450人浏览 泡泡鱼
摘要

这篇文章主要介绍js如何解决position:sticky的兼容性问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在项目中有用到sticky的布局,可是由于兼容性问题,在安卓端没有

这篇文章主要介绍js如何解决position:sticky的兼容性问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

项目中有用到sticky的布局,可是由于兼容性问题,在安卓端没有很好的兼容,所以为了彻底解决这个问题只能写一个组件来解决这个麻烦的问题,这里为什么是组件而不是指令是因为,是有原因的,下面会讲到。

position:sticky的兼容性以及作用

Caniuse上显示sticky的兼容性如下:

JS如何解决position:sticky的兼容性问题

Sticky的作用相当于relative和fixed的结合体,当修饰的目标节点再屏幕中时表现为relative,当要超出的时候是fixed的形式展现,因为这个特性,我们就可以来实现一个sticky的模拟效果。

sticky组件实现

template部分

<template>
  <div class="sticky" :>
    <div class="sticky-warp">
      <slot></slot>
    </div>
  </div>
</template>

代码解读:这里我使用了组件来实现,而不用指令来实现的原因是:指令虽然是无侵入性的,更方便使用,可是有一个弊端就是当修饰的节点fixed的时候会脱离文档流,会改变滚动的条的高度,如果仅仅是配合原生滚动条来实现是没问题的(当然这也会存在滚动过快的问题),可是由于是配合自定义滚动所以,采取这种折中的方式来实现。最外层是一个sticky层,判断浏览器是否支持sticky,不支持就使用relative来代替,这样也就不会改变浏览器高度的情况了,然后动态改变stick-warp层的postion来实现效果。

CSS部分

<style scoped lang="less" rel="stylesheet/less">
  .sticky {
    width: 100%;
    .sticky-warp {
      width: 100%;
      background: inherit;
      will-change: change;
      height: inherit;
      top: inherit;
    }
  }
</style>

代码解读:这里的warp层的背景色设置和sticky一致,这样过渡不会太生硬,高度和top都根据用户对外层sticky的自定义来实现,这样这部分简单用css就可以完成了。

JS部分

<script type="text/babel">
  export default {
    data () {
      return {}
    },
    computed: {
      getPosition(){
        var position = this.cssSupport('position', 'sticky') ? 'sticky' : 'relative';
        return 'position:' + position;
      }
    },
    props: {},
    beforeMount () {
    },
    mounted(){
      this.init();
    },
    deactivated(){
      if(this.cssSupport('position', 'sticky')) {
        return;
      }
      
      var elWarp = this.$el.querySelector('.sticky-warp');
      elWarp.position = 'absolute';
    },
    methods: {
      init(){
        if (this.cssSupport('position', 'sticky')) {
          return;
        }
        var el = this.$el, target = this.$el.parentnode,
            elWarp = this.$el.querySelector('.sticky-warp'),
            top = this.getNumberValue(document.defaultView.getComputedStyle(el).top);
        this.addScrollListen(target, (event)=> {
          if (el.getBoundinGClientRect().top <= top) {
            elWarp.style.position = 'fixed';
          }
          if (el.getBoundingClientRect().top >= 0 && elWarp.style.position != 'absolute') {
            elWarp.style.position = 'absolute';
          }
        })
      },
      cssSupport: function (attr, value) {
        var element = document.createElement('div');
        if (attr in element.style) {
          element.style[attr] = value;
          return element.style[attr] === value;
        } else {
          return false;
        }
      },
      getNumberValue(pxValue){
        var value = String(pxValue).match(/^\-?\+?[0-9]+/g);
        return value ? Number(value) : undefined;
      },
      addScrollListen(target, cb){
        target.addEventListener('y-scroll', (event)=> {
          cb && cb(event);
        });
      }
    },
  }

 
</script>

代码解读:这里面主要先用cssSupport来判断一下浏览器的支持情况,然后通过多自定义滚动y-scroll事件的监听,监听top值的改变来实现sticky-warp层的fixed和absolute的转换。大概原理的思路及实现过程就是上面这样,对于自定义的滚动的GitHub地址:https://github.com/yejiaming/scroll,sticky组件以及原生滚动下的指令参考的实现的github地址如下:Https://github.com/yejiaming/sticky

以上是“JS如何解决position:sticky的兼容性问题”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网html频道!

--结束END--

本文标题: JS如何解决position:sticky的兼容性问题

本文链接: https://www.lsjlt.com/news/76391.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JS如何解决position:sticky的兼容性问题
    这篇文章主要介绍JS如何解决position:sticky的兼容性问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在项目中有用到sticky的布局,可是由于兼容性问题,在安卓端没有...
    99+
    2024-04-02
  • IE7.JS如何解决IE兼容性问题
    小编给大家分享一下IE7.JS如何解决IE兼容性问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!IE7.JS解决IE兼容性问题...
    99+
    2024-04-02
  • 如何解决JS中getElementsByClassName与classList兼容性问题
    这篇文章主要为大家展示了“如何解决JS中getElementsByClassName与classList兼容性问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“...
    99+
    2024-04-02
  • 如何解决cssdisplaynlineblock的兼容性问题
    今天就跟大家聊聊有关如何解决cssdisplaynlineblock的兼容性问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 ...
    99+
    2024-04-02
  • JS脚本兼容性问题的解决方法
    这篇文章给大家介绍JS脚本兼容性问题的解决方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。这里和大家分享一下解决JS脚本兼容的几个小技巧,关于JS脚本兼...
    99+
    2024-04-02
  • IE7.JS怎样解决IE兼容性问题
    这篇文章给大家介绍 IE7.JS怎样解决IE兼容性问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。和大家重点讨论一下如何使用IE7.JS解决IE兼容性问题,IE7.JS是一个用来使老...
    99+
    2024-04-02
  • 如何调用IE7 JS Library库解决IE兼容性问题
    这篇文章给大家介绍如何调用IE7 JS Library库解决IE兼容性问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。和大家重点讨论一下IE7 JS Library库解决IE兼容性问...
    99+
    2024-04-02
  • 如何解决vue-resource promise兼容性问题
    这篇文章主要为大家展示了“如何解决vue-resource promise兼容性问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决vue-resourc...
    99+
    2024-04-02
  • 如何解决flex布局兼容性问题
    这篇文章将为大家详细讲解有关如何解决flex布局兼容性问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一.W3C各个版本的flex2009 version标志:display: box; ...
    99+
    2023-06-08
  • 如何解决axios在ie下的兼容性问题
    小编给大家分享一下如何解决axios在ie下的兼容性问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先说下axios虽说是支...
    99+
    2024-04-02
  • 如何解决360对jquery的html()兼容性问题
    这篇文章主要为大家展示了“如何解决360对jquery的html()兼容性问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决360对jquery的htm...
    99+
    2024-04-02
  • 如何解决群晖硬盘兼容性问题
    如何解决群晖硬盘兼容性问题 首先,在群晖设置-终端-启用SSH。然后,下载putty,用administrator管理权限组的账号登录, 如输入“ssh 你的DSM用户名@IP”,输入登录密码登录。最后,运行以下命令切换到root权限...
    99+
    2023-09-17
    服务器 运维
  • css兼容问题如何解决
    这篇文章主要介绍了css兼容问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇css兼容问题如何解决文章都会有所收获,下面我们一起来看看吧。 针对差别的IE浏览器版...
    99+
    2024-04-02
  • Windows与Java的兼容性问题该如何解决?
    随着Java技术的广泛应用,Windows系统与Java的兼容性问题也逐渐浮出水面。这些问题可能会导致应用程序无法正常运行,给用户带来不必要的麻烦。本文将介绍Windows与Java兼容性问题的原因,并提供一些解决方案。 原因分析: Wi...
    99+
    2023-07-29
    linux leetcode windows
  • JavaScript如何解决IE6与IE8兼容性问题
    JavaScript如何解决IE6与IE8兼容性问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获...
    99+
    2024-04-02
  • js中如何解决DOM2兼容处理重复的问题
    这篇文章主要介绍了js中如何解决DOM2兼容处理重复的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下在解决this问题之后,只需...
    99+
    2024-04-02
  • CSS如何解决与IE7和IE8的兼容性问题
    这篇文章主要讲解了“CSS如何解决与IE7和IE8的兼容性问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS如何解决与IE7和IE8的兼容性问题”吧!...
    99+
    2024-04-02
  • win10不兼容问题如何解决
    解决Windows 10不兼容问题可以尝试以下方法:1. 更新驱动程序:访问电脑制造商的官方网站或设备制造商的网站,下载并安装最新的...
    99+
    2023-10-09
    win10
  • 如何解决Vue兼容ie9的问题
    这篇文章给大家分享的是有关如何解决Vue兼容ie9的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言背景情况vue - 2.5.11vue-cli 使用模板 webpack...
    99+
    2024-04-02
  • 如何快速解决浏览器的兼容性的问题
    本篇文章为大家展示了如何快速解决浏览器的兼容性的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。由于各浏览器对页面的解析不同,会导致页面在不同浏览器中显示的样式不...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作