频道栏目
首页 > 资讯 > HTML/CSS > 正文

用HTML5+CSS+Js实现一个简单的移动端左右滑动翻页+点击下标翻页

18-06-21        来源:[db:作者]  
收藏   我要投稿

用HTML5+CSS+Js实现一个简单的移动端左右滑动翻页+点击下标翻页

//【如何做一个简单的手机端页面的翻页】
//第一步:创建移动端页面内  HTML + CSS  【注】可用弹性布局   但需要注意的是  外层盒子的定位
//第二步: 思考问题  要实现怎样的效果?
		//1. 手指滑动时触发事件【左右】两个方向  
		//2.点击footer部分的下标实现切换效果 
		//3.点击footer部分的下标实现下标颜色变化


//第三步;编写JS代码



 //添加监听事件

	document.addEventListener('DOMContentLoaded',function(){
		
    //   创建一个数组用于调用数组属性值     或者  方便【数值】的更改    【注】可以用数组 /对象  但对象更方便我们的使用
		var postion = {
			startX:0,
			startY:0,
			endX:0,
			endY:0,
			baseMoveX: window.innerHeight / 3,
			index:1
		}
		 
		//     获取页面元素  比不可少的一个步骤
	var tab2  = document.getElementsByClassName('tab2')[0];	//获取到ul 思路: 用ul定位来实现页面的切换 (ul的宽度设置成  innerWind * 4)
	var li2   = document.getElementsByClassName('li2');	//索引值不确定  且不写先
	var tab3 = document.querySelector('#tab3');	
	var li3  = document.querySelectorAll('.li3');	



	     // 设置默认的第一个下标的颜色
	     li3[0].style.color = '#58bc58';
	     //  封装一个函数用于清空下标 的颜色
	     function delite(){
	     	 for(var i = 0;i < li3.length; i++){
				li3[i].style.color = '';
			} 
	     }

		
		// 添加手指事件	【注】 这里的原理和拖拽一模一样  (手指按下和 手指移动是 时  必须给给记录光标位置)			
				//  手指按下时触发   记录鼠标移动坐标
				tab2.addEventListener('touchstart',function(e){				
						postion.startX = e.touches[0].clientX;
						postion.startY = e.touches[0].clientY;
				})
				
				//  手指拖动时触发   记录鼠标移动坐标
				tab2.addEventListener('touchmove',function(en){
						postion.endX = en.touches[0].clientX;
						postion.endY = en.touches[0].clientY;
						move();   //当手指滑动时触发函数   改变ul的定位
						
				})
				
				//  手指移开时 设置UL的定位 【注】有两种情况   超过绝对值/不超过绝对值
				tab2.addEventListener('touchend',function(vent){
								   
					    move(true);  //手指松开时调用调用函(函数用于判断 :滑动的距离是否超过绝对值       1.超过  (滑动到下一页) 2.不超过 (位置定位在当前页))
				})
									
				function move(_end){
					  	var x = postion.startX - postion.endX;//  定义X轴滑动时的绝对值
					  	var y = postion.startY - postion.endY;
					 
					  	//滑动效果
					     if(postion.index < li2.length){//  第一种情况==========left    [用if 判断:索引值是 1-3的时候可以 向左滑动  改变 ul的定位 【注】因为超出会造成用户滑动出现空白页面   ]
					     	
					     					     						     	
						    if(x > 0){// 计算公式:  起点位置 - 终点位置   = x;  如果 x > 0  说明滑动的方向是左边
						    	//to left					   	
					                tab2.style.left = `${((postion.index - 1) * innerWidth + x) * -1}px` ;//  滑动是改变ul定位  【注】此时的 X为正值 
					                
							    	if(_end){//   手指松开时判读函数 是否为true  是就执行   否不执行
							    		
							    		   delite();// 清空上一页下标颜色
							    	        
							    		
							    		if(Math.abs(x) >= postion.baseMoveX){// .判断:if 滑动的距离或者等于  移动的基础值  那么翻页到下一页   (否则 保留位置是当前页)  【注】Math.abs(x)里面的   X 是【正数】
							    									    									    									    		
							    	        tab2.style.left = `${postion.index * innerWidth *-1}px`;//1*375*-1.......
							    	        li3[postion.index].style.color= '#58BC58';//写在前面  ul到第几页  就给当天 li对应的 下标加颜色
							    	        postion.index ++;//【注】【重点】【重点】变量跟新  index  【解】变量跟新的作用:第一个滑动超过 绝对值 索引值变为2  第二次超过索引值变为3  。。。。。。(用于计算ul的定位)			
							       
							    	    }
							    		 
							    		else{
							    			tab2.style.left = `${(postion.index -1)*innerWidth *-1}px`;//0*375*-1.......
							    			li3[postion.index-1].style.color = '#58BC58';//给当前页的下标 添加下标颜色   【注】定位的下标 与 改变颜色的下标是一样的
							    		}
							           
							    	}
							    
						    }
						    
					     }      
					     if(postion.index  >  1 && postion.index < li2.length + 1){//第二种情况===========right	  【注】此时的index = 1  为了确保在第二张和第四次 才能往右滑动    				    				     	
							    if(x < 0){//计算公式:  起点位置 - 终点位置   = x;  如果 x < 0  说明滑动的方向是右边
							    
					                tab2.style.left = `${((postion.index - 1) * innerWidth + x) * -1}px`;//滑动是改变ul的定位
					     			if(_end){//手指松开时判读函数 是否为true  是就执行   否不执行
					     				    delite();//清空上一页下标颜色				                    			                  	
									    		if(Math.abs(x) >= postion.baseMoveX){// 判断:if 滑动的距离或者等于  移动的基础值  那么翻页到下一页   (否则 保留位置是当前页)  【注】Math.abs(x)里面的   X 是【负数】
									    		
									    	        tab2.style.left = `${(postion.index -2)* innerWidth *-1}px`;//【注】如:在第二张图片滑动时  ul的定位 0,0点   计算公式:(2-2)*375 *-1 = 0;
									    	        li3[postion.index -2].style.color = '#58BC58';//给相同索引值的下标添加颜色
									    	        postion.index --; //变量跟新
									    	    }
									    		else{
									    			tab2.style.left = `${(postion.index - 1)*innerWidth *-1}px`;//没有超过绝对值是  定位在当前位置
									    			li3[postion.index - 1].style.color= '#58BC58';//改变 颜色
									    		}
									  		
									}				
							    }					 				  					    	
						 }
						 if(y < 0){
						    	//to top
						    }
						 if(y >0 ){
						    	//to dottom
						  }			
			    }
	  
				
					
		 //点击事件
		click()
		function click(){
		   
		    //添加自定义类名  【用来做下标】
			 for(var i =0;i<tab3.children.length; i++){
				     	li3[i].dataset.idx = i;// 0 1 2 3 
				     	
			 }
									
			 tab3.addEventListener('touchstart',function(e){
		         	e = e || window.event;//事件 event属性
		  	        var target = e.target || e.srcElement;//兼容写法
			   
			     	if(target.className === 'li3'||target.parentNode.className ==='li3' ){//【注】为了确保 不管点击大子元素还是 li  都执行这段代码
						var idx = target.parentNode.dataset.idx;//只写了一种情况
						tab2.style.left = `${idx* innerWidth *-1}px`;//index = 0 / 1/ 2/ 3 
						
						 delite();//清空坐标颜色
												
				        li3[idx].style.color= '#58BC58';//给当天下标添加颜色			       			     	
					}			
			})																
		}

相关TAG标签
上一篇:padding margin 实现圣杯布局(代码教程)
下一篇:Windows平台下搭建SVN服务器的详细教程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站