1. 程式人生 > >移動端開發——吸頂效果的解決方案

移動端開發——吸頂效果的解決方案

一、前言

吸頂效果是web開發中一種常見的互動方式,常見的應用場景有導航、搜尋框等等。(圖片來自其他部落格,感謝博主

sticky

二、在移動端開發遇到的問題

吸頂效果的基本的開發思路,利用scroll事件進行監聽scrollTop的值,當scrollTop達到一定的值得時候設定吸頂元素的position : fixed;屬性。但是問題是:安卓支援scroll事件和fixed屬性,但是ios8.0的scroll事件不是連續觸發的,只會在scroll事件結束後觸發一次scroll事件,同時ios還不支援設定fixed屬性。

Ios支援position: sticky可以很好的解決這個問題,設定了sticky

的元素,在螢幕範圍(viewport)時該元素的位置並不受到定位影響(設定是top、left等屬性無效),當該元素的位置將要移出偏移範圍時,定位又會變成fixed,根據設定的left、top等屬性成固定位置的效果。

可以知道sticky屬性有以下幾個特點:

該元素並不脫離文件流,仍然保留元素原本在文件流中的位置。

當元素在容器中被滾動超過指定的偏移值時,元素在容器內固定在指定位置。元素固定的相對偏移是相對於離它最近的具有滾動框的祖先元素,如果祖先元素都不可以滾動,那麼是相對於viewport來計算元素的偏移量

三、解決思路

         1.檢測客戶端是安卓系統還是ios系統。

         2.如果是安卓系統新增scroll事件監聽

         3.如果是ios系統新增position: sticky 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
    <title>pc sticky</title>
    <style>
    * {
        margin: 0;
        padding: 0;
    }

    .banner {
        height: 200px;
    }
    .nav {
        height: 40px;
        background-color: skyblue;
        border: 1px solid silver;
    }
    .sticky {
        /*滾過初始位置時自動吸頂*/
        position: -webkit-sticky;
        position: sticky;
        /*吸頂時的定位*/
        top: 0;
        left: 0;
        /*z比下方所有z高*/
        z-index: 9999;
    }
    .content {
        height: 1500px;
    }

    .fixed-top {
        position: fixed;
        width: 100%;
        left: 0;
        top: 0;
    }
    </style>
</head>
<body>
    <div class="banner">Banner圖</div>
    <div class="nav">吸頂元素</div>
    <div class="content">很長的內容</div>
    <script src="https://cdn.bootcss.com/zepto/1.0rc1/zepto.min.js"></script>
<script>
	var stickyEl = document.querySelector('.nav');
	function fixed(num) {
        var u = navigator.userAgent;
        var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; 
        var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); 
        if(isAndroid) {
            document.body.onscroll = function(e) {
                var scrollT = document.body.scrollTop;
                if (scrollT > num) {
                    $(stickyEl).addClass('fixed-top');
                }else {
                    $(stickyEl).removeClass('fixed-top');
                }
            };
        }else if(isiOS) {
            $(stickyEl).addClass('sticky');
            console.log(11);
        }
    }
    fixed(200);
</script>
</body>

相關推薦

移動開發——效果解決方案

一、前言 吸頂效果是web開發中一種常見的互動方式,常見的應用場景有導航、搜尋框等等。(圖片來自其他部落格,感謝博主) 二、在移動端開發遇到的問題 吸頂效果的基本的開發思路,利用scroll事件進行監聽scrollTop的值,當scrollTop達到一定的值得時候設

移動圖片壓縮上傳解決方案

長度 繪制圖片 slice ase 但是 choose 100萬 lis 計算 最近做移動端圖片上傳,發現圖片尤其是iPhone拍照的圖片都有2M左右,但是實際上項目中用不到這麽大,於是想到要用js在前臺進行壓縮。 解決方案如下:  【一】獲取圖片數據   先是獲取圖片數據

轉 :2016HTML5移動最新兼容問題解決方案

並不是 按鈕 關鍵字 initial button 手機開發 div off spin 1、安卓瀏覽器看背景圖片,有些設備會模糊。用同等比例的圖片在PC機上很清楚,但是手機上很模糊,原因是什麽呢?經過研究,是devicePixelRatio作怪,因為手機分辨率太小,如果按照

移動兼容性問題解決方案

取消 單擊事件 normal 過程 歷史 利用 資深 play 字母 1. IOS移動端click事件300ms的延遲響應 移動設備上的web網頁是有300ms延遲的,玩玩會造成按鈕點擊延遲甚至是點擊失效。這是由於區分單擊事件和雙擊屏幕縮放的歷史原因造成的, 200

HTML5移動最新兼容問題解決方案

otl call area cat dev doctype 橫屏 ont black 1、安卓瀏覽器看背景圖片,有些設備會模糊。用同等比例的圖片在PC機上很清楚,但是手機上很模糊,原因是什麽呢?經過研究,是devicePixelRatio作怪,因為手機分辨率太小,如果按照分

