`

js -> JS 原生 滚动条 动画 效果

 
阅读更多

 

scroll_Left 和 scroll_Top

 

function scroll_Left(tar_x){ 
    var timer = setTimeout(function(){  
        var current_x = document.body.scrollLeft
  
        step = 40 
        if (tar_x>current_x){  
            var dist = Math.ceil((tar_x-current_x)/step)  
            var next_x = current_x+dist  
            if(next_x<tar_x){  
                window.scrollTo(next_x,0)     
                scroll_Left(tar_x)  
            }  
            else{  
                window.scrollTo(next_x,0)  
                //clearTimeout(timer)  
            }  
        }  
        else{ 
            var dist = Math.floor((tar_x-current_x)/step)  
            var next_x = current_x+dist  
            if(next_x>tar_x){  
                window.scrollTo(next_x,0)  
                scroll_Left(tar_x)   
            }  
            else{  
                window.scrollTo(next_x,0)  
                //clearInterval(timer)  
            }  
        }  
    },1)  

}
function scroll_Top(tar_y){ //tar_y 即滑动条顶端 距离页面最上面的距离  
    //console.log('oooooooo')  
    var timer = setTimeout(function(){  
        var current_y = document.body.scrollTop  
        //console.log(current_y)  
        step = 40 //步长系数 即剩余的距离除以40 每1ms 移动一段距离  
        if (tar_y>current_y){ //tar_y > current_y 即向下滚动  
            var dist = Math.ceil((tar_y-current_y)/step)  
            var next_y = current_y+dist  
            if(next_y<tar_y){  //向上滚动和向下滚动判定的区别 是这里!!  
                window.scrollTo(0,next_y)     
                scroll_Top(tar_y)  
                console.log('do down')  
            }  
            else{  
                window.scrollTo(0,tar_y)  
                //clearTimeout(timer)  
            }  
        }  
        else{ //tar_y < current_y 即向上滚动  
            var dist = Math.floor((tar_y-current_y)/step)  
            var next_y = current_y+dist  
            if(next_y>tar_y){  
                window.scrollTo(0,next_y)  
                scroll_Top(tar_y)  
                console.log('do up')  
            }  
            else{  
                window.scrollTo(0,tar_y)  
                //clearInterval(timer)  
            }  
        }  
    },1)  
}  

 

 

**结合 zepto 做的 手势左右 滑动 轮播 

index.html

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<meta name="viewport" content="initial-scale=1, width=device-width, maximum-scale=1, user-scalable=0"  />
	<meta name="apple-mobile-web-app-capable" content="yes" />
	<meta name='apple-touch-fullscreen' content='yes'/>
	<meta name="full-screen" content="yes"/>
	<script src="./zepto.min.js"></script>
	<script src="./g.js?23"></script>
</head>
<body>

<script language="javascript">
<!--
	;(function($){
		var winWidth = $(window).width();
		 var startX = 0;
		 var startLeft = 0;
		 //alert(winWidth)
		 $(document).on("touchstart",function(obj){
			 startX = obj.changedTouches["0"].clientX;
 			 startLeft = document.body.scrollLeft;
			 if(startLeft < winWidth){
				 startLeft = 0;
			 }else{
				 startLeft = winWidth;
			 }
		 });
		 $(document).on("touchend",function(obj){
	 
		 
			if(((obj.changedTouches["0"].clientX) - startX) > 100  ){
				scroll_Left_prt(0);
			}else if(startX - ((obj.changedTouches["0"].clientX)) > 100  ){ 
				scroll_Left_prt(winWidth);
			}else{
				scroll_Left_prt(startLeft);
			}
			 
		
		 });
	})(Zepto);  
 

//-->
</script>
<style type="text/css">
	*{margin:0px;padding:0px}
	table{background:red;}
	table td{width:10%;text-align:center}
</style>
<table width="200%" height="100%" id="tb" cellspacing="0" cellpadding="0" border="0">
	<tr style="width:100%">
		<td id="f">1</td>
		<td>2</td>
		<td>3</td>
		<td>4</td>
		<td>5</td>
		<td>6</td>
		<td>7</td>
		<td>8</td>
		<td>9</td>
		<td>10</td>		
	</tr>
</table>

	
	

</body>
</html>

 

 

g.js  -- 解决 连续两次操作时 遇到的冲突 。 在外面包括了一个 function 和 加了个全局变量 判断状态

var scrolll_stop = false;
function scroll_Left_prt(tar_x){	
	if(scrolll_stop == true){return;}
	scrolll_stop = true;
	scroll_Left(tar_x);
}

function scroll_Left(tar_x){ 
    var timer = setTimeout(function(){  
        var current_x = document.body.scrollLeft
  
        step = 10;//值越小,滚动越快
        if (tar_x>current_x){  
            var dist = Math.ceil((tar_x-current_x)/step)  
            var next_x = current_x+dist  
            if(next_x<tar_x){  
                window.scrollTo(next_x,0)     
                scroll_Left(tar_x)   				
            }  
            else{  
				scrolll_stop = false;
                window.scrollTo(next_x,0)  
                //clearTimeout(timer)  
            }  
        }  
        else{ 
            var dist = Math.floor((tar_x-current_x)/step)  
            var next_x = current_x+dist  
            if(next_x>tar_x){  
                window.scrollTo(next_x,0)  
                scroll_Left(tar_x)       
            }  
            else{  
				scrolll_stop = false;
                window.scrollTo(next_x,0)  
                //clearInterval(timer)  
            }  
        }  
    },1)  

}
 

 

分享到:
评论

相关推荐

    -web-js-toolkit:有一些常见的业务需求

    一些常见的前端业务需求实现 according -&gt; 手风琴导航 circle -&gt; 圆环以及进度条 css3Keyframes -&gt; css3动画 hitTest -&gt; 碰撞检测 jsonp -&gt; 原生js模拟百度搜索框 magnifer -&gt; 放大镜 ...scrollbar -&gt; 滚动条系列

    原生JS经典案例特效

    360度全景展示效果,back_评分,back_图片滚动播放,JS简易年历,slide上下滚动条,放大镜简单版,竖排导航,土豆右下角菜单悬浮效果,照片墙一多实例演示_files,back_瀑布流,back_购物车等等..........

    jquery动态滚动条加载效果

    主要使用了原生js的setInterval不断执行的代码 在固定时间段内,不断的让某一个数字自增以此达到不断变化(增加)的效果 使用方法: 1、将style.css样式引入到你的网页中 2、将body中的代码部分拷贝...

    原生js实现返回顶部缓冲效果

    通过定时器30毫秒执行一次滚动条上升,每次上升的高度为当前高度的80%,这样就达到了上升缓冲的动画效果。 判断当滚动条高度超过一屏时,按钮显示,默认隐藏 知识要点 scrollTop//获取滚动条高度 需要写兼容 ...

    原生JS实现 MUI导航栏透明渐变效果

    透明渐变导航是一种解决滚动条通顶的变通方案,相比双webview,具有更高的性能和更好的动画效果; 下面通过本文给大家分享基于原生JS实现 MUI导航栏透明渐变效果,具体内容详情如下所示: 首先声明:由于...

    Flash横条新闻滚动特效.rar

    Flash横条新闻滚动特效,新闻标题切换效果,点击左右两头的小三角按钮就可以上一条、下一条切换,原生的Flash动画效果切换,Flash Js结合完成,含Flash源文件,新闻标题内容存放于XML里,你可以用程序控制生成XML...

    原生JS利用transform实现banner的无限滚动示例代码

    通过requestAnimationFrame实现一次图片切换的动画。 这种方法也可以做到整个页面始终只有2个img标签,而不必把所有的img节点全部创建出来,要点是每次更换不可见img的src。 动画的实现 首先定义一

    artDialog_Demo

    7、 锁屏的时候改用js屏蔽页面滚动功能,取消原来CSS隐藏滚动条,防止页面偏移 8、 给确定按钮增加Ctrl + Enter快捷键,锁屏的时候支持tab与方向键切换按钮焦点 9、 锁屏的时候屏蔽了键盘操作刷新、Tab切换(只在...

    jQuery实现可兼容IE6的滚动监听功能

    其实这东西本打算用原生的javascript来写,但是原生的javascript取class与监听滚动条的滚动过于麻烦,因此上了jQuery,没关系,反正兼容IE6就行。 将实现如下的效果: 也就是在网页中有点常见的滚动监听。相应的...

    howdyjs:一个包含Javascript插件,Vue3组件,Vue3指令的工具库

    :sparkles:自定义滚动条插件 :sparkles:设置Dom可预期插件 :sparkles:动画模态框Vue3组件 :sparkles:移动端标签页Vue3组件 :sparkles:自定义快捷菜单Vue3组件 开始使用 安装 // 新版已进行分包 npm i -S @ ...

    超实用的jQuery代码段

    5.4 带滚动条的自动完成 5.5 Combobox风格的自动完成 5.6 读取XML数据的自动完成 5.7 多维数据的自动完成 第6章 jQuery实现拖放功能 6.1 基本拖放功能 6.2 基于事件的拖放 6.3 限制移动范围的拖放 6.4 延迟进行的...

    Web端的UI框架BlendUI.zip

    webapp缺少淡入淡出动画、转场动画、滑动动画,或者因此引起的不流畅,以及某些组件的弹力体验与原生有差距等。 浮动元素的处理。顶部、右侧、底部的固定位置的元素可能会有抖动,或者弹出菜单无法点按页面其他...

    JAVA上百实例源码以及开源项目源代码

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    JAVA上百实例源码以及开源项目

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

Global site tag (gtag.js) - Google Analytics