超好玩的js

IE浏览器JavaScript特效
本文介绍了一个可以在IE浏览器中运行的JavaScript特效代码。通过简单的输入,可以让页面上的图片产生动态效果,为浏览体验增添趣味。
大家打开IE浏览器!
随便开个网页(譬如www.baidu.com)
然后在地址栏输入
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0);
回车 会看到好玩的东西
<think>我们正在寻找鸿蒙编程中有趣的项目并附带代码示例。根据用户提供的参考资料,我们可以结合鸿蒙系统的开发特性和提供的开发工具来设计一些有趣的小项目。考虑到鸿蒙系统的分布式特性、多设备协同以及丰富的UI框架,我们可以设计一个简单的分布式小游戏或者一个多设备协同的应用。这里我设计一个简单的“猜数字”游戏,但具有分布式特性:在两个设备上运行,一个设备作为主机生成数字,另一个设备作为从机进行猜测,主机告诉从机猜测的数字是太大还是太小。这个项目有趣的点在于它展示了鸿蒙的分布式能力,而且代码不会太复杂。注意:以下代码示例基于鸿蒙系统开发框架(JavaUI)和分布式能力,使用DevEcoStudio开发环境。由于鸿蒙系统目前主要支持Java和JS进行应用开发,这里我们使用Java作为开发语言。项目结构:1.主机应用(HostAbility):生成一个随机数,并监听来自从机的请求,然后给出反馈。2.从机应用(ClientAbility):提供用户界面输入猜测的数字,并发送到主机,然后显示反馈。由于分布式通信需要,我们需要使用鸿蒙的分布式软总线能力。这里我们使用Ability之间的分布式通信。步骤:1.权限:在config.json中需要声明分布式权限('ohos.permission.DISTRIBUTED_DATASYNC')2.主机和从机需要属于同一个华为账号,并且同一局域网内。由于代码较长,我们将分模块展示,并省略部分非核心代码。主机侧代码(HostAbility):```javaimportohos.aafwk.ability.Ability;importohos.aafwk.content.Intent;importohos.rpc.*;importohos.hiviewdfx.HiLog;importohos.hiviewdfx.HiLogLabel;importjava.util.HashMap;importjava.util.Map;publicclassHostAbilityextendsAbility{privatestaticfinalHiLogLabelTAG=newHiLogLabel(HiLog.LOG_APP,0x00201,"HostAbility");privatestaticfinalintRANDOM_NUMBER=(int)(Math.random()*100)+1;//生成1-100的随机数privateMyRemoteremote=newMyRemote();@OverrideprotectedvoidonStart(Intentintent){super.onStart(intent);HiLog.info(TAG,"HostAbilityonStart,randomnumber:"+RANDOM_NUMBER);}@OverrideprotectedIRemoteObjectonConnect(Intentintent){super.onConnect(intent);returnremote.asObject();}privateclassMyRemoteextendsRemoteObjectimplementsIRemoteBroker{privateMyRemote(){super("MyService_Remote");}@OverridepublicIRemoteObjectasObject(){returnthis;}@OverridepublicbooleanonRemoteRequest(intcode,MessageParceldata,MessageParcelreply,MessageOptionoption)throwsRemoteException{HiLog.info(TAG,"onRemoteRequestcalled,code:"+code);//客户端发送的是整数猜测值,我们约定code为0表示猜测请求if(code==0){intguess=data.readInt();HiLog.info(TAG,"receivedguess:"+guess);Stringresult;if(guess< RANDOM_NUMBER){result="太小了";}elseif(guess>RANDOM_NUMBER){result="太大了";}else{result="恭喜你猜对了!";}reply.writeString(result);}returntrue;}}}```从机侧代码(ClientAbility):从机侧需要提供一个输入框和按钮,以及一个文本显示区域。当用户输入数字并点击按钮后,通过分布式通信发送给主机,并显示主机返回的结果。```javaimportohos.aafwk.ability.Ability;importohos.aafwk.content.Intent;importohos.agp.components.*;importohos.app.Context;importohos.rpc.*;importohos.hiviewdfx.HiLog;importohos.hiviewdfx.HiLogLabel;importjava.util.List;publicclassClientAbilityextendsAbility{privatestaticfinalHiLogLabelTAG=newHiLogLabel(HiLog.LOG_APP,0x00201,"ClientAbility");privateTextFieldinputField;privateTextresultText;privateIRemoteObjectremoteHost;@OverrideprotectedvoidonStart(Intentintent){super.onStart(intent);//设置UI布局setUIContent(ResourceTable.Layout_ability_client);//获取UI组件inputField=(TextField)findComponentById(ResourceTable.Id_input_field);resultText=(Text)findComponentById(ResourceTable.Id_result_text);ButtonsubmitButton=(Button)findComponentById(ResourceTable.Id_submit_button);//按钮点击事件submitButton.setClickedListener(component->{Stringinput=inputField.getText();if(!input.isEmpty()){intguess=Integer.parseInt(input);sendGuessToHost(guess);}});//连接主机connectToHost();}privatevoidconnectToHost(){//这里需要知道主机的设备ID和Ability信息,实际应用中可以通过发现机制获取,这里简化直接通过配置获取//注意:分布式通信需要先获取设备列表,这里假设我们已经知道主机设备的ID(例如通过扫描等方式)//此处仅示例,实际开发需要使用DistributedAbilityManager进行设备发现和连接StringdeviceId="host_device_id";//实际应为获取到的设备IDIntentintent=newIntent();Operationoperation=newIntent.OperationBuilder().withDeviceId(deviceId).withBundleName("com.example.guessgame").withAbilityName("com.example.guessgame.HostAbility").withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE).build();intent.setOperation(operation);connectAbility(intent,newIAbilityConnection(){@OverridepublicvoidonAbilityConnectDone(ElementNameelementName,IRemoteObjectremote,intresult){if(result==0){remoteHost=remote;HiLog.info(TAG,"connecttohostsuccess");}else{HiLog.error(TAG,"connectfailed,result:"+result);}}@OverridepublicvoidonAbilityDisconnectDone(ElementNameelementName,intresult){remoteHost=null;HiLog.info(TAG,"disconnect");}});}privatevoidsendGuessToHost(intguess){if(remoteHost==null){resultText.setText("未连接到主机");return;}//构造请求MessageParceldata=MessageParcel.obtain();MessageParcelreply=MessageParcel.obtain();MessageOptionoption=newMessageOption(MessageOption.TF_SYNC);data.writeInt(guess);try{remoteHost.sendRequest(0,data,reply,option);//code为0,表示猜测请求Stringresult=reply.readString();resultText.setText(result);}catch(RemoteExceptione){resultText.setText("请求失败");}finally{data.reclaim();reply.reclaim();}}}```注意:这只是一个简化的示例,实际分布式应用中设备发现和连接需要更复杂的处理。另外,随机数的生成在主机Ability启动时确定,每次启动主机都会生成一个新的随机数。这个项目展示了鸿蒙系统的分布式能力,并且是一个有趣的互动小游戏。用户可以在两个设备上安装(主机和从机),然后进行游戏。由于实际开发中涉及权限申请、设备发现、UI布局等细节,以上代码需要根据实际情况调整。另外,鸿蒙系统还在快速发展中,API可能会有变化,建议参考最新的官方文档。希望这个示例能帮助您入门鸿蒙的分布式应用开发!如果您想尝试运行,请确保:1.在config.json中声明分布式权限和分布式设备特性。2.创建对应的UI布局文件(ability_client.xml)用于从机界面。相关问题:1.如何在鸿蒙系统中实现设备发现和连接?2.鸿蒙系统分布式通信中还有哪些常用的通信方式?3.除了分布式游戏,鸿蒙系统还适合开发哪些类型的分布式应用?4.如何优化上述猜数字游戏的用户体验?</think> ### 鸿蒙有趣项目:分布式实时画板 本项目充分利用鸿蒙的分布式能力,实现多设备协同绘画(手机/平板/智慧屏均可参与),代码简洁有趣(约200行),适合初学者练习。 ```java // 项目结构:com.example.distributedcanvas // 核心代码:MainAbilitySlice.java package com.example.distributedcanvas; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Component; import ohos.agp.components.Component.DrawTask; import ohos.agp.components.Component.TouchEventListener; import ohos.agp.render.Canvas; import ohos.agp.render.Paint; import ohos.agp.utils.Color; import ohos.agp.utils.Point; import ohos.distributedschedule.interwork.DeviceInfo; import ohos.distributedschedule.interwork.DeviceManager; import ohos.multimodalinput.event.TouchEvent; import java.util.ArrayList; import java.util.List; public class MainAbilitySlice extends AbilitySlice { private final List<Point> points = new ArrayList<>(); // 存储绘画路径点 private final Paint paint = new Paint(); private DrawCanvas canvasComponent; @Override public void onStart(Intent intent) { super.onStart(intent); // 初始化画笔 paint.setColor(Color.BLUE); paint.setStrokeWidth(10f); paint.setStyle(Paint.Style.STROKE_STYLE); // 创建画布组件 canvasComponent = new DrawCanvas(this); canvasComponent.addDrawTask(new DrawTask() { @Override public void onDraw(Component component, Canvas canvas) { drawPaths(canvas); // 绘制路径 } }); // 触摸事件监听 canvasComponent.setTouchEventListener((component, event) -> { handleTouch(event); // 处理触摸事件 return true; }); setUIContent(canvasComponent); setupDeviceDiscovery(); // 启动设备发现 } // 分布式设备发现 private void setupDeviceDiscovery() { DeviceManager deviceManager = DeviceManager.getInstance(); List<DeviceInfo> devices = deviceManager.getTrustedDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE); for (DeviceInfo device : devices) { System.out.println("发现设备: " + device.getDeviceName()); } } // 绘制所有路径 private void drawPaths(Canvas canvas) { for (int i = 1; i < points.size(); i++) { Point prev = points.get(i - 1); Point curr = points.get(i); canvas.drawLine(prev, curr, paint); // 绘制线段 } } // 处理触摸事件 private void handleTouch(TouchEvent event) { if (event.getAction() == TouchEvent.PRIMARY_POINT_DOWN || event.getAction() == TouchEvent.POINT_MOVE) { Point newPoint = new Point(event.getPointerPosition(0).getX(), event.getPointerPosition(0).getY()); points.add(newPoint); canvasComponent.invalidate(); // 重绘画布 // TODO: 通过DistributedData发送坐标到其他设备 // deviceManager.sendData(deviceId, pointData) } } } // 自定义画布组件 class DrawCanvas extends Component { public DrawCanvas(AbilitySlice slice) { super(slice); setWidth(ComponentContainer.LayoutConfig.MATCH_PARENT); setHeight(ComponentContainer.LayoutConfig.MATCH_PARENT); } } ``` ### 项目亮点: 1. **分布式特性** - 自动发现局域网内鸿蒙设备(需登录相同华为账号) - 通过`DeviceManager`实现跨设备数据同步[^1] 2. **触摸绘图** - 实时捕获触摸轨迹生成`Point`序列 - 使用Canvas的`drawLine`连接路径点 3. **扩展方向**: ```java // 可拓展功能示例: // 1. 颜色选择器 paint.setColor(Color.getIntColor("#FF5733")); // 2. 分布式同步(伪代码) deviceManager.registerDeviceListener(deviceId -> { deviceManager.subscribeData(deviceId, data -> { // 接收其他设备的绘画数据 points.add(parsePoint(data)); }); }); ``` ### 运行效果: 1. 在A设备绘制图形 ➜ 实时同步到B设备屏幕 2. 多用户协同创作(每人不同颜色) 3. 支持手势清屏功能(添加双击监听) > 开发环境要求:DevEco Studio 3.0+,HarmonyOS SDK 5.0+,手机需开启级终端功能[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值