当前位置: 首页 > news >正文

网站建设与栏目设置电子商务网页设计论文

网站建设与栏目设置,电子商务网页设计论文,成都网站seo诊断,企业信用等级查询系统一个简单的虚拟列表#xff0c;没有任何其他东西。 原理就是向上滚动时#xff0c;将下面离开屏幕的那一个item塞到上侧来#xff1a; 主代码仅有两个#xff1a;ScrollList对应的滚动容器#xff0c;ScrollListItem对应单项的预制体 当前支持两种#xff1a;竖向滚动、… 一个简单的虚拟列表没有任何其他东西。 原理就是向上滚动时将下面离开屏幕的那一个item塞到上侧来 主代码仅有两个ScrollList对应的滚动容器ScrollListItem对应单项的预制体 当前支持两种竖向滚动、横线滚动。不支持那种横竖排版的。有需要自己添加 使用案例https://github.com/EddyLwei/ccc3.8_VirtualList.git ScrollList /**横向排布拖动*/ export const SCROLL_HORIZONTAL: number 1; /**竖向排布拖动*/ export const SCROLL_VERTICAL: number 2;import { _decorator, Node, Prefab, instantiate, ScrollView, UITransform, Vec3, log } from cc; import { ScrollListItem } from ./ScrollListItem;const { ccclass, property } _decorator;ccclass(ScrollList) export class ScrollList extends ScrollView {/**item子节点预制体*/property({ type: Prefab, tooltip: item子节点预制体 })itemPrefab: Prefab null;/**单条记录高度*/private _itemSize: number;/**需要多少个记录组件 在可视范围内2条*/private _numItem: number 0;private _itemArr: ArrayNode [];/**开始端下标*/private _itemIndex: number 0;/**结束端下标*/private _dataIndex: number 0;/**数据源*/private _dataArr: any[];/**滚动方向*/private _direction: number 0;/**间隙 0开始边框1结束边框2间隙*/private _gapNum: number[];/**子节点刷新绑定事件或者使用item继承的模式*/public onItemRender: Function;start() {super.start();this.node.on(scrolling, this.scrollCheck, this);}onDestroy() {super.onDestroy();if (this.node) {this.node.off(scrolling, this.scrollCheck, this);}}/**设置数据* param dataArr : 数据源* param direction : 滚动方向默认上下* param gap : [开始边框距离结束边框距离每个之间空隙]*/public setDataList(dataArr: any[], direction: number SCROLL_VERTICAL, gap?: number[]) {this._dataArr dataArr;this._direction direction;this._gapNum gap;this.createItem();}/**获得数据后开始创建*/private createItem() {let _showSize this.node.getComponent(UITransform).height;//获得预制体的高度if (!this._itemSize) {let pNode instantiate(this.itemPrefab);if (this._direction SCROLL_HORIZONTAL) {this._itemSize pNode.getComponent(UITransform).contentSize.width;_showSize this.node.getComponent(UITransform).width;}else {this._itemSize pNode.getComponent(UITransform).contentSize.height;}pNode.destroy();// log(---_itemSize--, this._itemSize);}//可视范围对应可以创建多少个实体单例itemthis._numItem Math.floor(_showSize / this._itemSize) 2;log(_showSize, 初始化获得数量, this._numItem)if (this._dataArr.length this._numItem) {this._numItem this._dataArr.length;}this._itemArr.length 0;for (let index 0; index this._numItem; index) {let pNode instantiate(this.itemPrefab);pNode.parent this.content;this._itemArr.push(pNode);this.itemRender(pNode, index);}//设置容器大小let contentSize this._itemSize * this._dataArr.length;//前面距离边框if (this._gapNum this._gapNum[0]) {contentSize this._gapNum[0];}//后面距离边框if (this._gapNum this._gapNum[1]) {contentSize this._gapNum[1];}//间隙距离if (this._gapNum this._gapNum[2]) {contentSize this._gapNum[2] * (this._dataArr.length - 1);}if (this._direction SCROLL_HORIZONTAL) {this.content.getComponent(UITransform).width contentSize;}else {this.content.getComponent(UITransform).height contentSize;}this._itemIndex this._dataIndex this._itemArr.length - 1;log(初始化结束, this._dataIndex, this._itemArr.length)}private scrollCheck() {let nowPos this.getScrollOffset().y;let topPos (this._dataIndex 1 - this._numItem) * this._itemSize;//当前屏幕中靠近最开始的坐标//前面边框if (this._gapNum this._gapNum[0]) {topPos this._gapNum[0];}//间隙距离if (this._gapNum this._gapNum[2]) {topPos this._gapNum[2] * (this._dataIndex 1 - this._numItem);}// let topPos this.countPosByIndex(this._dataIndex 1 - this._numItem);let size this._itemSize;if (this._direction SCROLL_HORIZONTAL) {nowPos this.getScrollOffset().x;topPos -topPos;size -this._itemSize;}//判断向结束端滚动滚动点和初始点对比if ((this._direction SCROLL_VERTICAL nowPos size topPos) ||(this._direction SCROLL_HORIZONTAL nowPos size topPos)) {let newIndex this._dataIndex 1;// Log.log(this._dataIndex, -判断向结束端滚动 1 --将头部item转移到最后---, nowPos, topPos);if (newIndex this._dataArr.length) {return; //如果滚动到底部最后一条数据不再进行写入}this._dataIndex newIndex;let topItemIndex this._itemIndex 1;if (topItemIndex this._numItem) {topItemIndex 0;}let item this._itemArr[topItemIndex];if (item) {this.itemRender(item, newIndex);// Log.error(topItemIndex, 转移到最后, item.node.position);}this._itemIndex topItemIndex;}//判断向开始端滚动else if ((this._direction SCROLL_VERTICAL nowPos topPos) ||(this._direction SCROLL_HORIZONTAL nowPos topPos)) {let newIndex this._dataIndex 1 - this._numItem - 1;// Log.log(this._dataIndex, -判断向上滚动 2 -将最后item转移到头部----, newIndex);if (newIndex 0) {// Log.warn(如果滚动到第一条数据不再进行写入, newIndex)return; //如果滚动到第一条数据不再进行写入}this._dataIndex--;// Log.error(this._itemIndex, 将最后item转移到头部, this._dataIndex, newIndex, newIndex * -this._itemSize);let item this._itemArr[this._itemIndex];if (item) {this.itemRender(item, newIndex);// Log.error(this._itemIndex, 转移头部, item.node.position);}this._itemIndex--;if (this._itemIndex 0) {this._itemIndex this._numItem - 1;}}}/**刷新单项*/private itemRender(node: Node, newIndex: number) {//设置有全局得刷新事件if (this.onItemRender) {this.onItemRender(node, newIndex);}//没有全局使用继承的itemelse {const item node.getComponent(ScrollListItem)if (item) {item.onItemRender(this._dataArr[newIndex]);}}this.setPos(node, newIndex);}/**设置坐标*/private setPos(node: Node, index: number) {let pos this.countPosByIndex(index);if (this._direction SCROLL_HORIZONTAL) {node.setPosition(new Vec3(pos, 0));}else {node.setPosition(new Vec3(0, -pos));}}/**根据下标计算坐标*/private countPosByIndex(index: number): number {let pos (1 / 2 index) * this._itemSize;//前面距离边框if (this._gapNum this._gapNum[0]) {pos this._gapNum[0];}//间隙距离if (this._gapNum this._gapNum[2]) {pos this._gapNum[2] * index;}return pos;}}ScrollListItem其实仅用一个接口的作用 import { _decorator, Component, } from cc;const { ccclass, property } _decorator;ccclass(ScrollListItem) export class ScrollListItem extends Component {/**滚动列表数据变更*/onItemRender(data, ...param: any[]) { }}使用方式很简单 import { _decorator, Component, Node } from cc; import { SCROLL_HORIZONTAL, SCROLL_VERTICAL, ScrollList } from ./ScrollList; const { ccclass, property } _decorator;ccclass(TestScene) export class TestScene extends Component {property({ type: ScrollList, tooltip: 竖行滚动容器 })private vScroll: ScrollList;property({ type: ScrollList, tooltip: 横向滚动容器 })private hScroll: ScrollList;start() {const dataArr [];for (let index 0; index 50; index) {dataArr.push(index)}this.hScroll.setDataList(dataArr, SCROLL_HORIZONTAL, [50, 50, 20]);this.vScroll.setDataList(dataArr, SCROLL_VERTICAL, [50, 50, 20]);}}组件的设置注意
http://www.w-s-a.com/news/777137/

