Overlayer(覆盖层)是一个很重要的机制,它可以在可缩放图片上显示额外的信息。

1.简单应用

以下是我做出的一个小例子:

看这小老鼠头部的红色框内的部分就是一个分离出来的overlay。

介绍一下overlays:这是一个对象数组,定义了显示框viewer中固定的overlays层。overlays层通过这个选项来添加,之后这个块就从OpenSeadragon中去除了。

既然是数组,当然我们就可以定义很多个overlay。

下面结合这个Demo的核心代码来讲解:

 var openSeadragon = new OpenSeadragon({
...
//定义覆盖层overlays
overlays: [{
id : "overlays-div", //设置overlay的id
x:0.6, //起始位置x
y:0.16, //起始位置y
width:0.1, //设置宽度
height:0.08, //设置高度
className:"highlight", //设置overlay的类名
}],
},
...
});

这是在之前Demo的基础上添加的代码,“...”表示省略的代码,OpenSeadragon的简单配置和怎么显示在HTML中请参考:学习OpenSeadragon之一(一个显示多层图片的开源JS库)

overlays:[{...}]会生成一个新的 overlays对象,id和className分别是这个对象的id名和类名,我们可以通过这两个参数来找到访问它并且设置其样式。

x、y是overlays的左上角起点位置,这是相对于整个图片大小比例来说的,比例x=0 y=0就是整幅图片左上角。

不过经过我测试(开启调试模式比较),y的值是相对于宽度的比例来说的,例如整幅图的 宽=100 高=50, x=0.1 y=0.1,那么起点位置为(100*0.1,100*0.1)=(10,10),跟整幅图高度没有关系。

width和height分别是overlays的宽度和高度,也是相对于整幅图像宽的比例。

如果仅仅做以上修改,我们发现图像没有任何改变,这是因为我们仅仅得到了overlays对象却没有修改其样式。

因为修改overlays对象样式必须在head的style里修改(官方是这么说的),以下是这个例子的完整代码:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>OpenSeadragon_Demo1</title>
<script src="openseadragon.min.js"></script>
</head>
<style>
#overlays-div{
border: 1px solid red;
}
</style>
<body>
<h1>overlays</h1>
<div id="openSeadragon1" style="width:800px; height:350px; border:1px solid blue;"></div>
</body>
<script type="text/javascript">
var openSeadragon = new OpenSeadragon({
id: "openSeadragon1", //指定显示的div
prefixUrl: "./images/", //库中按钮等图片所在文件夹
tileSources: {
Image: {
xmlns: "http://schemas.microsoft.com/deepzoom/2009",//指令集
Url: "./ccc_files/", //图片库地址
Overlap: "1", //相邻图片重合的像素
TileSize: "256", //单个切片(正方形)的边长
Format : "jpg", //切片格式
//图片总大小
Size:{
Height: "1181",
Width: "2953",
},
},
//定义覆盖层overlays
overlays: [{
id : "overlays-div", //设置overlay的id
x:0.6, //起始位置x
y:0.16, //起始位置y
width:0.1, //设置宽度
height:0.08, //设置高度
className:"highlight", //设置overlay的类名
}],
},
//debugMode : true, //开启调试模式
});
</script>
</html>

2.像素设置 overlays的位置和长宽

可以用像素值设置overlays的位置和长宽,只要将x,y换成px,py即可:

 overlays: [{
id : "overlays-div", //设置overlay的id
px:950, //起始位置x
py:220, //起始位置y
width:500, //设置宽度
height:450, //设置高度
className:"highlight", //设置overlay的类名
}],

效果:

之所以设置了宽500 高450的像素看上去却没那么大,是因为这是按照图片放大到最大分辨率时候的像素,它会随图片缩小而缩小,以确保比例是一定的。

3.将overlays定义在已经定义的div中

上面的例子是定义一个id没有被创建的overlays,这样会自动创建一个新的overlays,例如上图的红框。

我们也可以指定一个已经被定义的div为overlays,这样做的好处是,我们可以往overlays里面添加文字、图片等所有HTML里的内容,然后再将其放入整个图片框viewer中。

