swipe方法

/**
 * @author zhousg
 * @Date 2016-02-04
 * @Method 滑动方法  针对一个大容器内部的容器做滑动封装
 * @param
 * args args.swipeDom 大容器对象
 * args.swipeType 滑动类型
 * args.swipeDistance 缓冲距离
 * 注意:子容器的高宽度是取的内容的高宽 所以padding的大小有影响
 */
if(!window.lcf){
    window.lcf = {};
}
lcf.iScroll = function(args){
    /*调用的时候没有初始化的话就是初始化一次*/
    if(!(this instanceof arguments.callee)) return new arguments.callee(args);
    this.init(args);
};
lcf.iScroll.prototype = {
    constructor:lcf.iScroll,
    init:function(args){
        /*局部变量来接受当前的this*/
        var that  = this;
        /*如果传入的对象是一个Dom对象就把他看作是我们的大容器盒子*/
        if(args.swipeDom && typeof  args.swipeDom == ‘object‘){
            that.parentDom = args.swipeDom;
        }
        /*如果不存在父容器就停止初始化*/
        if(!that.parentDom) return false;
        /*找到子容器*/
        that.childDom = that.parentDom.children&&that.parentDom.children[0]?that.parentDom.children[0]:‘‘;
        /*如果不存在子容器就停止初始化*/
        if(!that.childDom) return false;
        /*初始化传入的参数*/
        that.settings = {};
        /*默认类型  默认的Y轴滑动 如果不是y的话就是以x轴开始滑动*/
        that.settings.swipeType = args.swipeType?args.swipeType:‘y‘;
        /*默认的缓冲滑动距离*/
        that.settings.swipeDistance = args.swipeDistance>=0?args.swipeDistance:150;
        /*初始化滑动*/
        that._scroll();
    },
    /*对外开放的设置定位的方法*/
    setTranslate:function(translate){
        this.currPostion = translate;
        this._addTransition();
        this._changeTranslate(this.currPostion);
    },
    _addTransition:function(){
        this.childDom.style.transition = "all .2s ease";
        this.childDom.style.webkitTransition = "all .2s ease";/*兼容 老版本webkit内核浏览器*/
    },
    _removeTransition:function(){
        this.childDom.style.transition = "none";
        this.childDom.style.webkitTransition = "none";/*兼容 老版本webkit内核浏览器*/
    },
    _changeTranslate:function(translate){
        if(this.settings.swipeType == ‘y‘){
            this.childDom.style.transform = "translateY("+translate+"px)";
            this.childDom.style.webkitTransform = "translateY("+translate+"px)";
        }else{
            this.childDom.style.transform = "translateX("+translate+"px)";
            this.childDom.style.webkitTransform = "translateX("+translate+"px)";
        }
    },
    _scroll:function(){
        /*局部变量来接受当前的this*/
        var that = this;
        /*滑动的类型*/
        var type = that.settings.swipeType == ‘y‘?true:false;
        /*父容器的高度或宽度*/
        var parentHeight = type?that.parentDom.offsetHeight:that.parentDom.offsetWidth;
        /*子容器的高度或宽度*/
        var childHeight = type?that.childDom.offsetHeight:that.childDom.offsetWidth;

        /*子容器没有父容器大的时候*/
        if(childHeight < parentHeight){
            if(type){
                that.childDom.style.height = parentHeight + ‘px‘;
                childHeight = parentHeight;
            }else{
                that.childDom.style.width = parentHeight + ‘px‘;
                childHeight = parentHeight;
            }
        }

        /*缓冲距离*/
        var distance = that.settings.swipeDistance;
        /*区间*/
        /*左侧盒子定位的区间*/
        that.maxPostion = 0;
        that.minPostion = -(childHeight-parentHeight);
        /*设置滑动的当前位置*/
        that.currPostion = 0;
        that.startPostion = 0;
        that.endPostion = 0;
        that.movePostion = 0;
        /*1.滑动*/
        that.childDom.addEventListener(‘touchstart‘,function(e){
            /*初始的Y的坐标*/
            that.startPostion = type?e.touches[0].clientY: e.touches[0].clientX;
        },false);
        that.childDom.addEventListener(‘touchmove‘,function(e){
            e.preventDefault();
            /*不停的做滑动的时候记录的endY的值*/
            that.endPostion = type?e.touches[0].clientY: e.touches[0].clientX;
            that.movePostion = that.startPostion - that.endPostion;/*计算了移动的距离*/

            /*2.滑动区间*/
            /*就是滑动区间*/
            if((that.currPostion-that.movePostion)<(that.maxPostion+distance)
                &&
                (that.currPostion-that.movePostion)>(that.minPostion -distance)){
                that._removeTransition();
                that._changeTranslate(that.currPostion-that.movePostion);
            }
        },false);
        window.addEventListener(‘touchend‘,function(e){
            /*在限制滑动区间之后 重新计算当前定位*/
            /*判断是否在我们的合理定位区间内*/
            /*先向下滑动 */
            if((that.currPostion-that.movePostion) > that.maxPostion){
                that.currPostion = that.maxPostion;
                that._addTransition();
                that._changeTranslate(that.currPostion);
            }
            /*想上滑动的时候*/
            else if((that.currPostion-that.movePostion) < that.minPostion){
                that.currPostion = that.minPostion;
                that._addTransition();
                that._changeTranslate(that.currPostion);
            }
            /*正常的情况*/
            else{
                that.currPostion = that.currPostion-that.movePostion;
            }
            that._reset();
        },false);

    },
    _reset:function(){
        var that = this;
        that.startPostion = 0;
        that.endPostion = 0;
        that.movePostion = 0;
    }
};

  

