
DOM结构:
<View style={stylescheckContainer} ref='checkContainer' onLayout={({nativeEvent:e})=>thislayout(e)}>
</View>
对应js方法:
layout=(e)=>{
consolewarn(elayouty) ;
var UIManager = require('UIManager');
consolewarn(etarget);
UIManagermeasure(etarget, (x, y, width, height, left, top) => {
consolewarn('x:'+x)
consolewarn('y:'+y)
consolewarn('width:'+width)
consolewarn('height:'+height)
consolewarn('left:'+left)
consolewarn('top:'+top)
})
}
注意:View组件的onLayout(可以得到宽高和相对位置)配合UIManagermeasure(可以得到宽高和绝对位置)一起使用
附加知识点:
得到某一dom元素的节点值:
import {findNodeHandle} from 'react-native';
var nodeData = findNodeHandle(thisrefsname);
nodeData即为节点值
多端阅读《javascript教程》:
在PC/MAC上查看:下载w3cschool客户端,进入客户端后通过搜索当前教程手册的名称并下载,就可以查看当前离线教程文档。下载javascript教程离线版客户端
在手机APP上查看:请从各大安卓应用商店、苹果App Store搜索并下载w3cschool手机客户端,在App中搜索当前教程手册的名称查看。下载w3cschool手机App端
在手机上查看文档:>
手册简介:
JavaScript 是世界上最流行的脚本语言。 JavaScript 是属于 web 的语言,它适用于 PC、笔记本电脑、平板电脑和移动电话。 JavaScript 被设计为向 HTML 页面增加交互性。 许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有非常简单的语法。几乎每个人都有能力将小的 JavaScript 片段添加到网页中。
手册说明:
Javascript,从“最被误解的语言”,最后神奇地转变成为“最流行的语言”,证明它经受得起时间的考验。虽然单独来看,它的交互设计有些失败,但是加上Ajax的完美配合,javascript就成了一款轻便并且又实用的好语法。
如果您想要更高效、更系统地学会javascript,您最好采用边学边练(javascript微课)的学习模式。
如果您觉得javascript的学习难度较高,不易理解,建议您采用视频教程进行学习:javascript视频课程
接下来让我们静下心来,翻开这本关于Javascript的教程,你可以学习到JavaScript 代码规范、JavaScript 函数撰写、javascript 正则表达式、JavaScript 逻辑运算等基础内容,除此之外,本书还有进阶的Javascript高级教程,最好在熟读前面的基础知识之后,再考虑继续之后的教程。
高级教程当中包含的内容有很重要的JavaScript 对象介绍,JavaScript Window对象模型介绍,JavaScript 库以及JavaScript 实例等等,每一个章节都值得细细研读。
学完本教程之后,建议您进行javascript实战来巩固您学到的知识。
在雨课堂手机网页版中,将视频移动位置需要进行拖拽 *** 作。这是因为在网页中,视频通常是嵌入在页面中的元素之一,而这些元素都是基于HTML和CSS语言构建的,并且其位置和大小是由页面布局和样式表控制的。
因此,要移动视频的位置,需要通过改变视频所在元素的位置来实现。这可以通过在网页中使用JavaScript脚本来实现,具体方式是在脚本中获取视频所在元素的位置,然后通过 *** 作其CSS属性来改变其位置。在雨课堂手机网页版中,可以通过将手指按住视频并拖拽来触发此 *** 作。
需要注意的是,在实现视频拖拽功能时,开发者还需要考虑到一些其他的问题,例如拖拽的范围、拖拽时视频的尺寸和比例等等。同时,为了确保用户体验的流畅性,还需要优化代码和算法,以便在拖拽 *** 作中能够快速地响应用户的 *** 作。
css3之前,想要改变某个元素的位置,常用的方法是通过绝对定位改变其left或是top。而现在,由于css3新增加了transform属性,也可以通过改变translate来实现元素位置的变化。
制作改变某个元素位置的动画效果,尤其是在移动端上,如果使用left或者top,会出现明显的卡顿,在配置较低的手机上甚至会产生重影的现象。而改用translate,元素的运动效果则会变得相对流畅许多,且不会产生重影。
因为用left或top时,在每一帧内,cpu (中央处理器) 都需要计算该元素的其他样式,特别是相对需要复杂计算的盒阴影,渐变,圆角等样式,最后都需要将这些样式应用到该元素内。从这个角度看,如果对于较为老旧的移动设备进行相对复杂的动画,那么效果肯定不理想。
而通过调用translate,会启动硬件加速,即在GPU层 (图形处理器) 对该元素进行渲染。这样,CPU就会相对解放出来进行其他的计算,GPU对样式的计算相对较快,且保证较大的帧率。我们可以通过2d和3d的transform来启用GPU计算。
通过consolelog可以看到,transform的值是一个矩阵:
其中第5个数字和第6个数字分别对应translateX和translateY。
获取这个值的方法有三种,例如我们要获取slider-bar这个元素的translateX值:
方法1--解析矩阵:
WebKitCSSMatrix是专门用于 *** 作矩阵的函数。而m41就是translateX值,其中4代表第4列,1代表第一行。所以如果你还想获取translateY的值,就用m42。
方法2--正则:
方法3--字符串分割:
用typeof查看矩阵的类型,结果为字符串(string),所以也可以用字符串的方法split来分割。
当元素的display为none时,是获取不到transform的,设置如下样式
得到的结果为
所以在使用一些插件时,如果插件会将元素的display设置为none,那么就只能获取其他数值来替换transform的值。
难点:目标元素并不一定是absolute的,因此不能简单的通过top,left这种属性获取。元素可能包裹在n个父元素内,需要把这些因素都考虑进去。
解决思路:先获取该元素的offsetLeft和offsetTop,然后取它的offsetParent,并向外循环,累加这些left和top,最后得到的就是元素的绝对位置。
var obj = xxx; //这个元素就是目标元素,你可以用任何方式将它传入。
var w = objoffsetWidth, h = objoffsetHeight;
//从目标元素开始向外遍历,累加top和left值
for (var t = objoffsetTop, l = objoffsetLeft; obj = objoffsetParent;) {
t += objoffsetTop;
l += objoffsetLeft;
}
一、常见属性的用法
二、通过截图就可以看到元素的属性,那怎么元素定位呢?
三、问题
xpath 相对定位:如果相对定位中这个元素是有 id 的,这个 id 是唯一的,xpath 定位中优先通过 id 来定位。
class 属性对应的值是元素类型(是一个文本视图工具),Web 自动化中元素类型代表 Input、image、button 这样的标签名。
「resource-id 是唯一的,但是在 App 页面中并不绝对唯一。大部分情况下是唯一的,小部分情况下是重复的。」
如果一个页面中,元素的样式非常像,那很有可能它们的 id 就是一样的。UIAutomator Viewer 这个自带的工具是不能看出这个 id 是不是绝对唯一的。
「假设 resource-id 是唯一的,用相对定位这样定位:」
和 Web 自动化一样的玩法: 元素类型[@属性名称=属性值]
这里的 class 不是 Web 网页中的 class 属性了,这里代表它的标签名和元素类型(它是一个、一个文字、链接还是一个按钮呢?学会区分)。
如果 resource-id 不是唯一的,那么上面那个表达式是不够的,还会追加到上层的 Linearlayout 、 RelativeLayout 、包括祖先里面的一些层级都会放进来。
如果没有安装“升级 uiaumatorview-添加元素定位”就只能靠自己来判断。看下其它和它长得很像、元素的格式、风格、样式、页面布局都和它一模一样的元素,看下各位的 id 是否全都是一样的。
如果用了“升级 uiaumatorview-添加元素定位”,可以根据它的表达式自己来判断。
任何一个元素一定会有个 class,因为它是一个类别。Linearlayout 是一样的,布局也是安卓的控件,所以也会有控件名称、控件类型。
以下这些东西只有 2 个值,False 和 True。
以上这些属性在很多情况下是没有用的,但是在关键的时刻是很有用的。
例如想筛选当前页面中可以滚动的元素,通过 scrollable 等于 True 来过滤。
和 Web 自动化一样的,都是通过元素属性来定位,而且比 Web 自动化简单。
App 中只支持 5 种元素定位方式。虽然继承了 Web 自动化的元素定位,它之所以继承呢,是用到了其中的一个部分。
1、通过 id 定位元素:resrouce-id
2、通过 ClassName 定位:classname
3、通过 AccessibilityId 定位:content-desc
4、通过 AndroidUiAutomator 定位
5、通过 xpath 定位
1、通过 id 定位元素:resrouce-id
2、通过 ClassName 定位:classname
3、通过 xpath 定位
有 find_element_by_id() 就有 find_elements_by_id()
可以找到多个,它的返回值一样是列表。它的返回对象一样是 Web element 。
在它的下面有个 find_element_by_id() 。它的方法和 Web 自动化是一样的。
虽然这里代表的是元素类型,但它同样是 class 属性。
这里有点区别,但是方法名还是没有区别的。这个 class 的属性其实没有多大用处,一个页面中肯定很多属性的值和它很像的。所以这种用法不多。
既然是类别,可能有好多种,输入框也有好多种,它代表的是一种元素的类型。
「Web 自动化中 xpath 定位是最常用的,但是 App 自动化中 xpath 是最不想用的。原因是它的效率太低了。」
「如果全部只用 xpath 定位,问题会比较大,能不用 xpath 就不用 xpath」 。
AccessibilityId 是移动端特有的定位方式。
这是之前看到的类,这个类当中除了继承了 Web 自动化之外,对于安卓有 2 种,其中一种是 ACCESSIBILITY_ID 。
如果通过这种方式定位,对应的方式就是:
此处应输入 content-desc 的值,但是这里是空的,所以不能通过它定位。
但是 find_element_by_accessibility_id() 是另外一种 id,代表它在当前这个页面中也是很独特的。只要它有值,基本上可以通过它来定位。
用的是安卓 UiAutomator 这个自动化框架中提供的元素定位方式。所以想用这种元素定位方式,就必须了解它到底是怎么做的。
UiAutomator 自动化库是 Java 语言写的,所以它的参数是 Java 代码。UiAutomator 自动化库提供了 text。而 「元素有文本内容就可以通过文本内容来定位。」
这个里面的参数就必须是 UiAutomator 当中提供的定位方式。UiAutomator 是 Java 实现的,那么它的定位类型肯定也是 Java 实现的。
>
获取数组的元素位置:
public static void main(String[] args) {
int[] is = {28,7,15};
int i = 0;
// 需求:需要得到7在数组中的位置
for(int j=0;j<islength;j++ ){
if(is[j]==7){
i=j;
}
}
Systemoutprintln("7在数组下标"+i+"的位置");
// Systemoutprintln(is[i]);
}
以上就是关于react-native 获取某一元素的绝对位置(相对于屏幕左上角)全部的内容,包括:react-native 获取某一元素的绝对位置(相对于屏幕左上角)、js怎么获取数组中元素的位置、雨课堂手机网页版如何将视频移动位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)