YUI3学习(四)--- Node

YUI3 ‘node’ 模块为创建、操作和获取DOM节点对象(集合)提供了丰富的方法。该模块包含两个主要的对象 Node和NodeList。每一个Node实例表示一个底层的DOM节点;每一个NodeList实例表示一组DOM节点集合。相比YUI2,YUI3 的 Node在模块组织和方法上有了很大的精简,但同样提供丰富的功能;下面简单介绍下node模块Node和NodeList的主要方法和使用。完整功能列表可参考官方API文档。

 

     YUI3 Node API是基于标准的DOM API的,它提供一些便捷的属性和方法使常用的DOM操作变得更简单,实现代码也更简洁。熟悉标准的DOM API的开发者会发现使用Node实例非常熟悉。

 

     获取Node实例最简单的办法就是使用YUI实例的“one”方法。Y.one方法接收页面上的DOM元素作为参数,也接收“选择字符串”作为参数。如果使用“选择字符串”作为参数,会得到“选择字符串匹配的第一个元素”。

注意:默认不包含CSS3选择器支持,要得到CSS3选择器支持,你需要引入“selector-css3”模块。

了解css3 选择器

 

 获取DOM元素(集合)

示例

 

YUI({ filter: 'raw' }).use('node',function(Y) {
	//单实例获取 
	Y.one('#id');//根据id返回Node实例
	Y.one('tagName');//根据标签名(input、div)获取。返回第一个匹配的元素
	Y.one('.className');//根据class样式名获取.返回第一个匹配的元素。
	//获取多个实例
	Y.all('#id1,#id2');//返回所选id的元素集合
	Y.all('tagName');//返回标签为tagName的元素集合
	Y.all('.className');//返回所有标记该样式的元素集合
	Y.all('#id div');//获取id表示元素下所有的div元素
	//另,引入‘selector-css3’模块可以使用css3支持的样式选择。
});

 

此外test方法,可以判断是否有元素匹配。 var  bool = node.test('.class div');

 

使用Node对象

 

获取/设置Node属性

 

Node实例内的DOM节点的属性可以通过Y.Node实例的set和get方法访问。简单类型的属性(string、number、boolean)将直接针对底层的DOM节点操作。set和get方法返回操作的Node实例便于继续操作,不仅如此,大部分的Node方法都支持这种链式调用。

除了set和get方法外,Node还提供了setAttribute/getAttribute、setAttrs/getAttrs及removeAttribute,

 提供直接为底层DOM元素设置属性的功能;

set与setAttribute方法的比较

 

set         :设置Node定义的属性(见下面Node扩展属性介绍),及role属性给node(见下面ARIA语义属性支持);也可以设置该dom元素支持的属性给dom。

setAttribute:设置dom元素支持的属性,也可以设置自定义属性给dom。 

同理来区分get与getAttribute。

示例:

 

YUI({ filter: 'raw' }).use('node',function(Y) {
	var input1 = Y.one('#input1');
	//ARIA语义属性支持
	input1.set('role','inputname');	
	//Node.ATTRS属性,见 Node API 属性
	input1.set('offsetHeight',30); 
	//dom支持的属性。如 innerHTML等。
	input1.set('disabled',true);	
	input1.get('parentNode');	
	
	var input2 = Y.one('#input2');
	//dom支持属性
	input2.setAttribute('disabled',true);
	//自定义属性 
	input2.setAttribute('custAttr','v');  
	
});

 



获取/设置Node数据

  getData/setData/clearData方法:为node对象绑定自定义数据。注意数据关联的是node而非dom。

设置样式

相关方法:hasClass()、 addClass()、removeClass()、 replaceClass()、toggleClass()、

getStyle()、setStyle()、setStyles()

以上方法设置/获取对应dom节点的样式。使用可参考api参数说明。

位置相关方法

Node提供了一系列获取和设置dom位置相关的方法


getX()  getY()  getXY()    

setX()  setY()  setXY()     

