首先,本人在项目动态加载图片是根据点击图片名称来获取图片所在地址,从而使其打开一个新的窗口显示图片的。这里根据每个人的也许需求进行更改(要么就是在本页面底下打开要么就是新建一个窗口打开),不做探讨。

这里先介绍一下HTML界面,只有两个<div>标签,如下:

<div class="preview-scene" data-dojo-attach-point="previewScene" id="previewScene">
<div class="preview-scene-data" data-dojo-attach-point="previewSceneData" id="previewSceneData"> </div>
</div>
previewScene指的是预览的总界面;previewSceneData指的是具体的预览照片放的位置。
接下来就是创建预览功能了。如下:_createPreview: function(fileRoute){ var container = this.previewSceneData;
    var imgContainer;
html.empty(container);
var fileType = fileRoute.split(".");
var hzm = fileType[fileType.length - 1];
//根据传过来的类型判定是图片还是文件创建
if(hzm === "jpg" || hzm === "jpeg" || hzm === "png" || hzm === "gif" || hzm === "bmp"|| hzm === "tiff"|| hzm === "JPG"|| hzm === "JPEG"|| hzm === "PNG"|| hzm === "BMP" || hzm === "TIFF"){
imgContainer = domCon.create('img',{src: fileRoute, style:'width: 560px; height:420px;position: absolute;left: 0; top: 0; right: 0; bottom: 0; margin:auto; display: block;cursor:pointer;'}, container);
} else if(hzm === "docx" || hzm === "doc" || hzm === "pdf" || hzm === "xls" || hzm === "xlsx" || hzm === "txt" || hzm === "DOCX" || hzm === "DOC" || hzm === "PDF" ) {
domCon.create('iframe',{src: fileRoute, style:'width: 560px; height:420px; margin: 0 auto; display: block'}, container);
} else {
alert("您的文件类型不支持预览!");
}
on(imgContainer,'mousewheel', lang.hitch(this, function(e){
this._change(e, imgContainer);
}));
}, _change: function (e, imgContainer) {
var e = window.event || e;
var oper = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));//wheelDelta和detail
imgContainer.style.width = Math.max(80, Math.min(imgContainer.width*3, imgContainer.width + (80 * oper))) + "px";
imgContainer.style.height = Math.max(60, Math.min(imgContainer.height*3, imgContainer.height + (60 * oper))) + "px";
return false;
}, 解释:fileRoute指图片所在的具体地址,用于放在创建的img标签中的src;container 指的是这个HTML中的data-dojo-attach-point;
那么实现放大缩小功能靠的是_change方法,这个方法监听着动态创建的imgContainer的‘mousewheel’事件。当鼠标滚轮发生滚动的时候,触发_change事件,然后再_change事件里定义
imgContainer的新的宽度和高度,并设置最小宽度和高度。
图片由中心进行缩小和放大,主要是要将图片置于外边框的中心,使其垂直和水平都居中,如设置它的
style:'width: 560px; height:420px;position: absolute;left: 0; top: 0; right: 0; bottom: 0; margin:auto;
首先设置其高宽,再把position设为absolute,top、left、right、bottom均设为0,margin改为auto即可。

dojo动态生成图片并按中心缩放的更多相关文章

  1. 在WPF里面实现以鼠标位置为中心缩放移动图片

    原文:在WPF里面实现以鼠标位置为中心缩放移动图片 在以前的文章使用WPF Resource以及Transform等技术实现鼠标控制图片缩放和移动的效果里面,介绍了如何在WPF里面移动和放大缩小图片, ...

  2. HttpHandler动态生成图片

    1.向服务器请求返回图片,浏览器是不知道服务上有这个图片的存在的,只是发出请求,接收请求,显示图片 string path = context.Server.MapPath("~/1.jpg ...

  3. 动态生成图片 保存到OutputStream

    #region 把图片Copy到输出流 //获得图片全路径 string path = context.Server.MapPath("~/img/158_003.jpg"); / ...

  4. CSS3图片以中心缩放,放大超出隐藏实现

    首页,重点是有一个包裹img标签的容器,这里我们给该容器设置一个class为selfScale <div class="selfScale"> <img sr=& ...

  5. wp8.1 学习笔记 001 动态生成图片 并更改图片位置

    1.在xaml中划分表格 <Grid Name="gr"> <Grid.ColumnDefinitions> <ColumnDefinition> ...

  6. java 根据图片文字动态生成图片

    今天在做热敏打印机打印二维码,并有文字描述,想到的简单的方法就是根据热敏打印机的纸张宽度和高度,生成对应的图片,如下: package com.orisdom.utils; import lombok ...

  7. ASP.NET动态生成图片样式的验证码

    我们在设计用户登录模块时,经常会用到验证码,可以有效地防止黑客软件的恶意破解. 在此我就直接放置一个网页链接,以后用的时候可以当做备忘! 此连接中有多种验证码图片的样式可供参考. http://www ...

  8. laya 下以光标为中心缩放对象

    private MouseWheel(e: Laya.Event) { console.log("event"); let currentSp = e.target as Laya ...

  9. ThinkPHP5 动态生成图片缩略图

    需求场景 不同终端(PC端.手机端.平板),不同界面(列表页.详情页),对图片大小的要求不一样, 如果所有场景下都使用同一尺寸的图片,势必对会网络带宽及服务器性能造成一定的影响,由此需要服务器端能够根 ...

随机推荐

  1. java设计模式概述

    java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模 ...

  2. DedeCms 数据库类使用实例说明 mysql.php

    //dedecms的数据库操作类说明,非常实用,在二次开发中尤其重要.//引入common.inc.php文件require_once (dirname(__FILE__) . "/incl ...

  3. cordova本地浮动框提示插件使用:cordova-plugin-x-toast

    1. 添加插件:cordova plugin add cordova-plugin-x-toast 2. 调用方法(浮动提示插件,弹出本地浮动提示框): $cordovaToast.show(mess ...

  4. JDK11&12 新特性学习

  5. return,break,continue三者区别

    详解:http://www.cnblogs.com/yangdabao/p/6172210.html return:直接结束这个方法,后面所有代码不再执行,不管循坏外,还是循环内,全部停止,直接返回 ...

  6. 2018-2019-2 网络对抗技术 20165308 Exp2 后门原理与实践

    2018-2019-2 网络对抗技术 20165308 Exp2 后门原理与实践 1.实验内容 (3.5分) (1)使用netcat获取主机操作Shell,cron启动 (0.5分) (2)使用soc ...

  7. AllocateHWnd SetTimer API

    unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  8. 使用Pandas将多个数据表合一

    使用Pandas将多个数据表合一 将多张数据表合为一张表,便于统计分析,进行这一操作的前提为这多张数据表互相之间有关联信息,或者有相同的列. import pandas as pd unames = ...

  9. Azkaban各种类型的Job编写

    一.概述 原生的 Azkaban 支持的plugin类型有以下这些: command:Linux shell命令行任务 gobblin:通用数据采集工具 hadoopJava:运行hadoopMR任务 ...

  10. outlook 2013撤消已经发送的邮件

    使用Outlook 2013发送邮件的时候,发送后,发现邮件写错了或者其它原因需要撤消发送邮件,这里介绍一下.   工具/原料 outlook 2013 方法/步骤   需要打开已经发送的邮件   点 ...