相关文章:

  • wordpress 导航网站主题画流程图的网站
  • 皮卡剧网站怎样做排名网
  • 网站开发 兼职哪个网站是做安全教育
  • 商品展示类网站怎么用群晖nas做网站
  • 长腿蜘蛛wordpresssem优化推广
  • 中国铁路建设监理协会官方网站深圳福田区怎么样
  • 互联网网站开发发展wordpress文章自定义栏目
  • 众筹网站平台建设工信部网站备案系统
  • 网站301重定向代码wordpress 加子目录
  • 淄博网站制作优化推广asp做学生信息网站
  • 海口招商建设有限公司网站淮安哪有专业做网站的公司
  • 喀什哪有做网站的国内正规seo网络推广
  • 网站设计初步规划公司网页打不开是什么原因
  • 深圳企业网站建设推广服务php做的商城网站设计论文
  • 韩雪冬网站手机网站开发 宽度
  • 奉贤专业做网站新手怎么做企业网站
  • 做网站用哪几个端口 比较好手机号网站源码
  • 手机免费代理ip网站那个旅游网站做攻略最好
  • 西安做网站找哪家公司好苏州专业网站建设开发
  • dedecms如何做网站网站设计实施方案
  • 网站建设合约品牌设计有哪些
  • 织梦企业门户网站宝塔搭建wordpress网站
  • 网站为什么没有排名了11月将现新冠感染高峰
  • 网站开发维护专员岗位职责辽阳企业网站建设
  • 做外国订单有什么网站网站设计论文提纲
  • 商城网站建设报价方案导师让做网站
  • 清远市企业网站seo联系方式动易官方网站
  • 手机上怎么做能打开的网站一级域名和二级域名跨域
  • 网站首页效果图wordpress 在线教育
  • 电商网站开发团队广西桂林商贸旅游技工学校