核心代码:

 <body>
<h1>overlays</h1>
<div id="openSeadragon1" style="width:800px; height:350px; border:1px solid blue;"></div>
<div id="overlays-div" class="overlays" >
随便百度一张图片作为overlays
<img src="http://e.hiphotos.baidu.com/image/pic/item/21a4462309f790528c5b54390ff3d7ca7bcbd574.jpg"
alt="">
</div>
</body>
<script>
var openSeadragon = new OpenSeadragon({
...
overlays: [{
id : "overlays-div", //设置overlay的id
px:2300, //起始位置x
py:0, //起始位置y
width:800, //设置宽度
height:1181, //设置高度
className:"overlays", //设置overlay的类名
}],
},
...
});
</script>

4.使用addOverlay函数和removeOverlay函数实现overlay的创建与销毁

OpenSeadragon给我们提供了内置函数对overlay进行操作。

以下用一个外部按钮按下,就显示overlay,再次按下就销毁overlay的例子来说明:

按下“显示overlays”前:

按下“显示overlays”后:

再次按下“销毁overlays后”图片消失。

核心代码就是对addOverlay和removeOverlay的调用,以下是这个demo的完整代码:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>按钮操作overlays的创建与销毁</title>
<script src="openseadragon.min.js"></script>
</head>
<body>
<h1>按钮操作overlays的创建与销毁</h1>
<button id="button">显示overlays</button>
<div id="openSeadragon1" style="width:800px; height:350px; border:1px solid blue;"></div>
</body>
<script type="text/javascript">
var openSeadragon = new OpenSeadragon({
id: "openSeadragon1", //指定显示的div
prefixUrl: "./images/", //库中按钮等图片所在文件夹
tileSources: {
Image: {
xmlns: "http://schemas.microsoft.com/deepzoom/2009",//指令集
Url: "./ccc_files/", //图片库地址
Overlap: "1", //相邻图片重合的像素
TileSize: "256", //单个切片(正方形)的边长
Format : "jpg", //切片格式
//图片总大小
Size:{
Height: "1181",
Width: "2953",
},
},
},
}); var overlay = false; //overlay标记位,存在为true,不存在为false
var btn = document.getElementById('button'); //获取按钮DOM对象
btn.onclick = //按下按钮,执行创建或者销毁overlays
function() {
if (overlay) {
openSeadragon.removeOverlay("overlays-div"); //根据id,销毁移除overlay
//改变按钮提示状态
btn.innerHTML = "显示overlays";
} else {
var elt = document.createElement("div"); //创建一个div对象作为overlays
elt.id = "overlays-div"; //设置div对象的id
//执行添加overlay的函数
openSeadragon.addOverlay({
element: elt, //overlay的元素名称(上面创建的div)
location: new OpenSeadragon.Rect(0.75, 0.1, 0.2, 0.2), //设置overlay在view上的位置
});
//为overlays添加图片
elt.innerHTML = "<img src='http://e.hiphotos.baidu.com/image/pic/item/21a4462309f790528c5b54390ff3d7ca7bcbd574.jpg'>";
//改变按钮提示状态
btn.innerHTML = "销毁overlays";
}
overlay = !overlay; //标记位取反
};
</script>
</html>

官方demo参考:

http://openseadragon.github.io/examples/ui-overlays/

