H5仿抖音上下切换翻页动态加载效果

只有五个页面实现动态加载翻页效果,网上查到都是用Swiper 不停的插入元素,导致页面内容越来越多致卡顿。这里就只用五个页面来轮翻显示,实现无限加载的效果。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,target-densitydpi=high-dpi,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <title>slider</title>
<style>
*{
    padding:0;
    margin:0;
}
html ,
body ,
#slider {
    height:100%;
    overflow: hidden;
}
.s-list{
    height:1000%;
    /*-webkit-transition:.3s;*/
    -webkit-transform:translate3d(0px,0px,0px);
}
.s-list>li{
    height:10%;
}
.s-list>li:nth-child(1){background:#00be9c;}
.s-list>li:nth-child(2){background:#50d78a;}
.s-list>li:nth-child(3){background:#2c97df;}
.s-list>li:nth-child(4){background:#9c56b8;}
.s-list>li:nth-child(5){background:#C66;}
</style>
</head>
<body>
      
  
  
<section id="slider">
    <ul class="s-list">
        <li id="movie_0">第一屏</li>
        <li id="movie_1">第二屏</li>
        <li id="movie_2">第三屏</li>
        <li id="movie_3">第四屏</li>
        <li id="movie_4">第五屏</li>
    </ul>
</section>
  
  
  
<script>
var Adata=new Array();
var page=-1;//加载数据页码 这里是从0开始
var allnums=6;//数据总页数
var Tops=false;//最顶端 第一个 不可拉

//拨拉控制
function slider( id ){
	//获取所要的 DOM 元素
	var oSlider = document.getElementById('slider');
	var oUl = oSlider.getElementsByTagName('ul')[0];
	var aLi = oUl.getElementsByTagName('li');
	var winHeight = document.body.clientHeight;
	var startY , offsetY , num = 1 , addNum = 0 ;
	
	//获取百分比高度
	oUl.style.height = 100 * aLi.length +'%';
	for( var i = 0 , len = aLi.length ; i < len ; i++  ){
		aLi[i].style.height = 100 /  aLi.length +'%';
	}
	oUl.style['-webkit-transition']='.3s';
	oUl.style['-webkit-transform'] = 'translate3d(0px,'+ -winHeight +'px,0px)';

	//开始
	var sliderStart = function( event ){
		this.startY = event.touches[0].pageY;
	}


	//移动
	var sliderMove = function( event ){
		//单手操作才执行
		if ( event.targetTouches.length == 1 ) {
			event.preventDefault();                    
			//获取移动的距离
			this.offsetY = event.targetTouches[0].pageY - this.startY ;

			var addNum = this.offsetY + parseInt(window.getComputedStyle( oUl  , null)['-webkit-transform'].replace(/[a-z()]/g , '').split(',')[5]);
			
			//防止跨屏
			if ( this.offsetY > 0 ) {
				if ( addNum > -winHeight * (num - 1) ) {
					addNum = -winHeight * (num - 1);
				}
			}else{
				if ( addNum < -winHeight * (num + 1) ) {
					addNum = -winHeight * (num + 1);
				}
			}
			oUl.style['-webkit-transition']='.3s';
			oUl.style['-webkit-transform'] = 'translate3d(0px,'+ addNum +'px,0px)';
		}
	}


	//结束
	var sliderEnd = function(){
		var Bend=false,Tend=false;
		oUl.style['-webkit-transition']='.3s';
		Tops=false;
		//负数为往上,正数为往下
		if ( this.offsetY > 0 ) {
			if(page>0){
				if ( num > 0 ) {
					num--;
					if(num== 0){Tend=true;}
				}else{
					num = 0;
					Tops=true;
				}
			}
			num =Loadmovie(num,true);
		}else if ( this.offsetY < 0 ) {
			 if(page<allnums){
				if ( num < aLi.length - 1 ) {
					num++;
					if(num== aLi.length - 1){Bend=true;}
				}else{
					num = aLi.length -1;
				}
			 }
			num =Loadmovie(num,false);
		}
        //清空防止点击切换       
		this.offsetY = 0;
		//真实的切换
		oUl.style['-webkit-transform'] = 'translate3d(0px,'+ -num*winHeight +'px,0px)';
		//console.log(num*winHeight);
		if(Bend){
			num = 1;
			setTimeout(RStart,300);
		}
		if(Tend){
			num = aLi.length -2;
			setTimeout(RStart,300);
		}

		//oUl.style['-webkit-transform'] = 'translate(0px,'+ -num*winHeight +'px)';

		//让累加数值为当前页面切换到的数值
		addNum = -num*winHeight;
	}
	var RStart = function(){
		oUl.style['-webkit-transition']='0s';
		oUl.style['-webkit-transform'] = 'translate(0px,'+ -(num)*winHeight +'px)';
		showmovie(num);
	}

	//让最顶层的 DIV 处理事件,然而 ul 根据,最顶层的 DIV 操作来移动
	oSlider.addEventListener('touchstart' , sliderStart);
	oSlider.addEventListener('touchmove' , sliderMove);
	oSlider.addEventListener('touchend' , sliderEnd);
}

//测试数据集 注意如果第一组只有两个数据时
Adata[0]={"errors":"0","items":[{"id":"1","title":"0","url":"0"},{"id":"2","title":"链接一","url":"A"},{"id":"3","title":"链接二","url":"B"}]};
Adata[1]={"errors":"0","items":[{"id":"2","title":"链接一","url":"B"},{"id":"3","title":"链接二","url":"C"},{"id":"4","title":"链接三","url":"D"}]};
Adata[2]={"errors":"0","items":[{"id":"2","title":"链接二","url":"B"},{"id":"3","title":"链接三","url":"C"},{"id":"4","title":"链接四","url":"D"}]};
Adata[3]={"errors":"0","items":[{"id":"3","title":"链接三","url":"C"},{"id":"4","title":"链接四","url":"D"},{"id":"5","title":"链接五","url":"E"}]};
Adata[4]={"errors":"0","items":[{"id":"4","title":"链接四","url":"D"},{"id":"5","title":"链接五","url":"E"},{"id":"6","title":"链接六","url":"F"}]};
Adata[5]={"errors":"0","items":[{"id":"5","title":"链接五","url":"E"},{"id":"6","title":"链接六","url":"F"},{"id":"7","title":"链接七","url":"G"}]};
Adata[6]={"errors":"0","items":[{"id":"6","title":"链接六","url":"F"},{"id":"7","title":"链接七","url":"G"},{"id":"7","title":"链接七","url":"G"}]};
allnums=Adata.length;


//加载数据 当前显示窗口序号,true下划,false上划
function Loadmovie(num,updown){
	if(Tops){return num;}
	if(updown){
		page--;
		if(page<0){page=0;}
	}else{
		page++;
		if(page>=allnums){page=allnums;return num;}
	}
	
	showmovie(num);
	return num;
}
function showmovie(num){
	if(page>=allnums){page=allnums-1;}
	Mdata=Adata[page].items;
	if(num==0){
		document.getElementById('movie_0').innerHTML='第一屏'+Mdata[0].id+':'+Mdata[0].title+':'+Mdata[0].url;
		document.getElementById('movie_3').innerHTML='第四屏'+Mdata[0].id+':'+Mdata[0].title+':'+Mdata[0].url;
		if(Mdata.length<2){return num--;}
		document.getElementById('movie_1').innerHTML='第二屏'+Mdata[1].id+':'+Mdata[1].title+':'+Mdata[1].url;
		if(Mdata.length==2){return num--;}
		document.getElementById('movie_2').innerHTML='第三屏'+Mdata[2].id+':'+Mdata[2].title+':'+Mdata[2].url;
		document.getElementById('movie_3').innerHTML='第四屏'+Mdata[2].id+':'+Mdata[2].title+':'+Mdata[2].url;
	}else if(num==1){
		document.getElementById('movie_0').innerHTML='第一屏'+Mdata[0].id+':'+Mdata[0].title+':'+Mdata[0].url;
		document.getElementById('movie_3').innerHTML='第四屏'+Mdata[0].id+':'+Mdata[0].title+':'+Mdata[0].url;
		if(Mdata.length==1){return num--;}
		document.getElementById('movie_1').innerHTML='第二屏'+Mdata[1].id+':'+Mdata[1].title+':'+Mdata[1].url;
		if(Mdata.length==2){return num--;}
		document.getElementById('movie_2').innerHTML='第三屏'+Mdata[2].id+':'+Mdata[2].title+':'+Mdata[2].url;
		document.getElementById('movie_3').innerHTML='第四屏'+Mdata[2].id+':'+Mdata[2].title+':'+Mdata[2].url;
	}else if(num==2){
		document.getElementById('movie_1').innerHTML='第二屏'+Mdata[0].id+':'+Mdata[0].title+':'+Mdata[0].url;
		if(Mdata.length==1){return num--;}
		document.getElementById('movie_2').innerHTML='第三屏'+Mdata[1].id+':'+Mdata[1].title+':'+Mdata[1].url;
		if(Mdata.length==2){return num--;}
		document.getElementById('movie_3').innerHTML='第四屏'+Mdata[2].id+':'+Mdata[2].title+':'+Mdata[2].url;
		document.getElementById('movie_4').innerHTML='第五屏'+Mdata[2].id+':'+Mdata[2].title+':'+Mdata[2].url;
	}else if(num==3){
		document.getElementById('movie_2').innerHTML='第三屏'+Mdata[0].id+':'+Mdata[0].title+':'+Mdata[0].url;
		if(Mdata.length==1){return num--;}
		document.getElementById('movie_3').innerHTML='第四屏'+Mdata[1].id+':'+Mdata[1].title+':'+Mdata[1].url;
		if(Mdata.length>2){
			document.getElementById('movie_4').innerHTML='第五屏'+Mdata[2].id+':'+Mdata[2].title+':'+Mdata[2].url;
			document.getElementById('movie_1').innerHTML='第二屏'+Mdata[2].id+':'+Mdata[2].title+':'+Mdata[2].url;
		}
	}
}
slider('slider');
Loadmovie(0,false);//加载初始数据
</script>
</body>
</html>

数据是每次调用当前数据和前一条加后一条一共三条信息,不够三条的要补齐。有一个BUG,最后一条会重复,有心的朋友可以自行研究找出解决方案。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
H5仿抖音上下滑动切换视频是一种常见的实现方式,下面我来简要介绍一下。 首先,我们需要一个基本的HTML结构来放置视频元素和操作按钮。可以使用div元素作为视频容器,并添加一个id或class用于样式控制。在div中,我们可以嵌入视频标签,如video或iframe,具体可根据实际需求选择适合的标签。 接下来,我们需要通过CSS设置视频容器的样式,使其具有合适的大小和位置。可以使用position、width、height等属性来控制视频容器的布局,以适应不同的手机或屏幕尺寸。 然后,在JavaScript中,我们需要监听触摸事件来实现上下滑动切换视频的功能。可以通过获取触摸的起始点和结束点的坐标,然后计算它们之间的距离和方向,来判断用户是否进行了上下滑动操作。 当用户上滑时,我们可以将当前视频的索引减一,并通过改变视频容器中视频的src属性来切换到上一个视频。类似地,当用户下滑时,我们可以将当前视频的索引加一,并切换到下一个视频。 为了提高用户体验,我们可以在每次切换视频时添加一些动画效果,如淡入淡出效果滑动效果。这可以通过CSS的transition属性和JavaScript的classList.add()和classList.remove()方法来实现。 除了上下滑动切换视频,我们还可以添加一些其他的功能,如自动播放、点赞、评论等。可以根据需求在HTMLCSSJavaScript中添加相应的代码来实现。 总的来说,通过合适的HTMLCSSJavaScript代码,我们可以很容易地实现H5仿抖音上下滑动切换视频的功能。这样用户就可以通过滑动屏幕来流畅地浏览不同的视频内容了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值