手机滑动效果探索

这几天一直在跟touch事件打交道,各种摸索,结合css3做了一例类似弹簧式的滑动效果。手指滑动时,通过touches数组的target捕捉元素,同时当前元素前面元素进行缩放,该元素及index大于该元素的元素进行translate,

这样会有一种重叠的效果,当手指释放时,通过animate使整体滑动,并将元素状态恢复到最初。

手机滑动效果探索手机滑动效果探索

js代码如下图:

 1 $(function(){

 2   var startX,startY,endX,endY,ChangeX,ChangeY,target,scroll,index;

 3   var initY=0,result=0

 4   document.getElementById("playContentContiner").addEventListener("touchstart",touchStart,false)

 5   document.getElementById("playContentContiner").addEventListener("touchmove",touchMove,false)

 6   document.getElementById("playContentContiner").addEventListener("touchend",touchEnd,false)

 7   function touchStart(event){

 8      //event.preventDefault();   

 9      var touch=event.touches[0];

10      startX=touch.pageX;

11      startY=touch.pageY;    

12      initY=result 

13      scroll=$(window).scrollTop()

14   }

15   function touchMove(event){

16             

17      var touchS=event.touches[0]; 

18      target=event.touches[0].target      

19      endX=touchS.pageX;

20      endY=touchS.pageY;

21      ChangeX=endX-startX

22      changeY=endY-startY;     

23      index=$(target).parents("li").index()

24      translate = changeY * 0.8;     

25      //设定缩放参数    

26      // $("#data").text("index="+index)

27      scale = Math.max((1-Math.abs(changeY/312)),0.95)*100;  //设定缩放比例,跟滑动距离相关,如果设定固定值,体验会很差

28      var offset=$("#playContentContiner").children().eq(index-1).offset().top    

29      if(changeY<0){//向上滑动

30          if(index>1){//第一个没有动画

31            if(Math.abs(result)<250){    //设定缓动,手指滑动距离越大,元素滑动越慢,并设定最大滑动距离

32               event.preventDefault();

33               if(Math.abs(changeY)<100){

34                  result=(changeY+initY)/2                        

35               }else if(Math.abs(changeY)>=100&&changeY<200){

36                   result=(changeY+initY)/4                                  

37               }else if(Math.abs(changeY)>=200&&changeY<250){

38                   result=(changeY+initY)/6                                     

39               }else{

40                   return false

41               }    

42               

43               $("#playContentContiner li:lt("+(index-1)+")").css({"width":scale+"%","margin":"0px auto"})//目标元素前面的元素缩放

44               //目标元素后面元素位移

45              // alert($("#playContentContiner div:lt("+index+")").length)

46               $("#playContentContiner li:gt("+(index-2)+")").css({"z-index":"10","-webkit-transform":"translate3d(0," + (result) + "px,0)"})

47               $("#playContentContiner").children().eq(index).addClass("Upshadow")

48             }else{

49               return false

50             }

51          }           

52      }else{//向下滑动

53         if(index<$("#playContentContiner").children().length){

54              if(Math.abs(result)<250){    

55                 event.preventDefault();

56                 if(Math.abs(changeY)<100){

57                    result=(changeY+initY)/2                         

58                 }else if(Math.abs(changeY)>=100&&changeY<200){

59                     result=(changeY+initY)/4                                

60                 }else if(Math.abs(changeY)>=200&&changeY<250){

61                     result=(changeY+initY)/6                                    

62                 }else{

63                     return false

64                 }

65                          

66                 $("#playContentContiner li:gt("+(index-1)+")").css({"width":scale+"%","margin":"0px auto","z-index":"0"})

67                 $("#playContentContiner li:lt("+index+")").css({"z-index":"10","-webkit-transform":"translate3d(0," + (translate) + "px,0)"})

68                 $("#playContentContiner").children().eq(index).addClass("Downshadow")

69              }else{

70                  return false

71              }

72         }

73      }        

74   }

75   function touchEnd(event){

76      //event.preventDefault(); 

77      if(changeY<0){

78          $('body').animate({scrollTop:-changeY+$('body').scrollTop()},500);    

79         $("#playContentContiner li:lt("+index+")").css({"width":"100%","z-index":"0"})    

80         

81         $("#playContentContiner li:gt("+(index-2)+")").css({"-webkit-transform":"translate3d(0,0,0)"})

82         

83         $("#playContentContiner").children().eq(index).removeClass("Upshadow")

84         result=0             

85      }else{

86          $('body').animate({scrollTop:-changeY+$('body').scrollTop()},500);    

87         $("#playContentContiner li:gt("+(index-1)+")").css({"width":"100%","z-index":"0"})

88         $("#playContentContiner li:lt("+(index+1)+")").css({"z-index":"10","-webkit-transform":"translate3d(0,0,0)"})

89         $("#playContentContiner").children().eq(index).removeClass("Downshadow")

90              

91      }    

92   }

93 })

 

你可能感兴趣的:(手机)