better-scroll基本應用

better-scroll是最接近與原生的滾動插件,兼容pc和移動端,示例和文檔請移步官網地址。

一、BScroll縱向滾動

1.示例代碼

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
	    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
	    <meta name="format-detection" content="telephone=no" />
	    <title>BScroll縱向滾動</title>
	    <script type="text/javascript">
	        (function(doc, win) {
	            var docEl = doc.documentElement,
	                resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
	                recalc = function() {
	                    var clientWidth = docEl.clientWidth;
	                    if (!clientWidth) return;
	                    docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
	                };
	            if (!doc.addEventListener) return;
	            win.addEventListener(resizeEvt, recalc, false);
	            doc.addEventListener('DOMContentLoaded', recalc, false);
	        })(document, window);
	    </script>
	    <style>
	    	*{
	    		margin: 0;
	    		padding: 0;
	    	}
	    	.wrap{
	    		position: absolute;;
	    		width: 100%;
	    		top: 50px;
	    		left: 0px;
	    		bottom: 50px;
	    		overflow: hidden;
	    	}
	    	.top{
	    		position: fixed;
	    		top: 0;
	    		height: 50px;
	    		width: 100%;
	    		left: 0;
	    		background-color: #000000;
	    	}
	    	.bottom{
	    		position: fixed;
	    		bottom: 0;
	    		height: 50px;
	    		width: 100%;
	    		left: 0;
	    		background-color: #000000;
	    	}
	    	.content li{
	    		margin: 0 0.2rem;
	    		height: .8rem;
	    		line-height: .8rem;
	    		padding: 0 .4rem;
	    		border-bottom: 1px solid #ccc;
	    		font-size: 0.30rem;
	    	}
	    	/* 下拉、上拉提示信息 */
		    .top-tip{
		        position: absolute;  
		        top: -40px;  
		        left: 0;
		        z-index: 1;  
		        width: 100%;  
		        height:40px;  
		        line-height:40px;  
		        text-align:center;
		        color: #555;
		        font-size: 0.30rem;
		    } 
		      
		    .bottom-tip{
		        width: 100%;
		        height: 35px;
		        line-height: 35px;
		        text-align: center;
		        color: #777;
		        background: #f2f2f2;
		        position: absolute;
		        bottom: -35px;
		        left: 0;
		        font-size: 0.30rem;
		    }
	    </style>
	</head>
	<body>
		<div class="top"></div>
		<div class="wrap">
			<div class="content">
				<!-- 刷新提示信息 -->
                <div class="top-tip">
                    <span class="refresh-hook">下拉刷新</span>
                </div>
				<ul class="list">
					<li onclick="clickli(event)">列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li>
					<li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li>
					<li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li>
					<li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li>
					<li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li>
				</ul>
				<!-- 底部提示信息 -->
                <div class="bottom-tip">
                    <span class="loading-hook">加載更多</span>
                </div>
			</div>
		</div>
		<div class="bottom"></div>
		<script src="js/jquery-2.1.4.js" type="text/javascript" charset="utf-8"></script>
		<script src="js/bscroll.min.js"></script>
		<script>
			$(function(){
				var wrapper = document.querySelector('.wrap') 
				var myScroll = new BScroll(wrapper, {
					scrollY: true,
					probeType:3,  
			      	pullDownRefresh: {
				        threshold: 50,
				        probeType: 3
				    },
				    pullUpLoad: {
				        threshold: 50
				    },
				    click:true
				});
				//下拉刷新動作觸發事件
				myScroll.on('pullingDown', (e)=>{
				  console.log('pullingDown')
//				  myScroll.refresh()
				  myScroll.finishPullDown() // 下拉刷新動作完成後調用此方法告訴BScroll完成一次下拉動作
				});
				//上拉加載
				myScroll.on('pullingUp', (e)=>{
				  console.log('pullingUp')
				  //myScroll.refresh() // DOM 結構發生變化後,重新初始化BScroll
				  myScroll.finishPullUp() // 上拉加載動作完成後調用此方法告訴BScroll完成一次上拉動作
				});
				// 滑動過程中事件
                myScroll.on('scroll',(pos)=>{
                	console.log(-pos.y,myScroll.maxScrollY)
                    if(pos.y > 40){
                        $(".refresh-hook").html('釋放立即刷新');
                    }else{
                    	$(".refresh-hook").html('下拉刷新');
                    }
                    if(pos.y<myScroll.maxScrollY-40){
                    	$(".loading-hook").html('加載中...');
                    }else{
                    	$(".loading-hook").html('加載更多');
                    }
                });
			});
			function clickli(e){
				console.log(e,e._constructed)//我們會給派發的 event 參數加一個私有屬性 _constructed,值爲 true
			}
		</script>
	</body>
