精华内容
下载资源
问答
  • 当前是指现在吗
    千次阅读
    2021-02-25 19:44:07

    1。 reload

    reload 方法,该方法强迫浏览器刷新当前页面。

    语法:location.reload([bForceGet])

    参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页。true, 则以 GET 方式,从服务端取最新的页面, 相当于客户端点击 F5("刷新")

    reload() 方法用于重新加载当前文档。

    如果该方法没有规定参数,或者参数是 false,它就会用 HTTP 头 If-Modified-Since 来检测服务器上的文档是否已改变。如果文档已改变,reload() 会再次下载该文档。如果文档未改变,则该方法将从缓存中装载文档。这与用户单击浏览器的刷新按钮的效果是完全一样的。

    2.

    2,replace 方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,你不能通过“前进”和“后退”来访问已经被替换的URL。

    语法: location.replace(URL)

    通常使用: location.reload() 或者是 history.go(0) 来做。

    此方法类似客户端点F5刷新页面,所以页面method="post"时,会出现"网页过期"的提示。

    因为Session的安全保护机制。

    当调用 location.reload() 方法时, aspx页面此时在服务端内存里已经存在, 因此必定是 IsPostback 的。

    如果有这种应用: 需要重新加载该页面,也就是说期望页面能够在服务端重新被创建,期望是 Not IsPostback 的。

    这里,location.replace() 就可以完成此任务。被replace的页面每次都在服务端重新生成。

    代码: location.replace(location.href);

    返回并刷新页面:

    location.replace(document.referrer);

    document.referrer //前一个页面的URL

    不要用 history.go(-1),或 history.back();来返回并刷新页面,这两种方法不会刷新页面。

    附:

    Javascript刷新页面的几种方法:

    复制代码 代码如下:

    1,history.go(0)

    2,location.reload()

    3,location=location

    4,location.assign(location)

    5,document.execCommand('Refresh')

    6,window.navigate(location)

    7,location.replace(location)

    8,document.URL=location.href

    自动刷新页面的方法:

    1,页面自动刷新:把如下代码加入

    区域中

    复制代码 代码如下:

    其中20指每隔20秒刷新一次页面.

    2,页面自动跳转:把如下代码加入

    区域中

    复制代码 代码如下:

    其中20指隔20秒后跳转到http://www.jb51.net页面

    3,页面自动刷新js版

    复制代码 代码如下:

    function myrefresh()

    {

    window.location.reload();

    }

    setTimeout('myrefresh()',1000); //指定1秒刷新一次

    4,JS刷新框架的脚本语句

    复制代码 代码如下:

    //刷新包含该框架的页面用

    parent.location.reload();

    //子窗口刷新父窗口

    self.opener.location.reload();

    ( 或 刷新   )

    //刷新另一个框架的页面用

    parent.另一FrameID.location.reload();

    如果想关闭窗口时刷新或想开窗时刷新,在

    中调用以下语句即可。

    复制代码 代码如下:

    window.opener.document.location.reload()

    一、先来看一个简单的例子:

    下面以三个页面分别命名为frame.html、top.html、bottom.html为例来具体说明如何做。

    frame.html 由上(top.html)下(bottom.html)两个页面组成,代码如下:

    复制代码 代码如下:

    frame

    现在假设top.html (即上面的页面) 有七个button来实现对bottom.html (即下面的页面) 的刷新,可以用以下七种语句,哪个好用自己看着办了。

    top.html 页面的代码如下:

    复制代码 代码如下:

    top.html

    下面是bottom.html页面源代码,为了证明下方页面的确被刷新了,在装载完页面弹出一个对话框。

    复制代码 代码如下:

    bottom.html

    This is the content in bottom.html.

    解释一下:

    复制代码 代码如下:

    1.window指代的是当前页面,例如对于此例它指的是top.html页面。

    2.parent指的是当前页面的父页面,也就是包含它的框架页面。例如对于此例它指的是framedemo.html。

    3.frames是window对象,是一个数组。代表着该框架内所有子页面。

    4.item是方法。返回数组里面的元素。

    5.如果子页面也是个框架页面,里面还是其它的子页面,那么上面的有些方法可能不行。

    附:

    Javascript刷新页面的几种方法:

    1 history.go(0)

    2 location.reload()

    3 location=location

    4 location.assign(location)

    5 document.execCommand('Refresh')

    6 window.navigate(location)

    7 location.replace(location)

    8 document.URL=location.href

    二、自动刷新页面

    1.页面自动刷新:把如下代码加入

    区域中

    其中20指每隔20秒刷新一次页面.

    2.页面自动跳转:把如下代码加入

    区域中

    其中20指隔20秒后跳转到http://www.jb51.net页面

    3.页面自动刷新js版

    三、java在写Servler,Action等程序时,要操作返回页面的话(如谈出了窗口,操作完成以后,关闭当前页面,刷新父页面)

    复制代码 代码如下:

    1 PrintWriter out = response.getWriter();

    2 out.write("

    3 子窗口刷新父窗口

    4 out.write("self.opener.location.reload();");

    5 //关闭窗口

    6 out.write("window.opener=null;");

    7 out.write("window.close();");

    8 out.write("");

    四、JS刷新框架的脚本语句

    1.如何刷新包含该框架的页面用

    复制代码 代码如下:

    parent.location.reload();

    2.子窗口刷新父窗口

    复制代码 代码如下:

    self.opener.location.reload();

    3.如何刷新另一个框架的页面用 (上面的实例以说明了)

    复制代码 代码如下:

    语句1. window.parent.frames[1].location.reload();

    语句2. window.parent.frames.bottom.location.reload();

    语句3. window.parent.frames["bottom"].location.reload();

    语句4. window.parent.frames.item(1).location.reload();

    语句5. window.parent.frames.item('bottom').location.reload();

    语句6. window.parent.bottom.location.reload();

    语句7. window.parent['bottom'].location.reload();

    4.如果想关闭窗口时刷新或者想开窗时刷新的话,在

    中调用以下语句即可。

    开窗时刷新

    关闭时刷新

    复制代码 代码如下:

    window.opener.document.location.reload()

    更多相关内容
  • 答案查看答案解析:【解析题】当前,应用计算机解决实际问题的能力主要体现为能够熟练使用OFFICE和网页制作工具操作计算机。【解析题】现在许多智能手机都具有触摸屏,它兼有键盘和鼠标器的功能,可作为计算机系统的...

    答案

    查看答案

    解析:

    【解析题】当前,应用计算机解决实际问题的能力主要体现为能够熟练使用OFFICE和网页制作工具操作计算机。

    【解析题】现在许多智能手机都具有触摸屏,它兼有键盘和鼠标器的功能,可作为计算机系统的输入设备。

    【解析题】在机器学习的背景上,人工智能区别于传统计算机的地方就在于人工智能能自主进行(),来揭示数据的内在价值

    【解析题】计算机网络

    【解析题】计算机启动后1短报警,请问是以下哪种情况 ( )。

    【解析题】一台计算机远程连接到另一台计算机上,并可以运行远程计算机上的各种程序,这种服务称为Telnet或远程登录。

    【解析题】在计算机网络中,通常把提供并管理共享资源的计算机称为 。

    【解析题】微型计算机中的内存储器,通常采用:

    【解析题】计算机可以进行算数运算不能进行逻辑运算

    【解析题】1983年,我国第一台亿次巨型电子计算机诞生了,它的名称是()

    【解析题】计算机能识别的语言是( )

    【解析题】用计算机对音频信息进行处理,要将模拟信号转换为数字信号,这个过程称为模拟音频的()。

    【解析题】在计算机网络术语中,WAN表示____。

    【解析题】在计算机网络中,带宽指的是____

    【解析题】计算机( )是指运行在计算机硬件系统之上的各种程序、数据及相关文档资料的总称。

    【解析题】为网络中各计算机之间交流信息提供统一的语言和规则的是________。

    【解析题】指令是控制计算机执行的命令,它由( )和地址码组成

    【解析题】被测试的程序不在机器上运行,而是采用人工检测和计算机辅助分析检测的手段称为()测试。

    【解析题】第一台计算机ENIAC的目的是进行科学计算,其主要计算的问题面向于( )。

    【解析题】保持计算机机房清洁有利于防止计算机病毒

    【解析题】退出 Windows 时,直接关闭计算机电源可能产生的后果是( )。

    【解析题】Internet中的用户远程登录,是指用户使用 ( ) 命令,使自己的计算机暂时成为远程计算机的一个仿真终端的过程。

    【解析题】十进制"-65"在计算机内部用二进制代码10111111表示,其表示方式为____________。

    【解析题】计算机绘图模式主要有哪些?()

    【解析题】下列属于计算机外设的是( )。

    【解析题】多媒体计算机中除了通常计算机的硬件外,还必须包括___四个硬部件。

    【解析题】计算机系统由哪2大类组成_____?

    【解析题】7计算机网络的性能指标包括:

    【解析题】通常一条计算机指令用来____。

    【解析题】计算机最主要的工作特点是()。

    【解析题】在计算机网络中,表征数据传输可靠性的指标是( )

    【解析题】数字化时代,需要利用计算机辅助设计处理来完善设计作品,充分表达设计作品的涵义,将设计师的想法最大限度地与受众得到( )与( )

    【解析题】简述计算机病毒的主要传播途径及防范计算机病毒的主要措施

    【解析题】在下面的选项中,( )不属于按计算机的用途分类

    【解析题】计算机网络是由主机、通信设备和【 】构成。

    【解析题】计算机采用二进制是因为()。

    【解析题】在计算机学院学习过程中,除了课堂学习外,学院还为同学们提供哪些学习机会和学习资源:()

    【解析题】在计算机网络中,实现数字信号和模拟信号之间转换的设备是

    【解析题】未来计算机硬件的发展有可能使用的技术是______。

    【解析题】最早的计算机编舞软件取名为“生命形式”,____________第一个试用了这个软件。

    【解析题】下列选项中,赋予计算机综合处理声音、图像、动画、文字、视频和音频信号功能的技术是()

    【解析题】10.计算机网络中常用的3种有线传输媒体是双绞线、________、________

    【解析题】智慧职教: 《中华人民共和国治安管理处罚法》第几条规定,有违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行的,会处5-10日拘留。

    【解析题】在计算机中,鼠标器属于()。

    【解析题】中国大学MOOC: 只有当对方的计算机连接到Internet时才能给他发送电子邮件。

    【解析题】下列度量单位中,用来度量计算机外部设备传输率的是______。

    【解析题】程序是问题求解步骤的描述,计算机能直接识别的程序是( )

    【解析题】因特网上许多复杂网络和许多不同类型的计算机之间能够互相通信的基础是____协议

    【解析题】第二代计算机网络的主要特点是 ( )。

    【解析题】若需在一台计算机上同时运行多个应用程序,必须安装使用具有_________处理功能的操作系统。

    相关问题:

    1、【解析题】 汉字内码和ASCII表示方法是一样的,在计算机内部的存储没有区别,只是在显示时可以区分为汉字还是英文。

    2、【解析题】 微型计算机的CPU由( )组成。

    3、【解析题】 占发明创新1%不到,它需要综合运用所有的知识,还要创造新知识,如计算机的发明,属于第( )等级。

    4、【解析题】 计算机在存储波形声音之前,必须进行( )。

    5、【解析题】 计算机网络中,所有的计算机都连接到一个中心节点上,一个网络节点需要传输数据,首先传输到中心节点上,然后由中心节点转发到目的节点,这种连接结构被称为( )。

    6、【解析题】 计算机辅助设计的英文缩写为

    7、【解析题】 计算机中主板上所采用的电源为____。

    8、【解析题】 ()是使计算机对人的意识 、思维的信息过程进行模拟的某些智能行为

    9、【解析题】 一台计算机所有的指令集合,反映了计算机的基本功能,称为()

    10、【解析题】 计算机执行指令的第一步是()

    11、【解析题】 计算机病毒的危害表现为()。

    12、【解析题】 具有高速运算能力和图形处理功能,通常运行unix操作系统,适合工程与产品设计等应用的一类计算机产品,通常称为().

    13、【解析题】 在计算机程序设计语言中,可以直接被计算机识别并执行的是( )。

    14、【解析题】 在微型计算机中,应用最普遍的字符编码是

    15、【解析题】 未来的计算机不仅可以替代人的记忆功能,也能替代人的思维功能,这为作战指挥( )提供了基础。

    16、【解析题】 “计算机”是Windows 7的一个应用程序文件夹

    17、【解析题】 计算机( )是指运行在计算机硬件系统之上的各种程序、数据及相关文档资料的总称。

    18、【解析题】 “云”使用了数据多副本容错、比使用本地计算机可靠

    19、【解析题】 下列四项中不属于微型计算机主要性能指标的是( )

    20、【解析题】 将一个部门中的多台计算机组建成局域网可以实现资源共享。在下列有关局域网的叙述中,错误的是_________。

    21、【解析题】 [08-573]某家庭采用ADSL宽带接入方式连接Internet,ADSL调制解调器连接一个4口的路由器,路由器再连接4台计算机实现上网的共享,这种家庭网络的拓扑结构为:

    22、【解析题】 S7-200系列PLC与计算机PC的通信时,需要把RS-232C端连接到S7-200PLC的通信端口上。

    23、【解析题】 计算机中,负责指挥计算机各部分自动协调一致地进行工作的部件是

    24、【解析题】 组成计算机网络的网络节点包括()节点和()节点。

    25、【解析题】 在计算机中,算法是指()。

    26、【解析题】 采用大规模和超大规模集成电路的计算机属于( )。

    27、【解析题】 微型计算机的显示器显示西文字符时,一般情况下一屏最多可显示( )。

    28、【解析题】 机器语言是用二进制代码表示的,对应于计算机硬件的指令系统,运行效率最高,但可读性和移植性差

    29、【解析题】 计算机可分为主机和____两部分

    30、【解析题】 计算机病毒实际上是一种特殊的程序

    31、【解析题】 中国大学MOOC:"计算机先要用( )设备把波形声音的模拟信号转换成数字信号再处理或存储。";

    32、【解析题】 计算机业界最初的硬件巨头“蓝色巨人”指的是__________。

    33、【解析题】 连接计算机系统结构的五大组成部件一般通过( )

    34、【解析题】 在计算机内部,一切信息的存储、处理与传送都采用二进制来表示。( )

    35、【解析题】 计算机中运算器的作用是( )。

    36、【解析题】 在计算机中,______字节称为1MB

    37、【解析题】 中国大学MOOC: 某计算机采用微程序控制器的微指令格式采用编码方式组织,某互斥命令组由4个微命令组成,则微指令寄存器中相应字段的位数至少需( )。 (单选)

    38、【解析题】 人工智能的实质是计算机智能。

    39、【解析题】 微型计算机硬件系统由( ? )组成。

    40、【解析题】 一台计算机的字长是 4 个字节,这意味着( )。

    41、【解析题】 计算机的网络资源共享包括()的共享。

    42、【解析题】 在数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它是数据库设计的( )段。

    43、【解析题】 根据统计,当前计算机病毒扩散最快的途径是( )

    44、【解析题】 第二代计算机的主要特征是采用___________________作为计算机的逻辑元件。

    45、【解析题】 第一台电子数字计算机是( ),它于1946年诞生于美国。

    46、【解析题】 虚拟现实投术是一种运用计算机仿真系统创建多源信思融合的交互式三维动态实景以及动作仿真的技术,可以给使用者提供沉浸性,多感知性,交互性的互动体验,虚拟现实技术所构造的虚拟环境说明

    47、【解析题】 用户计算机通过电话网接入Internet使用的设备是

    48、【解析题】 运算器是计算机的( )部件

    49、【解析题】 1946年,冯·诺依曼提出了() 原理,奠定了计算机的基本结构、基本工作原理,开创了程序设计的新时代

    50、【解析题】 计算机病毒可以通过( ) 传播。

    展开全文
  • JS怎么获取当前时间戳

    万次阅读 2020-05-31 19:59:30
    JS获取当前时间戳,可以通过Date.now()方法来实现,返回自1970年1月1日00:00:00 UTC以来经过的毫秒数也就是当前时间戳。 下面我们就结合具体的代码示例,给大家介绍JS怎么获取当前时间戳。 代码示例如下: ...

    JS获取当前时间戳,可以通过Date.now()方法来实现,返回自1970年1月1日00:00:00 UTC以来经过的毫秒数也就是当前时间戳。

     

    下面我们就结合具体的代码示例,给大家介绍JS怎么获取当前时间戳。

    代码示例如下:

    打造全网web前端全栈资料库(总目录)看完学的更快,掌握的更加牢固,你值得拥有(持续更新)

    <!DOCTYPE html>
    <html>
    <head>
     <meta charset="utf-8">
     <title>JS获取当前时间戳的方法示例</title>
    </head>
    <body>
    <script type="text/javascript">
     //创建一个时间戳
     var time = Date.now();
     document.write(time + "<hr>");
    </script>
     
    </body>
     
    </html> 

    获取当前时间戳结果如下所示:

     

     

    时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。

    Date.now()方法返回自1970年1月1日00:00:00 UTC以来经过的毫秒数。

     

    其语法:

    var timeInMs = Date.now();

    返回值是表示自UNIX纪元以来经过的毫秒数。

    但是时间戳格式,大多数人应该不容易看懂,那么我们怎么将其转换为大家所熟悉的时间格式呢?其实也很简单。

    代码示例如下:

    <!DOCTYPE html>
    <html>
    <head>
     <meta charset="utf-8">
     <title></title>
    </head>
    <body>
    <script type="text/javascript">
     //创建一个时间戳
     var time = Date.now();
     //document.write(time + "<hr>");
     //将其转换为人们可读的日期和时间
     var d = new Date(time);
     document.write(d);
    </script>
    </body>
    </html>

    转换结果如下图所示:

     

     

    Date 对象是用于处理日期和时间, new 关键词用来定义 Date 对象。

    js中使用new Date()将时间戳转换为人们可读的日期和时间,显示的格式是:星期+月份+日+年+时分秒+时区

    本篇文章就是关于JS获取当前时间戳并转换为正常时间格式的方法介绍,非常简单,希望对需要的朋友有所帮助!

     

    更多内容请关注我或者点开链接,记得点赞哦。

    展开全文
  • Unity之Touch触摸屏单、多触碰

    千次阅读 2022-04-10 21:19:13
    我们制作多触碰主要用到Unity中已经封装好的Touch类来制作,首先来看看unity官方对于Touch的描述:地址 在移动设备上,Input类提供对触摸屏、加速度计和地理/位置输入的访问。 通过iOS 键盘可以访问移动设备上...

    一、效果展示

    二、前言

    我们制作多指触碰主要用到Unity中已经封装好的Touch类来制作,首先来看看unity官方对于Touch的描述:地址

    在移动设备上,Input 类提供对触摸屏、加速度计和地理/位置输入的访问。

    通过 iOS 键盘可以访问移动设备上的键盘。

    iPhone、iPad 和 iPod Touch 设备最多可跟踪五根手指同时触摸屏幕。可通过访问 Input.touches 属性数组来获取在最后一帧期间触摸屏幕的每根手指的状态。

    Android 设备对其跟踪的手指数量没有统一限制。相反,此限制因设备而异,可能是旧设备上的双手指触摸到某些新设备上的五指触摸。

    通过上边的描述我们可以知道几点重要信息

    1.iPhone、iPad 和 iPod Touch 设备最多可跟踪五根手指同时触摸屏幕

    2.Android 设备跟踪的手指数量没有统一限制,这个限制是由设备决定的

    3.所有的touch操作是在最后一帧来处理。

     Input类中要使用到的函数:

    1.Input.touches :这是一个Touch[]数组,里面存储了所有手指在屏幕的触摸(Touch类)

    2.Input. touchCount: 获取屏幕中触摸的数量

    3.Input.GetTouch(int i):获取Input.touches数组中的touch类,这里要注意,当触摸在屏幕抬起时,Touch在Input.touches数组下标会变更。

    举例:当前有个三个手指触摸 A、B、C,在Input.touches 数组中分别对应其下标为0,1,2.即:A(下标 0)、B(下标 1)、C(下标 2),当我们抬起手指A,然后在按下,此时他们的下标就变成,B(下标 0)、C(下标 1)、A(下标 2)。

    所以我们在做多指时不能通过索引来获取唯一的touch类,因为当一个touch抬起时,后面的touch索引会一次往前进一位。为了避免这个不唯一问题可以用到Touch类的fingerld。

     好的现在我们再来看一下Touch类的一些主要函数:

    1.fingerld: 触摸的唯一索引,上面说过touch的索引在生命周期为结束时会进行更改,不能使用索引代表其唯一性,fingerld在生命周期结束前是不会更改的。

    2.position:   触摸屏幕的位置

    3.deltatime: 从最后状态到目前状态所经过的时间

    4.tapCount: 点击数。Andorid设备不对点击计数,这个方法总是返回1

    5.deltaPosition: 自最后一帧所改变的屏幕位置

    6.phase相位,也即屏幕操作状态,其中phase(状态)有以下这几种:
        (1) Began 手指刚刚触摸屏幕

        (2) Moved 手指在屏幕上移动

        (3) Stationary 手指触摸屏幕,但自最后一帧没有移动

        (4) Ended 手指离开屏幕

        (5) Canceled系统取消触控跟踪,原因如把设备放在脸上或同时超过5个触摸点

    三、案例实现

    1.单指触碰到指定区域时控制物体旋转,双指触碰到指定区域控制物体放大缩小,并且不受其他指头触摸影响

    思路:因为Touch的属性是在最后一帧来处理,所以在unity生命周期中我们要在Update中执行,我们通过for循环来遍历Input.touches中所有的touch,然后让相机向Touch的position位置发射一条射线,如果检测碰撞(通过层级判断,如:item层)到可以控制的物体身上,就获取这个物体身上的item类来执行对应的方法(单指或双指方法)。这里每个可以操控的物体都有一个Item脚本,这个脚本中存在单指和双指的执行方法

    具体实现:

    DoubleTouchManager类,负责遍历touch射线检测是否碰撞到物体

    PS:这里面我加了一个鼠标左键控制旋转,中间滑轮控制放大缩小的功能。脚本中有详细注释

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine.UI;
    using UnityEngine;
    using UnityEngine.EventSystems;
    
    /// <summary>
    /// 多指操作管理器
    /// </summary>
    public class DoubleTouchManager : MonoBehaviour
    {
        public LayerMask layer;
    
        static DoubleTouchManager intance;
        public static DoubleTouchManager GetIntance()
        {
            return intance;
        }
    
        private void Awake()
        {
            intance = this;
        }
        void Start()
        {
        }
    
        TouchItem _mouseObj;//射线检测获取item
    
        //封装 用于item判断是否10秒后位置复原
        public TouchItem MouseObj { get => _mouseObj; set => _mouseObj = value; }
    
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.Escape))
            {
                Debug.Log("按下ESC退出");
                Application.Quit();
            }
    
            #region 鼠标控制旋转缩放
            //没有手指触摸时才可执行鼠标
            if (Input.touches.Length <= 0)
            {
                //鼠标左键按下 记录鼠标位置
                if (Input.GetMouseButtonDown(0))
                {
                    MouseObj = RayDetection(Input.mousePosition);
                    Debug.Log("1: "+MouseObj);
    
                    //如果没有检测到3D物体,则检测ui
                    if (MouseObj == null)
                        MouseObj = GetFirstPickGameObject(Input.mousePosition);
    
                    Debug.Log(MouseObj);
    
                    //item为空不执行
                    if (MouseObj != null)
                        MouseObj.OnMouseDownFountion();//修改item的oldPos值;
                }
    
                //鼠标拖动旋转物体碰撞的物体不为空
                if (Input.GetMouseButton(0) && MouseObj != null)
                    MouseObj.OnMouseFountion();
    
    
                //鼠标滚轮控制放大缩小
                float value = Input.GetAxis("Mouse ScrollWheel");
                if (value != 0)
                {
                    //滑动发出射线获取碰撞到的item
                    MouseObj = RayDetection(Input.mousePosition);
    
                    //如果没有检测到3D物体,则检测ui
                    if (MouseObj == null)
                        MouseObj = GetFirstPickGameObject(Input.mousePosition);
    
                    //item为空不执行
                    if (MouseObj!= null)
                        MouseObj.OnMouseWheelFountion(value);
                }
    
                //鼠标拖动旋转物体碰撞的物体不为空
                if (Input.GetMouseButtonUp(0))
                    MouseObj = null;
    
                return;
            }
            #endregion
    
            #region 多指触摸
            for (int i = 0; i < Input.touches.Length; i++)
            {
                //射线检测获取Item
                TouchItem touchObj = RayDetection(Input.GetTouch(i).position);
                //如果没有检测到3D物体,则检测ui
                if (touchObj == null)
                    touchObj = GetFirstPickGameObject(Input.GetTouch(i).position);
    
                if (touchObj != null)
                {
                    if (!touchObj.istouch1)
                    {
                        //手指1不存在时,执行
                        touchObj.Touch1(i);
                    }
                    else if (touchObj.istouch1 && touchObj.touch1ID == Input.GetTouch(i).fingerId)
                    {
                        //手指1存在 并且这个手指id相同时
                        touchObj.Touch1(i);
                    }
                    else
                    {
                        //手指1存在 手指不相同
                        touchObj.Touch2(i);
                    }
    
                    Debug.Log("检测到物体");
                }
            }
            #endregion
    
    
        }
    
        #region 3D物体射线检测
        TouchItem RayDetection(Vector2 pos)
        {
            Ray ray = Camera.main.ScreenPointToRay(pos);
            RaycastHit hit;
    
            if (Physics.Raycast(ray, out hit, int.MaxValue, layer))
                return hit.transform.GetComponent<TouchItem>();
    
            return null;
    
        }
    
        #endregion
    
        #region UI射线检测
        /// <summary>
        /// 获取点击的UI类型Item
        /// </summary>
        /// <param name="position">点击屏幕坐标</param>
        /// <returns></returns>
        public TouchItem GetFirstPickGameObject(Vector2 position)
        {
            EventSystem eventSystem = EventSystem.current;
            PointerEventData pointerEventData = new PointerEventData(eventSystem);
            pointerEventData.position = position;
            //射线检测ui
            List<RaycastResult> uiRaycastResultCache = new List<RaycastResult>();
            eventSystem.RaycastAll(pointerEventData, uiRaycastResultCache);
            if (uiRaycastResultCache.Count > 0 && uiRaycastResultCache[0].gameObject.GetComponent<TouchItem>() != null)
                return uiRaycastResultCache[0].gameObject.GetComponent<TouchItem>();
            return null;
        }
        #endregion
    
        #region 2D BoxClider物体射线检测
        Transform RayDetection(Vector3 pos)
        {
            pos.z = 10;
            Vector3 screenPos = Camera.main.ScreenToWorldPoint(pos);
            RaycastHit2D hit = Physics2D.Raycast(screenPos, Vector2.zero);
            if (hit&& hit.transform== gearBtn)
            {
                return hit.transform;
            }
    
            return null;
        }
    
        #endregion
    
    }
    

    Item类:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    /// <summary>
    /// 触摸item 基类
    /// </summary>
    public class TouchItem : MonoBehaviour
    {
        //单双指位置
        protected Vector2 oldPos1;
        protected Vector2 oldPos2;
    
        [SerializeField] string layer = "touchItem";  //层级
    
        [Range(0, 10f)]
        [SerializeField] protected float rotSpeed = 10;  //旋转速度
        protected Vector3 originRot;//原旋转位置
        protected Vector3 originScale;//原大小
        public bool istouch1; //触摸1是否存在
        public bool istouch2; //触摸2是否存在
    
        public float minSize = 0.9f;
        public float maxSize = 1.3f;
        public Transform moveobj;
    
        void Start()
        {
            InitData();//参数初始化
        }
    
        void Update()
        {
            Recover();//无人操作复原
        }
    
        #region 初始化参数
        /// <summary>
        /// 初始化参数
        /// </summary>
        protected virtual void InitData()
        {
            istouch1 = false;
            istouch2 = false;
            timer = Time.realtimeSinceStartup;
    
            //3D移动物体原旋转和大小
            if (moveobj != null)
            {
                originRot = moveobj.localEulerAngles;
                originScale = moveobj.localScale;
            }
    
    
            //初始化layer
            gameObject.layer = LayerMask.NameToLayer(layer);
        }
        #endregion
    
        #region Update无人操作复原
        protected float timer = 0;
        /// <summary>
        /// Update无人操作复原
        /// </summary>
        protected virtual void Recover()
        {
            //当没有触摸时并且鼠标选中的item不是自己时,每过10秒执行位置大小复原
            if (touch1ID == -1 && DoubleTouchManager.GetIntance().MouseObj != this)
            {
                if (Time.realtimeSinceStartup - timer >= 10f)
                {
                    if (moveobj != null)
                    {
                        moveobj.eulerAngles = originRot;
                        moveobj.localScale = originScale;
                    }
    
                    timer = Time.realtimeSinceStartup;
                }
            }
            else
                timer = Time.realtimeSinceStartup;
        }
        #endregion
    
        #region 单指操作
        public int touch1ID = -1;
        protected int touch1Index = -1;
        public virtual void Touch1(int i)
        {
            //当有双指时 不执行旋转
            if (istouch2)
                return;
    
            touch1Index = i;
            istouch1 = true;
    
            //防止多次触碰出现问题
            if (touch1Index >= Input.touchCount)
            {
                //Debug.Log("单指 防止多次触碰出现问题");
                touch1ID = -1;
                touch1Index = -1;
                istouch1 = false;
                return;
            }
    
            Touch touch = Input.GetTouch(touch1Index);
    
            //判断id是否相同
            if (touch1ID == -1)
                touch1ID = touch.fingerId;
            else
                if (touch1ID != touch.fingerId)
            {
                touch1ID = -1;
                touch1Index = -1;
                istouch1 = false;
                //id不同 不执行
                return;
            }
    
            //单指操作 
            if (touch.phase == TouchPhase.Began)
                SingleBeganOperation(touch.position); //单指操作
    
            if (touch.phase == TouchPhase.Moved)
            {
                SingleMovedOperation(touch.position);
                //Debug.Log("旋转");
            }
    
            //手指抬起 或者系统取消对触摸的跟踪
            if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)
            {
                SingleEndOperation(); //抬起
                //Debug.Log("手指抬起 或者系统取消对触摸的跟踪");
            }
    
        }
        #endregion
    
        #region 双指操作
        protected int touch2ID = -1;
    
        
        public virtual void Touch2(int i)
        {
            istouch2 = true;
    
            //防止多次触碰出现问题
            if (touch1Index >= Input.touchCount || i >= Input.touchCount)
            {
                //Debug.Log("多指: 防止多次触碰出现问题");
                touch1ID = -1;
                touch2ID = -1;
                istouch1 = false;
                istouch2 = false;
                return;
            }
    
            Touch touch1 = Input.GetTouch(touch1Index);
            Touch touch2 = Input.GetTouch(i);
    
            //判断id是否相同
            if (touch1ID == -1 || touch2ID == -1)
            {
                touch1ID = touch1.fingerId;
                touch2ID = touch2.fingerId;
            }
            else
            {
                if (touch1ID != touch1.fingerId || touch2ID != touch1.fingerId)
                {
                    //id不同 不执行 
                    touch1ID = -1;
                    touch2ID = -1;
                    istouch1 = false;
                    istouch2 = false;
                    return;
                }
            }
    
    
            //双指操作
            if (touch2.phase == TouchPhase.Began)
            {
                Debug.Log("多指************1");
    
                oldPos1 = touch1.position;
                oldPos2 = touch2.position;
                return;
            }
    
            if (touch1.phase == TouchPhase.Moved || touch2.phase == TouchPhase.Moved)
            {
                Debug.Log("多指************2");
    
                float oldDistance = Vector2.Distance(oldPos1, oldPos2);  //计算原先两指的距离
                float newDistance = Vector2.Distance(touch1.position, touch2.position);  //当前移动后两指的距离
    
                //(新距离)减去(旧距离)得出的差如果是负数的话缩小,正数就放大
                float offset = newDistance - oldDistance;
                //Debug.Log("3: 判断两指有一个在运动时: " + offset);
    
                //放大因子, 一个像素按 0.01倍来算(100可调整)
                float scaleFactor = offset / 100;
                //计算物体scale要放大的值
                Vector3 localScale = moveobj.localScale + (Vector3.one * scaleFactor);
    
                //设置放大缩小的范围值
                Vector3 scale = new Vector3(Mathf.Clamp(localScale.x, minSize, maxSize),
                    Mathf.Clamp(localScale.y, minSize, maxSize),
                    Mathf.Clamp(localScale.z, minSize, maxSize));
    
                moveobj.localScale = scale;//赋值
                Debug.Log("大小: " + scale);
    
                //记住最新的触摸点位置,下次使用  
                oldPos1 = touch1.position;
                oldPos2 = touch2.position;
            }
    
            if (touch1.phase == TouchPhase.Ended || touch2.phase == TouchPhase.Ended)
            {
                touch1ID = -1;
                touch2ID = -1;
                istouch1 = false;
                istouch2 = false;
                //Debug.Log("手指抬起2");
            }
    
            if (touch1.phase == TouchPhase.Canceled || touch2.phase == TouchPhase.Canceled)
            {
                touch1ID = -1;
                touch2ID = -1;
                istouch1 = false;
                istouch2 = false;
                //Debug.Log("系统取消对触摸的跟踪2");
            }
    
        }
        #endregion
    
        #region 鼠标控制旋转和放大缩小
    
        public virtual void OnMouseDownFountion()
        {
            //Debug.Log("按下");
    
            //开始按下操作
            SingleBeganOperation(Input.mousePosition);
        }
    
        //左键控制旋转
        public virtual void OnMouseFountion()
        {
            //Debug.Log("持续");
            SingleMovedOperation(Input.mousePosition);
        }
    
        //左键抬起
        public virtual void OnMouseUpFountion()
        {
            //Debug.Log("抬起");
            SingleEndOperation();
        }
    
        //滑轮控制放大
        public virtual void OnMouseWheelFountion(float value)
        {
            Debug.Log("滑轮");
    
            //计算物体scale要放大的值
            Vector3 localScale = moveobj.localScale + Vector3.one * value;
    
            //设置放大缩小的范围值
            Vector3 scale = new Vector3(Mathf.Clamp(localScale.x, minSize, maxSize),
                Mathf.Clamp(localScale.y, minSize, maxSize),
                Mathf.Clamp(localScale.z, minSize, maxSize));
    
            moveobj.localScale = scale;//赋值
            //Debug.Log("大小: " + scale);
    
        }
        #endregion
    
        #region 单指 (按下、持续按下、抬起操作)
        /// <summary>
        /// 开始操作
        /// </summary>
        /// <param name="pos">位置</param>
        protected virtual void SingleBeganOperation(Vector3 pos)
        {
            //Debug.Log("按下");
            oldPos1 = pos;
        }
    
        /// <summary>
        /// 持续操作
        /// </summary>
        /// <param name="pos">位置</param>
        protected virtual void SingleMovedOperation(Vector3 pos)
        {
            //Debug.Log("持续");
            Vector3 newRot = new Vector3((pos.y - oldPos1.y), -(pos.x - oldPos1.x), 0) * Time.deltaTime * rotSpeed;
            var rotation = Quaternion.Euler(newRot);
            moveobj.rotation *= rotation;
            //moveobj.eulerAngles = new Vector3(moveobj.eulerAngles.x, moveobj.eulerAngles.y, 0);
            moveobj.eulerAngles = new Vector3(0, moveobj.eulerAngles.y, 0); //只让Y轴旋转
            oldPos1 = pos;
        }
    
        /// <summary>
        /// 结束操作
        /// </summary>
        /// <param name="pos">=位置</param>
        protected virtual void SingleEndOperation()
        {
            touch1ID = -1;
            touch1Index = -1;
            istouch1 = false;
        }
    
        #endregion
    
    }
    

    场景布局:

     然后打包即可,注意在触摸屏中Input.GetMouse()这种获取鼠标单机事件的函数可以触发手指触摸,但是touch在没有触摸功能的设备上使用鼠标是无法检测的,所以要测试这个效果需要打包到有触摸功能的设备上才可以执行。

    四、项目包

    https://pan.baidu.com/s/1Im9JCz83WCdv-cK8f6L8Qg 
    提取码:syq1 

    展开全文
  • java通过时间戳获取当前时间

    千次阅读 2021-05-01 16:54:31
    时间戳时格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。通俗的讲,时间戳时一份能够表达一份数据再一个特定时间点已经存在的完整的可验证的数据。 获取当前...
  • C语言--获取当前时间

    千次阅读 多人点赞 2020-03-25 20:07:00
    C语言–获取当前时间 使用C语言的函数接口,获取系统的当前时间,组装成一定格式的字符串 获取系统当前时间 demo #include <stdio.h> #include <time.h> int main(int argc, char *argv[]) { char ...
  • java获取当前时间戳的方法(*)

    万次阅读 2021-12-08 19:35:09
    获取当前时间戳 //方法 一 System.currentTimeMillis(); //方法 二 Calendar.getInstance().getTimeInMillis(); //方法 三 new Date().getTime(); 获取当前时间 SimpleDateFormat df = new SimpleDateFormat("yyyy-...
  • sourcetree是现在比较火的git可视化工具,今天中午刚睡醒精神朦胧,提交了本地分支的版本,然后发现好像提错了,回滚,后来发现又没有提交错,可是回滚了...回滚——是将改动的代码提交到本地仓库,但未推送到远端...
  • JavaScript刷新当前页面的五种方式

    千次阅读 2019-02-25 11:19:03
    js刷新当前页面的5种方式 1、reload: reload 方法,该方法强迫浏览器刷新当前页面。 语法:location.reload([bForceGet])  参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页。true, 则以 ...
  • 电脑Excel表格中当前日期与时间如何快速输入有的小伙伴选择在电脑上使用Excel软件来处理数据,有时候我们需要快速输入当前日期与时间,如果一个一个输入,那么会非常烦,如何快速输入呢?小编就来为大家介绍一下吧。...
  • offer所有的题目总结

    万次阅读 多人点赞 2018-09-17 10:13:28
    } } */ public class Solution { /** * 算法思路,(剑offer图片) * 1.根节点放到队列里面,队列不空,就打印队列头,打印这个节点,马上把这个节点的左右子节点放到队列中。 * 2.再要访问一个节点,把这...
  • = null && f.mFragmentId == id),如果该对象不为空且其f.mFragmentId(应该的是存放该Fragment的容器id)和id(这个id是从findFragmentById(int id)中传过来的参数id)。就这样从size()-1一直到0依次判断id值是否...
  • lxml中xpath获取当前节点所有子节点的文本
  • 《剑offer》解题笔记

    千次阅读 2014-07-22 08:42:31
    《剑offer》解题笔记 《剑offer》共50题,这两周使用C++花时间做了一遍,谨在此把一些很巧妙的方法、写代码遇到的难点、易犯错的细节等做一个简单的标注,但不会太过详细,具体算法还是请参考书本。 做的...
  • 关于前端刷新当前页面的方法总结

    千次阅读 2019-07-02 11:28:08
    js 刷新当前页面 今天想总结一下之前学到的三种刷新方法: reload() 方法; replace() 方法; 页面自动刷新; 一、reload() 方法 reload()方法用于刷新当前文档。 reload() 方法类似于浏览器上的刷新页面按钮。 语法...
  • 抖音内部上热门技术 视频md5的是什么意思 在这个网红迸发的时代,大家不得不承认,除了明星外,网红背后的粉丝效应是很强大的。,觉得小编分享的内容对你有帮助的话,可以搜索小编卫星。,如果你是想通过抖音来卖...
  • 需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是字段会被“强制”更新到当前时间,你无法程序中手动为字段赋值;如果使用django再带的admin管理器,那么该字段在admin中是只读的...
  • 现在以太坊合约一张是多少钱?

    千次阅读 2020-12-22 04:04:05
    现在以太坊合约一张是多少钱?在回答这个问题之前,小编先跟大家说说什么是合约交易的?合约交易的是合约交易的买卖对象,是由合约交易所统一制定的,规定了某一特定的时间交割一定数量商品的标准化合约,在合约交易...
  • 可能是全网最好的MySQL重要知识点/面试题总结

    万次阅读 多人点赞 2019-06-29 20:20:34
    冗余索引的是索引的功能相同,能够命中就肯定能命中 ,那么 就是冗余索引如(name,city )和(name )这两个索引就是冗余索引,能够命中后者的查询肯定是能够命中前者的 在大多数情况下,都应该尽量扩展已有的索引...
  • 在经过一段时间的学习,发现有些数据当你添加与...刷新当前页面的5种方法1。 reloadreload 方法,该方法强迫浏览器刷新当前页面。语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 fals...
  • IDEA使用

    万次阅读 多人点赞 2020-06-26 21:31:58
    IDEA使用北 破姐 vm调优 插件推荐 插件下载方式 插件推荐 ( 搜索插件后面的英文名称即可下载 ) 快捷键 Idea配置多服务/多模块启动界面service 新! 总结下这段时间工作使用IDEA的一些心得和体会, 希望能够在让自己...
  • 现在越来越多的设备中都用到了加速度传感器(即加速计)、角速度传感器(即陀螺仪)、磁感应传感器(即磁力计)。但是很多人对这3类传感器,以及它们所产生的组合套装(比如3轴传感器、6轴传感器、9轴传感器等)不是...
  • IDEA将当前项目JDK更改为指定版本

    千次阅读 2020-06-04 11:12:38
    顾我们就需要知道如何去灵活替换IDEA的当前项目的JDK,而不是当需要替换时就卸载当前JDK,装一个需要的JDK,使用完后再弄回来之类的做法。 JDK~~~ 一、安装多个JDK 相信小伙伴都有安装过JDK8,如下: 那现在...
  • 本文题目和部分解题思路来源自《剑offer》第二版 开始行动,你已经成功一半了,献给正在奋斗的我们 题目 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和...
  • 2, 目前一般来说,前端的就是浏览器端,后端的就是直接为浏览器端提供服务以及数据的服务器端。 3, 从大的方面来讲,你所能看到的一切,网页、移动端网页、小程序、甚至某些app,都是前端程序员的。 ...
  • 使用C语言程序判断当前系统大小端

    千次阅读 2017-11-22 22:47:58
    小端模式是数据的低字节保存在地址的低地址中,而数据的高字节保存在内存的高地址中,跟我们的逻辑思维是比较一致的 2>大端模式 大端模式是数据的低字节保存在内存的高地址中,而数据的高字节,保存在内存的低...
  • Linux pwd命令详解

    千次阅读 2021-03-17 00:37:01
    工作目录就是你当前所处于的那个目录。pwd始终以绝对路径的方式打印工作目录,即从根目录(/)开始到当前目录的完整路径。在实际工作中,我们常常记不起当前目录的完整路径,此时pwd命令就派上用场了。1.2 命令语法pwd...
  • 【硬核】肝了一月的Netty知识点

    万次阅读 多人点赞 2021-01-26 10:16:07
    ServerBootstrap 与 Bootstrap ​ Bootstarp 和 ServerBootstrap 被称为引导类,对应用程序进行配置,并使他运行起来的过程。Netty处理引导的方式是使你的应用程序和网络层相隔离。 ​ Bootstrap 是客户端的引导...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 586,689
精华内容 234,675
关键字:

当前是指现在吗