swap(otherNode)   //与参数node元素交换位置。只改变dom结构中的位置;

swapXY(otherNode) //与参数node交换页面显示位置;dom树位置不变,只改变dom的top left及position属性;     

scrollIntoView()  

get('region');   //通过Node定义的region属性,可以获取该元素在页面中占据的区域。返回对象:

{width,height,top,left}。


节点操作及判断

Node支持丰富的dom节点操作方法,而且大部分方法与W3C dom操作方法命名一致。熟悉dom操作函数的话,了解起来也非常的简单。具体方法可参考Node api 方法列表。


Node静态方法

Y.Node.create(htmlString,[doc]) //根据html字符串创建Node对象;

Y.Node.getDOMNode(node) //返回node对象表示的底层dom对象;

Y.Node.addMethod(..)  //为Node.prototype添加方法。


 

Node扩展属性

Node的扩展属性定义在Node.ATTRS中,在YUI3中,ATTRS是定义在类上的可配置属性,会在类实例化时将ATTRS中定义的属性赋予实例对象;

在API中列出了一下扩展属性:

--只读--

children 

docHeight、docWidth

winHeight、 winWidth   

docScrollX、docScrollY      

 

region

viewportRegion 

--可读写--

scrollTop、scrollLeft

offsetHeight、offsetWidth

text     

关于属性的含义可参考api文档;这些属性可通过Node的get和set方法获取或设置。


ARIA语义属性支持


 

Node接口具有ARIA支持。当和Node内置的CSS选择器查询一起使用时,很容易应用、管理一个Node实例的 roles,states 和 properties 。

ARIA Roles,States 和 Properties提升了HTML的语义。让开发者能更精确地描述页面某板块的目的,或者提升DHTML widget对需要辅助工具用户的使用体验。

通过set方法应用ARIA Roles,States 和 Properties。比如,把id为toolbar的<div>的role设置为“toolbar”。

YUI().use('node', function(Y) {

    var node = Y.one('#toolbar').set('role', 'toolbar');

});

Node内置的CSS选择器查询支持、链式方法、在一个Node实例上设置多个属性的能力,让我们在创建有很多树状子目录的DHTML widget时,很容易地应用ARIA Roles,States 和 Properties。比如,要创建一个menubar widget,我们需要将“menubar”角色指定给代表menubar的根DOM元素,再把“menu”角色指定给代表“menu”(菜单)的根 DOM元素。然后,因为菜单项默认是隐藏的,每个菜单都需要指定aria-hidden状态。Node接口让我们用一行代码就完成上述操作。

YUI().use('node', function(Y) {

    Y.one('#rootmenu').set('role', 'menubar').all('.menu').setAttrs({ role: 'menu', 'aria-hidden': true });

});



 

事件注册

 

使用on方法为Node实例添加事件监听器。通过监听函数第一个参数传入的事件对象是一个event facade,这个event facade和Node API一样,将浏览器差异统一化,提供一个基于W3C标准的标准API,与DOM事件配合工作。原来返回DOM节点的事件对象属性将返回Y.Node实 例。 

示例如下:

 

YUI().use('node', function(Y) {
    Y.one('#demo').on('click', function(e) {
            e.preventDefault();
             alert('event: ' + e.type + ' target: ' + e.target.get('tagName'));
     });
});

 

 

关于事件的详细介绍请参考Event模块。

 

 



 

使用NodeList对象

 

Y.NodeList提供了和Node类似的操作多个节点的单一接口。NodeList API是Node API的简化版本,允许批量进行常见操作。Y.all方法是获取NodeList最简单的方法。

示例:设置所有div元素样式


Y.all('div').setStyle('border','1px solid red');

 

此外,NodeList支持集合相关的操作方法,如下:

concat(nodeList/Array)

each()

even()/odd()

filter()

indexOf()

isEmpty()

item(index)

pop()

push()

shift()

size()

slice()

splice()

some()


 





 

 

 

 

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值