时间: 2024-10-06 14:38:15

swipe方法的相关文章

Airtest中swipe方法兼容不同分辨率的解决方法

使用Airtest中swipe方法由于不同分辨率的手机上滑动的坐标位置不同,所以想要兼容所有的手机,仅仅靠固定坐标就会出现问题 想要兼容所有的手机,可以按照如下思路进行 1.首先获取手机的分辨率,可以使用Airtest中的poco模块的get_screen_size()方法 poco.get_screen_size() 此时获取到了手机的分辨率,可以看出屏幕宽等于900,长度等于1600 2.将屏幕的宽度和长度分别赋值为x和y,注意屏幕左上角的坐标为(0,0),所以左下角的坐标为(0,1600)

四、Appium-python-UI自动化之页面-上下滑动、左右滑动swipe方法操作

1.首先看app中怎么划分横纵坐标 2.swipe函数 def swipe(self, start_x, start_y, end_x, end_y, duration=None): """Swipe from one point to another point, for an optional duration. Args: start_x (int): x-coordinate at which to start start_y (int): y-coordinate

移动端的内容滑块js库 swipe.js

swipe.js 是一个轻量级的移动端内容滑块,类似于pc端的slide.js,用于实现轮播广告或其他内容滑动模块 ,支持移动端屏幕滑动手势操作.此库不依赖于任何其他的js库,可独立使用 使用swipe.js时只需将下载好的文件引用到页面,然后在页面中写好对应的结构 <div id="slider" class="swipe"> <div class="swipe-wrap"> <div></div>

bootstrap之Swipe

Swipe 我定义为滑动,但它字面的意思又不是,事件的形式类似于小时候拿着一块石头片,朝水面飞过去,假设你手法能够那么就是swipe走的路线,假设你手法不行,接触水面的时候就没再飞起来那就会被人嘲笑的. package io.appium.android.bootstrap.handler; import com.android.uiautomator.core.UiDevice; import com.android.uiautomator.core.UiObjectNotFoundExcep

滑动操作以及滑动方法封装

滑动解析 滑动主要分为:水平滑动.垂直滑动.任意方向滑动 滑动轨迹 在Appium中模拟用户滑动操作需要使用swipe方法,该方法定义如下: def swipe(self, start_x, start_y, end_x, end_y, duration=None): """Swipe from one point to another point, for an optional duration. 从一个点滑动到另一个点,duration是滑动时间 :Args: - st

swipe()滑动屏幕

屏幕页面滑动在APP自动化测试中属于一个比较常见也比较特殊的操作. 通过查看swipe()方法的源码可以知道它一共有5个参数,分别为: start_x:起点横坐标 start_y:起点纵坐标 end_x:终点横坐标 end_y:终点纵坐标 duration:滑动时间,单位毫秒 并且可以发现,它的本质其实是一个链式调用,从起点位置滑到终点位置,滑动时间为duration. 既然我们要使用,那肯定要给它传递坐标的参数, 那么起点坐标和终点坐标的位置怎么获得呢? 我们可以通过屏幕尺寸计算得到合适的坐标

Appium_swipe模拟上下左右滑动操作

测试的同学们在做app自动化测时,经常会用到查找元素.定位元素.发送数据.长按.点 击.上滑.下滑.左滑.右滑等操作.下面讲下用appium自带的swipe方法怎么实现上滑. 下滑.左滑.右滑. 前置条件:appium已开启:并且已链接上手机.           通过SDK自带的UIautomator来定位元素.           Python通过appium模块可以正常链接到手机   一.            打开uiautomator来熟悉X.Y坐标的概念 每个元素都有开始和结束坐标.

require、backbone等重构手机图片查看器

本文是对之前的部分补充,也是对最近学习require.backbone的一次实例化的实践,希望对正在学习理解中的同学们有帮助 前文请前往:制作手机使用的网页图片查看器 新手机图片查看器 网页部分 require引入是重点,指明了主函数所在文件路径 <!doctype html> <html lang="zh-cn"> <head> <title>webapp图片查看器</title> <meta charset=&quo

基于zepto的插件之移动端无缝向上滚动并上下触摸滑动

该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 公司的移动端项目是基于zepto的,有一个页面要求文字能够无缝地不停向上滚动,但查了网上的资料,大多都是基于jquery的,虽然稍作修改就可以用于移动端,但不能实现触摸上下翻滚.所以就去了zepto的官网查看其API,却发现如果要使用zepto的swipe()方法,需要引用其已经封装好的touch.js文件,我就赶紧引用了这个js文件,可在实际测试中,官网给出的touch.js文件