</html>

2.截圖
縱向滾動預覽圖

二、BScroll橫向滾動

1.示例代碼

注意:BScroll橫向滾動必須計算要滾動容器的寬度,縱向滾動不需要計算。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
	    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
	    <meta name="format-detection" content="telephone=no" />
	    <title>BScroll橫向滾動</title>
	    <script type="text/javascript">
	        (function(doc, win) {
	            var docEl = doc.documentElement,
	                resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
	                recalc = function() {
	                    var clientWidth = docEl.clientWidth;
	                    if (!clientWidth) return;
	                    docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
	                };
	            if (!doc.addEventListener) return;
	            win.addEventListener(resizeEvt, recalc, false);
	            doc.addEventListener('DOMContentLoaded', recalc, false);
	        })(document, window);
	    </script>
	    <style>
	    	*{
	    		margin: 0;
	    		padding: 0;
	    		list-style-type: none;
	    	}
	    	.wrap{
	    		position: absolute;;
	    		width: 100%;
	    		top: 50px;
	    		left: 0px;
	    		bottom: 50px;
	    		overflow: hidden;
	    	}
	    	.top{
	    		position: fixed;
	    		top: 0;
	    		height: 50px;
	    		width: 100%;
	    		left: 0;
	    		background-color: #000000;
	    	}
	    	.bottom{
	    		position: fixed;
	    		bottom: 0;
	    		height: 50px;
	    		width: 100%;
	    		left: 0;
	    		background-color: #000000;
	    	}
	    	
	    	.content{
	    		height: 1rem;
	    		overflow: hidden;
	    		white-space: nowrap;
	    	}
	    	.list{
	    		height: 1rem;
	    	}
	    	.content li{
	    		margin: 0 10px 0 0;
	    		height: .8rem;
	    		line-height: .8rem;
	    		border-bottom: 1px solid #ccc;
	    		font-size: 0.30rem;
	    		width: 50px;
	    		float: left;
	    		text-align: center;
	    	}
	    </style>
	</head>
	<body>
		<div class="top"></div>
		<div class="wrap">
			<div class="content">
				<ul class="list">
					<li onclick="clickli(event)">列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li>
					<li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li>
					<li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li>
					<li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li>
					<li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li><li>列表</li>
				</ul>
			</div>
		</div>
		<div class="bottom"></div>
		<script src="js/jquery-2.1.4.js" type="text/javascript" charset="utf-8"></script>
		<script src="js/bscroll.min.js"></script>
		<script>
			$(function(){
				var wrapper = document.querySelector('.wrap');
				var liCount=$(".list").find("li").size();
				$(".content").width(liCount*50+liCount*10);
				var myScroll = new BScroll(wrapper, {
					scrollY: false,
					probeType:3,  
					scrollX:true,
				    click:true
				});
				// 滑動過程中事件
                myScroll.on('scroll',(pos)=>{
                	console.log(pos,myScroll.maxScrollX)
                });
			});
			function clickli(e){
				console.log(e,e._constructed)//我們會給派發的 event 參數加一個私有屬性 _constructed,值爲 true
			}
		</script>
	</body>
</html>

2.截圖
橫向滾動預覽圖

三、BScroll滾動聯動