学习OpenSeadragon之三 (覆盖层Overlayer的使用)的更多相关文章

  1. Java学习-029-JSON 之三 -- 模仿 cssSelector 封装读取 JSON 数据方法

    前文简单介绍了如何通过 json-20141113.jar 提供的功能获取 JSON 的数据,敬请参阅:Java学习-028-JSON 之二 -- 数据读取. 了解学习过 JQuery 的朋友都知道, ...

  2. 学习OpenSeadragon之五(工具条toolbar与自定义按钮)

    OpenSeadragon简介:学习OpenSeadragon之一(一个显示多层图片的开源JS库) 一.工具条toolbar设置 OpenSeadragon为我们提供了现成的工具条toolBar,工具 ...

  3. 学习OpenSeadragon之四(导航视图)

    OpenSeadragon介绍以及上手:学习OpenSeadragon之一 OpenSeadragon主要用于地图.医学图像等需要放大缩小分层显示的图像显示. 1.简单例子 导航视图就是在一个小框中显 ...

  4. Lua和C++交互 学习记录之三:全局值交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  5. CAN总线学习系列之三——CAN控制器的选择

    CAN总线学习系列之三——CAN控制器的选择 在进行CAN总线开发前,首先要选择好CAN总线控制器.下面就比较一些控制器的特点. 一些主要的CAN总线器件产品 制造商 产品型号 器件功能及特点 Int ...

  6. SQL Sever 学习系列之三

    SQL Sever 学习系列之三 SQL Server 学习系列之一(薪酬方案+基础) SQL Server 学习系列之二(日期格式问题)         五.经理今天刚谈到with的用法(with的 ...

  7. 学习OpenSeadragon之一(一个显示多层图片的开源JS库)

    OpenSeadragon是一个可以显示多层图片(可放大缩小)的Web库,基于JavaScript,支持桌面和手机. 由于我项目需要,却没有找到任何中文教程,因此在官网上一边学习,一边总结于此. 官网 ...

  8. bootstrap学习笔记之三(组件的使用)

    bootstrap组件需要引入bootstrap.js才行,当然要引入bootstrap.js首先得引入JQuery. 一.下拉菜单 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另 ...

  9. Gradle学习系列之三——读懂Gradle语法

    在本系列的上篇文章中,我们讲到了创建Task的多种方法,在本篇文章中,我们将学习如何读懂Gradle. 请通过以下方式下载本系列文章的Github示例代码: git clone https://git ...

随机推荐

  1. SAE、搜狐云景和百度云之初见

    近期有需求将我们的应用部署到公有云的服务平台上,于是找了几家公有云服务做了一下调研, 首先对比一下他们提供的功能: 功能 SAE 搜狐云景 百度云 版本控制工具 svn  GIT,和百度云的比起来,用 ...

  2. BZOJ 1007 [HNOI2008]水平可见直线

    1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4453  Solved: 1636[Submit][Sta ...

  3. BZOJ1629: [Usaco2007 Demo]Cow Acrobats

    1629: [Usaco2007 Demo]Cow Acrobats Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 601  Solved: 305[Su ...

  4. DLL——SDL_PingGe

    这篇随笔专门做SDL的DLL开发. 下面这个版本暂且称为Beta版本吧. /* typedef void (*FUNCTION)(void); HMODULE HDll; HDll = LoadLib ...

  5. java的内部类及匿名内部类

    在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类 内部类和外层封装它的类之间存在逻辑上的所属关系 Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称 ...

  6. 用js代码判断是否IE浏览器

    判断是否IE的方法: var isIE = function(ver) { var div = document.createElement("div"), status; div ...

  7. Citrix 服务器虚拟化之十三 Xenserver虚拟机内存优化与性能监控

    Citrix 服务器虚拟化之十三   Xenserver虚拟机内存优化与性能监控 XenServer的DMC通过自动调节运行的虚拟机的内存,每个VM分配给指定的最小和最大内存值之间,以保证性能并允许每 ...

  8. Cocos2D-X2.2.3学习笔记12(瞬间动作)

    到眼下我们已经学习了有 坐标系统 内存管理 UI系统 事件处理 几何图形 今天我们来学习动作管理OK 我们来看看类结构图 CCAction   全部动作的基类 以下派生了三个子类:CCFiniteTi ...

  9. Jetty开发指导:框架

    Spring设置 你能嵌入Jetty到你的项目中,也能够使用差点儿全部的IoC类型框架,包含Spring.假设全部你想做的是在你的Spring中设置Jetty Server,那么以下的xml片段能够作 ...

  10. LA 6450 Social Advertising

    [题目] 给一个无向图,每当对某个点操作,该点以及与该点相连的点都获得标记,问标记所有点至少需要操作多少次 输入 第一行为T,表示测试数据组数 每组测试数据第一行为n(1<=n<=20)表 ...