在这里插入图片描述

官方文档链接

  • https://krpano.com/docu/js/#top
例子
  • https://krpano.com/releases/1.22/viewer/examples/javascript-interface/js-api-examples.html

  • https://krpano.com/viewsource.html?releases/1.22/viewer/examples/javascript-interface/js-api-examples.html

注意点

文件路径

在这里插入图片描述

它是以首次获取的tour.js为根目录。后面xml里是xml为根目录

完整代码
//disasterpano.vue
<template><div><h1>krpano Javascript API Examples (Version 1.22)</h1><div id="localusagenote" style=" display:none;"><b>NOTE:</b>Start this example from a local server like the <a href="https://krpano.com/tools/testingserver/#top" target="_blank" style="color:red;">krpano Testing Server</a>and select the root folder of the krpano Download Package as server folder!<br>If using the example locally on a <u>file://</u> url or with another server folder,it might be not possible to access the files that are used by the examples(depending on the <a href="https://krpano.com/docu/localusage/#top" target="_blank" style="color:red;">Browser settings</a>).</div><div id="content"><div id="pano"></div><div id="buttons" style="pointer-events:none; user-select:none; opacity:0.0; transition:opacity 1.0s ease-out;">Loading panos:<br><div class="button" @click="loadxmlfile()">load xml file</div><br><div class="button" @click="loadxmlstring()">load xml string</div><br><div class="button" @click="loadimage()">load image (single-res)</div><br><div class="button" @click="loadimage_mres()">load image (multi-res)</div><br><div class="button" @click="loadimage_partial()">load image (partial-pano)</div><br><!--        <div class="button" onclick="loadimage_3dmodel()">load image (3D-model)</div><br>--><!--        <br>--><!--        Changing the view:<br>--><!--        <div class="button" onclick="reset_view()">Reset view</div><br>--><!--        <div class="button" onclick="randomview_set()">Set a Random view</div><br>--><!--        <div class="button" onclick="randomview_lookto()">Animated Look-to a Random view</div><br>--><!--        <br>--><!--        Hotspots:<br>--><!--        <div class="button" onclick="add_hotspot()">Add a Hotspot at the looking position</div><br>--><!--        <div class="button" onclick="add_hotspot_on_next_click()">Add a Hotspot at the click position</div><br>--><!--        <div class="button" onclick="add_poly_hotspot()">Add Polygonal Hotspot</div><br>--><!--        <div class="button" onclick="remove_all_hotspots()">Remove all hotspots</div><br>--><!--        <br>--><!--        Layers:<br>--><!--        <div class="button" onclick="textfield_template()">Add a Textfield with a template</div><br>--><!--        <div class="button" onclick="layers_colormixer_demo()">A Simple Color-Mixer as Demo</div><br>--><!--        <br>--><!--        Plugins:<br>--><!--        <div class="button" onclick="plugin_soundinterface_demo()">Soundinterface Demo</div><br>--><!--        <div class="button" onclick="plugin_videoplayer_demo()">Videoplayer Demo</div><br>--><!--        <div class="button" onclick="plugin_postprocessing_demo()">Postprocessing Demo</div><br>--></div></div></div>
</template>
<script setup>
// import { embedpano } from "@/assets/krpano/tour.js"
import {onMounted, ref, markRaw} from "vue";// a global 'krpano' variable (will be set in the embedpano.onready callback)
// open the Browsers developer tools and type 'krpano' for directly playing with it
const krpano = ref(null);const setup = () => {// show a note when opening that example directly from a local file:// urlif ( location.protocol === "file:" ){document.getElementById("localusagenote").style.display = "";}// 检查embedpano函数是否存在,如果不存在则尝试从krpanoJS获取if (typeof window.embedpano !== 'function') {if (typeof window.krpanoJS !== 'undefined' && typeof window.krpanoJS.embedpano === 'function') {window.embedpano = window.krpanoJS.embedpano;} else {console.error('embedpano function not found. Make sure krpano library is loaded.');return;}}// embed the krpano viewerwindow.embedpano({target : document.getElementById("pano"), 	// embed the krpano viewer into the 'pano' div elementconsolelog : true,							// log the krpano messages also to the Browser console//bgcolor : "transparent",					// optionally: use a transparent background (for seeing the webpage behind 3D-models or partial panos)onready : function(krpanointerface){krpano.value = markRaw(krpanointerface);// enable the debugmode and handle all JS errors in the Browsers consolekrpano.value.debugmode = true;krpano.value.debugjsactions = true;krpano.value.debugjsplugins = true;// add a grid pano (with custom colors)krpano.value.image.preview = {type:"grid(cube,64,64,512,0xCCAA00,0x222222)"};// add an intro info textvar info = krpano.value.addlayer();info.setvars({type:"text", align:"center", text:"krpano is ready...", bg:false, css:"color:white;font-size:14px;font-weight:bold;"});info.onclick = function(){// disable the layer to avoid getting additional clicks during the animationinfo.enabled = false;// do an animation and remove the layerkrpano.value.tween(info, {scale:10,alpha:0}, 0.5, "smooth", function(){ info.remove(); });}// enable the example buttons nowvar buttons = document.getElementById("buttons");buttons.style.pointerEvents = "auto";buttons.style.opacity = 1.0;}});
}// examples
const tour = new URL('@/assets/krpano/demotour-corfu/tour.xml', import.meta.url).href
const loadxmlfile= ()=>
{console.log( tour)// load a tour xml fileif (krpano.value && krpano.value.actions) {krpano.value.actions.loadpano(tour, null, "RESET");} else {console.error('krpano not ready or actions not available');}
}const loadxmlstring= ()=>
{// load a xml as stringvar xmlstring =`<krpano><image><preview url="/src/assets/krpano/webvr/panos/intro/preview.jpg" /><cube url="/src/assets/krpano/webvr/panos/intro/pano_%s.jpg" /></image><view hlookat="0" vlookat="0" fov="100" /></krpano>`;if (krpano.value && krpano.value.actions) {krpano.value.actions.loadxml(xmlstring, null, "RESET", "BLEND(0.35)");} else {console.error('krpano not ready or actions not available');}
}const loadimage= ()=>
{if (krpano.value && krpano.value.actions && krpano.value.image) {// load a spherical image directlykrpano.value.image.reset();krpano.value.image.sphere = {url:"/src/assets/krpano/depthmap/depthmap-images/pano1.jpg"};krpano.value.actions.loadpanoimage("RESET", "BLEND(0.35)");krpano.value.actions.lookat(30,0,100);} else {console.error('krpano not ready or actions/image not available');}
}const loadimage_mres= ()=>
{if (krpano.value && krpano.value.actions && krpano.value.image) {// load images directly from the krpano cloudfront tile-serverkrpano.value.image.reset();krpano.value.image.preview = {url:"https://d8d913s460fub.cloudfront.net/tours/paris/panos/a.tiles/preview.jpg"};krpano.value.image.cube = {url:"https://d8d913s460fub.cloudfront.net/tours/paris/panos/a.tiles/l%l_%s_%v_%h.jpg", multires:"512|768|1536|3072|6144|12409"};krpano.value.actions.loadpanoimage("RESET", "BLEND(0.35)");// add a contextmenu with different projection settingskrpano.value.actions.includexml("/src/assets/krpano/plugins/contextmenu.xml");} else {console.error('krpano not ready or actions/image not available');}
}const loadimage_partial= ()=>
{if (!krpano.value || !krpano.value.actions || !krpano.value.image) {console.error('krpano not ready or actions/image not available');return;}if (krpano.value.display.istransparent == false){// unload and embed again with enabled transparent supportvar embeddingparameters = krpano.value.embeddingparameters;var old_onready = embeddingparameters.onready;embeddingparameters.bgcolor = "transparent";embeddingparameters.onready = function(krpanointerface){krpano.value = markRaw(krpanointerface);if(old_onready){ old_onready(krpanointerface); };loadimage_partial();};krpano.value.unload();// 检查embedpano函数是否存在if (typeof window.embedpano === 'function') {window.embedpano(embeddingparameters);} else {console.error('embedpano function not found during reload.');}return;}// load a 'partial' (non 360x180) panokrpano.value.image.reset();krpano.value.image.preview = {url:"/src/assets/krpano/partialpano/tiles/preview.jpg"};krpano.value.image.sphere = {url:"/src/assets/krpano/partialpano/tiles/l%l/%0v/l%l_%0v_%0h.jpg", multires:"512,3072x928,6144x1854"};krpano.value.image.hfov = 156.0;krpano.value.image.vfov = 47.0;krpano.value.image.voffset = 9.0;krpano.value.actions.loadpanoimage("RESET", "BLEND(0.35)");// disable the viewing limits to better see the partial pano rangeskrpano.value.view.limitview = "off";// add a contextmenu with different projection settingskrpano.value.actions.includexml("/src/assets/krpano/plugins/contextmenu.xml");// add a helper script for changing the partial pano fov settingskrpano.value.actions.includexml("/src/assets/krpano/partialpano/partialpano_helpertool.xml", null, function(){});// add an other krpano viewer behind the current viewer one// to display a grid-pano behind the partial pano and sync its movements{var bg = krpano.value.addlayer();bg.setvars({type:"krpano",width:"100%",height:"100%",parent:"BGLAYER"});bg.onloaded = function(){bg.krpano.image.reset();bg.krpano.image.preview = {type:"grid(cube,64,64,512,0xAA9900,0x222222)"};bg.krpano.actions.loadpanoimage();// sync the viewkrpano.value.events.addListener("onviewchange", function(){bg.krpano.view.syncto( krpano.value.view );})}}
}onMounted(() => {setup()
})
</script>
<style scoped>h1{ color:white; font-size:16px; margin-top:0; }
#localusagenote{ background:white; border:1px solid red; border-radius:5px; color:red; padding:8px; margin:20px 16px 20px 0; }
#content { flex:1; display:flex; overflow:auto; }
#pano { width: 100vw; height: 100vh; flex:auto; border:1px solid #FFF; border-radius:11px; overflow:hidden; box-shadow:0px 3px 14px rgba(0,0,0,0.5); }
#buttons { padding:0 16px; overflow:auto; }
.button{ background:#fff; color:#245; display:inline-block; border:1px solid #333; border-radius:5px; box-shadow:0px 1px 3px rgba(0,0,0,0.3); cursor:pointer; padding:4px 8px; margin:4px 0; user-select:none; -moz-user-select:none; }
.button:hover{ background-color:#EEEEEE; }/* mobile layout */
@media (max-width:500px)
{#content{ flex-direction:column;  }#pano{ min-height:60vh; }#buttons { padding: 0; margin-top:16px;  }
}/* workaround for a Firefox bug:- backdrop-blur effects don't work when the container has a border-radius:- https://stackoverflow.com/questions/75137879/bug-with-backdrop-filter-in-firefox
*/
@-moz-document url-prefix(){ #pano{ border-radius:0px; } }
</style>
...
<script src="/src/assets/krpano/tour2.js"></script>
...
目录结构

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88432.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88432.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/88432.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年AI面试推荐榜单,数字化招聘转型优选

一、AI面试为何成为2025招聘标配&#xff1f; 2025年企业对AI面试的需求从“效率工具”升级为“战略级招聘伙伴”。数据显示&#xff0c;超7成企业计划年内全面引入AI面试&#xff0c;其中技术岗、全球化招聘及蓝领用工场景需求增速显著。以下以综合技术实力、行业口碑及落地能…

人机协作新篇章:艾利特按摩机器人如何重塑健康生活

引言&#xff1a;按摩机器人的需求爆发 在快节奏的现代生活中&#xff0c;亚健康人群比例持续攀升。据《全球健康产业白皮书》显示&#xff1a; 85%的都市人群存在肌肉劳损问题专业理疗师供需缺口达1&#xff1a;3200精准按摩服务成本年均增长18% 这一背景下&#xff0c;按摩…

从代码学习深度学习 - 情感分析:使用循环神经网络 PyTorch版

文章目录 前言1. 加载与预处理数据集数据读取与词元化构建词汇表截断、填充与数据迭代器2. 构建循环神经网络模型双向RNN模型(BiRNN)详解权重初始化3. 加载预训练词向量构建词向量加载器将预训练向量注入模型4. 训练与评估模型定义训练函数可视化训练过程5. 模型预测编写预测…

化于无形的 lambda 语法

针对数据集合的每个成员进行计算是很常见的任务&#xff0c;用循环语句当然能实现&#xff0c;但比较麻烦&#xff0c;算个简单的求和都要写很多句代码。 编程语言经常把这些运算封装成函数&#xff0c;比如 Python 的 sum 函数&#xff0c;求订单价格总和是这样写的&#xff…

day42

1. 回调函数&#xff1a;把一个函数当成“任务清单”交给另一个函数&#xff0c;等后者干完活&#xff0c;就按清单执行这个函数。比如点外卖后留电话&#xff0c;骑手送到了就打电话&#xff08;执行回调&#xff09;通知你。 2. lambda函数&#xff1a;临时写的超短函数&…

百度日志中台前端重构实践

日志中台是百度内部针对打点数据的全生命周期管理平台&#xff0c;作为公司日志数据的唯一入口&#xff0c;承担以下核心职能&#xff1a;1.功能覆盖&#xff1a;提供从数据采集、传输、存储到查询分析的一站式服务&#xff0c;支持产品运营分析、研发性能监控、运维管理等多元…

資訊安全 (Information Security)3大 “CIA“要素

資訊安全之3大要素&#xff0c;業界慣用"CIA"稱之&#xff0c;包括機密性 (Confidentiality)、完整性(Integrity)與可用性(Availability)&#xff1b;更應增加諸如鑑別性、可歸責性、不可否認性與可靠性。 1.機密性 (Confidentiality) 機密性是指採用適當的安全機制…

php后台增加权限控制

背景 最近在对接某大厂&#xff0c;部署差不多了&#xff0c;但是在漏洞扫描环节有问题&#xff0c;前端是用vue代码写的。后端是php。发现前端路由可以拦截未登录的url。但是后端php接口不用登录就能访问&#xff0c;很危险 解决方法 一、创建 Auth 中间件 首先创建一个专门…

跨平台后端编程ASP.NET CORE Razor新一代Web开发框架C#

asp.net core Razor动态语言编程代替asp.net .aspx更高级吗&#xff1f; https://blog.csdn.net/xiaoyao961/article/details/148846065 C#Blazor应用-跨平台WEB开发VB.NET-CSDN博客 https://blog.csdn.net/xiaoyao961/article/details/148846437 Products.razor文件,Blazor和…

Storm-Pulse 全国强对流预报接口深度解析:从技术原理到防灾应用(附API接入示例)

2025年6月14日安徽省气象台发布的强对流黄色预警中&#xff0c;合肥、阜阳等地出现了小时雨量 30-50 毫米的短时强降水和8-10级雷暴大风&#xff0c;局地甚至观测到云闪现象。强对流天气是指由强烈上升气流引发的突发性、高破坏力天气现象&#xff0c;涵盖了短时强降水、雷暴大…

2024中国科学技术大学计算机保研上机真题

中国科学技术大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/problem 运动会比赛日程安排 题目描述 某运动会设立 M M M 个比赛项目&#xff0c;每个运动员&#xff08;共 N N N 个运动员&#xff09;可以参加多个项目&#xff0c;每个项目的比赛时长…

(LeetCode 面试经典 150 题) 122. 买卖股票的最佳时机 II (贪心)

题目&#xff1a;122. 买卖股票的最佳时机 II 思路&#xff1a;贪心&#xff0c;时间复杂度0(n)。 当天比前一天值大&#xff0c;就进行卖出的交易。购入是默认前一天已购入。 C版本&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int…

一篇文章了解XML

一、什么是 XML&#xff1f; XML 是一种结构化数据的标记语言&#xff0c;用来存储、传输和描述数据。 它和 HTML 很像&#xff0c;但它的标签是自定义的&#xff0c;不限定格式和外观&#xff0c;而是强调数据的结构和含义。 XML不是用来展示数据的&#xff0c;HTML是用来展…

react经验:i18n配置换行的富文本

应用场景 调用"useTranslations().rich"输出换行的文本。 实施步骤 1.翻译文件 例如:zh.json {"home":"第一行<br></br>第二行<font>加粗文本</font>" }2.调用rich处理标签 t.rich(home, { br: () > <br /&g…

Wpf中控件作为Binding的源

1、Xaml代码 Slider 滑动控件&#xff0c;设置了最小值0和最大值100&#xff0c;TextBox作为Binding的目标对象&#xff0c;它的Text属性作为Binding目标的属性&#xff0c;Binding的源的Source就是slider_test这个Slider滑动控件&#xff0c;Binding的源的Path就是slider_test…

【机器学习深度学习】典型的模型训练过程

目录 一、模型训练直观图 二、核心目标 三、训练过程详解 3.1 训练阶段 1、准备起点&#xff1a;输入数据 初始参数权重 2、模型尝试预测&#xff1a;变换计算 (前向传播) 3、检查错误&#xff1a;计算损失值 4、学习的关键&#xff1a;反向传播 梯度下降法 (调整权…

Mysql8.0版本未卸载干净如何重新下载

Mysql8.0版本未卸载干净如何重新下载 安装前准备 清理现有安装&#xff08;确保干净环境&#xff09; :: 停止并卸载现有MySQL服务 net stop MySQL >nul 2>&1 sc delete MySQL >nul 2>&1:: 删除旧数据目录 rd /s /q "C:\ProgramData\MySQL" &…

垃圾收集器G1ZGC详解

G1收集器(-XX:UseG1GC) G1 把堆划分为许多大小相同的 Region&#xff08;默认 1~32 MB&#xff0c;一个堆通常包含上千个 Region&#xff0c;JVM目标是不超过2048个Region(JVM源码里TARGET_REGION_NUMBER 定义)&#xff09; 不再是传统的 Eden、Survivor、Old 静态分代模型&…

Bootstrap 5学习教程,从入门到精通,Bootstrap 5 弹出框(Popovers) 语法知识点及案例(22)

Bootstrap 5 弹出框(Popovers) 语法知识点及案例 一、弹出框基本概念 弹出框(Popovers)是Bootstrap提供的一个小型覆盖层组件&#xff0c;用于显示额外的信息&#xff0c;当用户点击某个元素时出现&#xff0c;再次点击时消失。 二、弹出框基本语法知识点 1. 必需属性 dat…

轻巧灵动,智启未来 ——Kinova Gen3 Lite 机器人轻松解锁各行业自动化新姿势

近年来&#xff0c;Kinova Gen3 Lite 机器人凭借其卓越的性能、灵活的应用能力以及出色的性价比&#xff0c;在全球范围内掀起了一股热销狂潮。无论是科研机构、高校实验室&#xff0c;还是工业制造企业&#xff0c;都对它青睐有加。其销量持续攀升&#xff0c;市场占有率不断扩…