javascript移動禁止頁面滑動的解決方案

lse ipad str oid 發現 hid 滾動條 touch roi 1 前言 移動端網頁,發現ios平臺的iphone或者ipad,網頁可以上下左右移動,而Android版則不會。僅作為記錄使用。 2 代碼 var mo=function(e){e.prevent

移動border 1px 問題完美解決方案

我是用sass寫的,用其他的前處理器寫法大同小異,新建mixin.scss檔案: /*單條border樣式*/ @mixin border-1px ($color, $direction) {

移動字型小於12px的解決方案

1.移動端的字型大小最小為12px。兩種解決方案:第一種,使用transform: scale(0.7);css的屬性,可以縮放大小。第二種,使用display:table; display: tabl

移動H5頁面生成圖片解決方案

現在有很多微信公眾號運營活動,都有生成圖片的需求,生成圖片後可以傳送給好友和發到朋友圈擴散,利於產品的宣傳! 1. 生成圖片可以用canvas,但是由於已經有了html2canvas這個開源庫,所以為了節省時間就沒有自己寫了 少囉嗦,先看東西!!! /

移動響應佈局的LESS解決方案

在移動端佈局的時候,因為不同機型有著不一樣的螢幕寬度,是故我們經常對頁面做出不同的佈局,有時候,有些機型的差距不大,所以我們沒有必要進行多次的重複勞動,所以我們使用響應式佈局。下面是我的一種解決文案,可以讓同一個設計稿在多個不同的環境達到相同的效果。 /

移動開發經常遇見的問題以及解決方案

誤差 cli 輸入關鍵詞 水平居中 arch asi 服務器 color del 1.移動端左右滑動右側有留白 出現這種問題的話查看一下自己的css中有沒有用到position:relative或者position:absolute,我做頁面的時候經常遇到這個問題,百分之

移動video標簽默認置解決方案

bili 微信 今天 資料 打開 樣式 hidden tran explore 概述 在移動端上面,比如說微信上面打開一個頁面,如果有video標簽的話,常常會出現video標簽默認置頂的情況,一般的解決方案是在不需要看見它的時候給它加一個display:none進行隱藏。

移動開發常見問題解決方案彙總- Javascript技巧(一)

1、安卓瀏覽器看背景圖片,有些裝置會模糊。 用同等比例的圖片在PC機上很清楚,但是手機上很模糊,原因是什麼呢? 經過研究,是devicePixelRatio作怪,因為手機解析度太小,如果按照解析度來顯示網頁,這樣字會非常小,所以蘋果當初就把iPhone 4的960640解析

移動開發H5頁面點選按鈕後出現閃爍或黑色背景的解決辦法

-webkit-tap-highlight-color:transparent; *{-webkit-tap-highlight-color:transparent; } H5頁面在IOS端測試的時候

js 實現在移動開發解決不同手機畫素大小的相容問題

Js 實現在移動開發網頁時,根據手機畫素不同,自動改變相對,字型的大小。 例項程式碼中以750畫素為參考,如果在350畫素手機上顯示該內容,相對字型大小為1px=0.01rem (funct

移動開發底部元素margin-bottom失效解決辦法

一、情景 最近開發一個內嵌app的頁面時,發現頁面底部元素margin-bottom在ios下失效,在安卓內正常...... 1.safari瀏覽器內頁面底部元素設定margin-bottom失效;

Vue開發——實現效果

因為專案需求,最近開始轉到微信公眾號開發,接觸到了Vue框架,這個效果的實現雖說是基於Vue框架下實現的,但是同樣也可以借鑑到其他

iOS 蘋果開發證書失效的解決方案(Failed to locate or generate matching signing assets)

attempted can app 根證書 原因 ... emp ati dev 從2月14日開始,上傳程序的同學可能會遇到提示上傳失敗的提示. 並且打開自己的鑰匙串,發現所有的證書全部都顯示此證書簽發者無效. 出現以下情況: Failed to locate or gen

移動開發用touch事件還是click事件

device 問題 桌面網站 有意義 用戶 雨後春筍 phone 平臺 系統 前端開發現在包含了跨瀏覽器,跨平臺(不同操作系統)和跨設備(不同尺寸的設備)開發。 在移動開發的過程中,到底選取touch事件還是click事件?對了,請不要鄙視click,click在移動端開發

關於移動開發時iOS上滑屏卡頓的問題,以及電話類數字的樣式失控問題

img 頁面 通話 tips rem span cti 解法 並不是 寫在前面的話:   tips:寫移動的時候,那些頭部需要固定顯示在顯示屏頂部的,通常在PC端我會用fixed來寫。但是,在移動端,這並不是一個好方法,因為彈出輸入小鍵盤的時候,會造成fixed 的元素偏移