判断浏览器是否兼容position:sticky属性,并实现jQuery兼容所有浏览器

目前有些浏览器不支持position: sticky属性,并且safair浏览器不用版本支持度也有所区别(12.1的貌似不支持,但是11.多的又可以...)

实现效果如下:

头部的html结构:

 <ul class="purchase_immigration_alink  init_top">
        <li><a href="#mao_youshi">项目优势</a></li>
        <li><a href="#mao_tiaojian">申请条件</a></li>
        <li><a href="#mao_liucheng">办理流程</a></li>
        <li><a href="#mao_qingdan">费用清单</a></li>
        <li><a href="#mao_yimyoushi">侨居移民优势</a></li>
        <li><a href="#mao_guobieyous">国别优势</a></li>
        <li><a href="#mao_zixun">热门资讯</a></li>
        <li><a href="#mao_fangyuan">精品房源</a></li>
        <li><a href="#mao_hudong">互动专区</a></li>
        <li><a href="#mao_fuli">领取福利</a></li>
 </ul>

页面右侧的html结构

<!-- 页面右侧 -->
                <div class="purchase_immigration_right fl init_top">
                    <div class="news_happening">
                        总费用<span>25</span><i>万欧元</i><a href="#">咨询移民顾问<i></i></a>
                    </div>
                    <ul>
                        <li>
                            <p>29万欧元</p>
                            费用总览
                        </li>
                        <li>
                            <p>10-12个月</p>
                            办理周期
                        </li>
                        <li>
                            <p>无居住要求</p>
                            居住要求
                        </li>
                        <li>
                            <p>永久居民</p>
                            身份类型
                        </li>
                        <li>
                            <p>最多六个文字</p>
                            语言要求
                        </li>
                        <li>
                            <p>无学历要求</p>
                            学历要求
                        </li>
                        <div class="cb"></div>
                    </ul>
                    <!-- 评估 -->
                    <div class="evaluation_qualification">
                        <h6>免费评估移民资格</h6>
                        <div class="input_text">
                            <input type="text" placeholder="姓名:(选填)">
                            <input type="text" placeholder="手机:(必填)">
                        </div>
                        <p><span>*</span>我们承诺保护您的个人隐私!</p>
                    </div>
                </div>
吸顶效果
当子元素到达父元素底部取消吸顶
// 判断浏览器是否支持sticky 属性
        var sticky = (function () {
                var vendorList = ['', '-webkit-', '-ms-', '-moz-', '-o-'],
                    vendorListLength = vendorList.length,
                    stickyElement = document.createElement('div');
                for (var i = 0; i < vendorListLength; i++) {
                    stickyElement.style.position = vendorList[i] + 'sticky';
                    console.log('stickyElement',stickyElement)
                    if (stickyElement.style.position !== '') {
                        return true;
                    }
                }
                return false;
            })();
  // 设置元素的fiexd属性
            function divFixedTop (ele,top) {
                let scrollTop = $(window).scrollTop() + top;  //滚动条的位置加上当前元素的fixed的top值(用来动态设置fixed的top值的触发点)
                let parentTop = $(ele).parent().height() + $(ele).parent().offset().top;   //获取当前元素的父元素距离文档的top值加上父元素的高度(用来限制子元素在父元素的底部活动范围)
                let eleRelativePosition = $(ele).parent().height() - $(ele).height(); //获取fixed后子元素在父元素里面的活动范围(超出则改变子元素的fixed属性为relative,并赋值给子元素的relative的top上)
                let thisTop = $(ele).data("top");  //获取当前元素存储在元素属性当前的top值 
                let margin_top = $(ele).data("margin-top").slice(0,$(ele).data("margin-top").length - 2);  //获取当前元素存储在元素dom属性上的margin-top值并截取掉除px的值
                let left = $(ele).offset().left;  //获取元素静态时距离页面左边的偏移量,用来设置fixed的left值
                if (scrollTop >= thisTop - margin_top) {
                    $(ele).css({
                        'position': 'fixed',
                        'bottom': 'auto',
                        'margin-top': '0px',
                        'top': top + 'px',
                        'left': left + 'px'
                    })
                } else if (scrollTop <= thisTop + margin_top){
                    $(ele).css({
                        'position': 'static',
                        'margin-top': margin_top + 'px',  //精确fixed的top值
                        'top': '',
                        'left': ''
                    })
                }
                if ((parentTop - $(ele).height()) <= scrollTop) {
                    $(ele).css({
                        'position': 'relative',
                        'margin-top': '0px',
                        'top': eleRelativePosition,
                        'left': ''
                    })
                }
            };

获取sticky 用来判断浏览器是否支持sticky css属性如果不支持就监听页面滚动事件并调用封装的divFixedTop 方法

//如果当前浏览器兼容position: sticky,属性就返回
            if (sticky) {
                return;
                // 否则就动态js设置元素的fixed触发值
            } else {
                //每次滚动就监测调用divViewHeight()方法,判断是否到达触发点
                $(window).on('scroll',function() {
                    divFixedTop('.purchase_immigration_alink',0);  
                    divFixedTop('.purchase_immigration_right',70);
                    divFixedTop('.interactive_welfare_right',70); 
                })
            }
目前市面上多数浏览器可以兼容stickt属性,但是还是存在不兼容问题(包括同一个浏览器的不同版本),所以已上代码可以解决目前已知所有浏览器的兼容stickt属性问题(其实是不兼容的就动态设置fixed属性超出父元素高度就取消fixed,从而模拟sticky属性)

--over--

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容