zoukankan      html  css  js  c++  java
  • 仿qq会话列表滑动效果

    一、功能分析

    qq会话列表可以向左滑动,然后出现删除按钮

    二、知识点

    touch事件,css3的transform属性

    三、实现思路

    为每个列表项绑定touch事件,计算touch移动的距离,在touchmove事件中实现滑动,在touchend中判断touch移动的距离,根据距离大小判断删除按钮是否弹出

    四、js代码

     1 // 左滑列表项,删除按钮出现,右滑消失
     2 window.onload = function(){
     3     //获取rem的值
     4     sRem = document.querySelector('html').style.fontSize;
     5     sRem = parseInt(sRem);
     6     var items = document.querySelectorAll('.item');
     7 
     8     var deletes = document.querySelectorAll('.delete');
     9     //给每个Li绑定滑动事件
    10     var startX = 0,moveX = 0,distanceX = 0;
    11     
    12     var translateX = 0;
    13 
    14     var flag = 0;
    15 
    16     var target ;//记录当前滑动的列表项
    17     items.forEach(function(v,i){
    18 
    19         v.addEventListener('touchstart',function(e){
    20             startX = e.touches[0].clientX;
    21 
    22 
    23             //当操作下一行列表项的时候,把上一次操作元素恢复原来的位移
    24             if(target !== this && target){
    25                 target.style.transform = 'translateX(0rem)';
    26                 target.style.webkitTransform = 'translateX(0rem)';
    27             }
    28 
    29         })
    30         v.addEventListener('touchmove',function(e){
    31             moveX = e.touches[0].clientX;
    32             
    33             distanceX = (moveX - startX)/sRem;
    34                 //在起始位置只能向左移动
    35                 if(translateX == 0 && distanceX < 0){
    36 
    37                     transX(this,distanceX);
    38                     
    39 
    40                 }
    41                 //在最左端的时候,只能向右移动
    42                 if(translateX == -4 && distanceX > 0){
    43                     distanceX += -4;
    44                     transX(this,distanceX);
    45                     
    46                 }
    47             
    48                 
    49         })
    50         v.addEventListener('touchend',function(e){
    51             //点击删除按钮时,避免执行touch事件
    52             deletes.forEach(function(v,i){
    53                 if(v == e.target){
    54                     flag = 1;
    55                 }
    56             })
    57             if(flag){
    58                 flag = 0 ;
    59                 return;
    60             }
    61             //移动向左超过一半,就完全滑动到左边
    62             if(distanceX < -2 ){
    63                 v.style.transform = 'translateX (' + (-4) + 'rem)';
    64                 v.style.webkitTransform = 'translateX(' + (-4) + 'rem)';
    65                 translateX = -4;
    66                 
    67             }
    68             //移动向右超过一半,就完全滑动到起始位置
    69             if(distanceX >= -2){
    70                 v.style.transform = 'translateX (' + 0 + 'rem)';
    71                 v.style.webkitTransform = 'translateX(' + 0 + 'rem)';
    72                 translateX = 0;
    73             }
    74 
    75             target = this;
    76             startX = 0;
    77             moveX = 0 ;
    78             distanceX = 0 ;
    79         
    80         })
    81     })
    82 
    83     //列表项位移函数
    84     function transX(v,x){
    85     //限制向左滑动的最大距离    
    86                 if(x <= -4){
    87                     x = -4;
    88                     
    89                 }
    90     //限制向右滑动的最大距离
    91                 if(x >= 0){
    92                     x = 0;
    93                 }
    94 
    95                 v.style.transform = 'translateX (' + x + 'rem)';
    96                 v.style.webkitTransform = 'translateX(' + x + 'rem)';    
    97             
    98     }
    99 }
  • 相关阅读:
    陷阱~关于引用类型,请不要模棱两可!
    网络,请你远离人类吧!
    陷阱~SQL全表扫描与聚集索引扫描
    EF架构~对AutoMapper实体映射的扩展
    hdu 4557 非诚勿扰 vector的应用 原来vector 可以删除指定位置元素 不过消耗大
    POJ---2243 Knight Moves 使用A*算法的广度优先搜索
    Java贪吃蛇游戏
    【编程范式】 编译原理相关内存分配
    栅格数据空间分析之四基于栅格数据空间分析的选址
    ECLIPSE中反编译插件JAD的配置安装,轻松查看JAVA源代码
  • 原文地址:https://www.cnblogs.com/justinwxt/p/7121176.html
Copyright © 2011-2022 走看看