1.示例代碼

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
		<meta name="format-detection" content="telephone=no" />
		<title>BScroll滾動聯動</title>
		<script type="text/javascript">
			(function(doc, win) {
				var docEl = doc.documentElement,
					resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
					recalc = function() {
						var clientWidth = docEl.clientWidth;
						if(!clientWidth) return;
						docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
					};
				if(!doc.addEventListener) return;
				win.addEventListener(resizeEvt, recalc, false);
				doc.addEventListener('DOMContentLoaded', recalc, false);
			})(document, window);
		</script>
		<style>
			* {
				margin: 0;
				padding: 0;
				list-style-type: none;
			}
			
			.top {
				position: fixed;
				top: 0;
				height: 1rem;
				line-height: 1rem;
				width: 100%;
				left: 0;
				background-color: #000000;
				color: #fff;
				font-weight: bold;
				font-size: 0.32rem;
				text-align: center;
			}
			
			.bottom {
				position: fixed;
				bottom: 0;
				height: 1rem;
				line-height: 1rem;
				width: 100%;
				left: 0;
				background-color: #000000;
				color: #fff;
				font-weight: bold;
				font-size: 0.32rem;
				text-align: center;
			}
			/*Y軸*/
			
			.wrapY {
				position: absolute;
				;
				width: 100%;
				top: 1.8rem;
				left: 0px;
				bottom: 50px;
				overflow: hidden;
			}
			
			.wrapY .content li {
				margin: 0 0.2rem;
				height: .8rem;
				line-height: .8rem;
				padding: 0 .4rem;
				border-bottom: 1px solid #ccc;
				font-size: 0.30rem;
			}
			/* 下拉、上拉提示信息 */
			
			.top-tip {
				position: absolute;
				top: -40px;
				left: 0;
				z-index: 1;
				width: 100%;
				height: 40px;
				line-height: 40px;
				text-align: center;
				color: #555;
				font-size: 0.30rem;
			}
			
			.bottom-tip {
				width: 100%;
				height: 35px;
				line-height: 35px;
				text-align: center;
				color: #777;
				position: absolute;
				bottom: -35px;
				left: 0;
				font-size: 0.30rem;
			}
			/*X軸*/
			
			.wrapX {
				position: absolute;
				;
				width: 100%;
				top: 1rem;
				left: 0px;
				height: 0.8rem;
				overflow: hidden;
				background-color: #009eff;
			}
			
			.wrapX .content {
				height: 0.8rem;
			}
			
			.wrapX .list {
				height: 0.8rem;
			}
			
			.wrapX .content li {
				height: .8rem;
				line-height: .8rem;
				font-size: 0.30rem;
				width: 1.2rem;
				float: left;
				text-align: center;
				color: #fff;
			}
			
			.navActive {
				color: rgb(255, 145, 4) !important;
				font-size: 0.32rem;
				font-weight: bold;
			}
		</style>
	</head>

	<body>
		<div class="top">頭部</div>
		<div class="wrapX">
			<div class="content">
				<ul class="list">
					<li onclick="clickliX(event,this)" class="navActive">導航0</li>
					<li onclick="clickliX(event,this)">導航1</li>
					<li onclick="clickliX(event,this)">導航2</li>
					<li onclick="clickliX(event,this)">導航3</li>
					<li onclick="clickliX(event,this)">導航4</li>
					<li onclick="clickliX(event,this)">導航5</li>
					<li onclick="clickliX(event,this)">導航6</li>
					<li onclick="clickliX(event,this)">導航7</li>
					<li onclick="clickliX(event,this)">導航8</li>
					<li onclick="clickliX(event,this)">導航9</li>
					<li onclick="clickliX(event,this)">導航10</li>
					<li onclick="clickliX(event,this)">導航11</li>
					<li onclick="clickliX(event,this)">導航12</li>
					<li onclick="clickliX(event,this)">導航13</li>
					<li onclick="clickliX(event,this)">導航14</li>
					<li onclick="clickliX(event,this)">導航15</li>
					<li onclick="clickliX(event,this)">導航16</li>
					<li onclick="clickliX(event,this)">導航17</li>
					<li onclick="clickliX(event,this)">導航18</li>
					<li onclick="clickliX(event,this)">導航19</li>
					<li onclick="clickliX(event,this)">導航20</li>
					<li onclick="clickliX(event,this)">導航21</li>
					<li onclick="clickliX(event,this)">導航22</li>
					<li onclick="clickliX(event,this)">導航23</li>
					<li onclick="clickliX(event,this)">導航24</li>
					<li onclick="clickliX(event,this)">導航25</li>
					<li onclick="clickliX(event,this)">導航26</li>
					<li onclick="clickliX(event,this)">導航27</li>
					<li onclick="clickliX(event,this)">導航28</li>
					<li onclick="clickliX(event,this)">導航29</li>
					<li onclick="clickliX(event,this)">導航30</li>
					<li onclick="clickliX(event,this)">導航31</li>
					<li onclick="clickliX(event,this)">導航32</li>
				</ul>
			</div>
		</div>
		<div class="wrapY">
			<div class="content">
				<!-- 刷新提示信息 -->
				<div class="top-tip">
					<span class="refresh-hook">下拉刷新</span>
				</div>
				<ul class="list">
					<li onclick="clickliY(event,this)">列表0</li>
					<li onclick="clickliY(event,this)">列表1</li>
					<li onclick="clickliY(event,this)">列表2</li>
					<li onclick="clickliY(event,this)">列表3</li>
					<li onclick="clickliY(event,this)">列表4</li>
					<li onclick="clickliY(event,this)">列表5</li>
					<li onclick="clickliY(event,this)">列表6</li>
					<li onclick="clickliY(event,this)">列表7</li>
					<li onclick="clickliY(event,this)">列表8</li>
					<li onclick="clickliY(event,this)">列表9</li>
					<li onclick="clickliY(event,this)">列表10</li>
					<li onclick="clickliY(event,this)">列表11</li>
					<li onclick="clickliY(event,this)">列表12</li>
					<li onclick="clickliY(event,this)">列表13</li>
					<li onclick="clickliY(event,this)">列表14</li>
					<li onclick="clickliY(event,this)">列表15</li>
					<li onclick="clickliY(event,this)">列表16</li>
					<li onclick="clickliY(event,this)">列表17</li>
					<li onclick="clickliY(event,this)">列表18</li>
					<li onclick="clickliY(event,this)">列表19</li>
					<li onclick="clickliY(event,this)">列表20</li>
					<li onclick="clickliY(event,this)">列表21</li>
					<li onclick="clickliY(event,this)">列表22</li>
					<li onclick="clickliY(event,this)">列表23</li>
					<li onclick="clickliY(event,this)">列表24</li>
					<li onclick="clickliY(event,this)">列表25</li>
					<li onclick="clickliY(event,this)">列表26</li>
					<li onclick="clickliY(event,this)">列表27</li>
					<li onclick="clickliY(event,this)">列表28</li>
					<li onclick="clickliY(event,this)">列表29</li>
					<li onclick="clickliY(event,this)">列表30</li>
					<li onclick="clickliY(event,this)">列表31</li>
					<li onclick="clickliY(event,this)">列表32</li>
				</ul>
				<!-- 底部提示信息 -->
				<div class="bottom-tip">
					<span class="loading-hook">加載更多</span>
				</div>
			</div>
		</div>
		<div class="bottom">底部</div>
		<script src="js/jquery-2.1.4.js" type="text/javascript" charset="utf-8"></script>
		<script src="js/bscroll.min.js"></script>
		<script>
			var myScrollY = null;
			var myScrollX = null;
			$(function() {
				var wrapperY = document.querySelector('.wrapY')
				myScrollY = new BScroll(wrapperY, {
					scrollY: true,
					probeType: 3,
					click: true
				});
				var wrapperX = document.querySelector('.wrapX');
				var htmlFontSize = parseFloat($("html").css("font-size"));
				var liCount = $(".wrapX .list").find("li").size();
				$(".wrapX .content").width(liCount * htmlFontSize * 1.2);
				myScrollX = new BScroll(wrapperX, {
					scrollY: false,
					probeType: 3,
					scrollX: true,
					click: true
				});

				
			});

			function clickliY(e,t) {
				var _index=$(t).index();
				console.log(e, e._constructed) //我們會給派發的 event 參數加一個私有屬性 _constructed,值爲 true
				if(e._constructed) {
					$(".wrapX li").removeClass("navActive");
					$(".wrapX li").eq(_index).addClass("navActive");
					// 滾動到指定的目標元素
					myScrollX.scrollToElement($(".wrapX li").eq(_index).get(0), 200, true);
					myScrollY.scrollToElement($(".wrapY li").eq(_index).get(0),200);
				}
			}

			function clickliX(e, t) {
				console.log(e, e._constructed) //我們會給派發的 event 參數加一個私有屬性 _constructed,值爲 true
				if(e._constructed) {
					$(".wrapX li").removeClass("navActive");
					$(t).addClass("navActive");
					var _index=$(t).index();
					// 滾動到指定的目標元素
					myScrollX.scrollToElement($(t).get(0), 200, true);
					myScrollY.scrollToElement($(".wrapY li").eq(_index).get(0),200);
				}
			}
		</script>
	</body>

</html>

2.截圖
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章