<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta content="initial-scale=1.0,maximum-scale=1.0,width=device-width" name="viewport">
<title>Document</title>
</head>
<body>

<style>

*
{
margin:0;
padding:0;
}
.content{
position:relative;
background:yellow;

}
.img
{

}
.selectContainer
{
position: absolute;
border:1px solid rgba(255,255,255,0.5);
border-radius: 50%;
}
#info
{
height:50px;
}
</style>

<div id="info"></div>
<input type="file" accept="image/*" id="selectFile" />
<div class="content" id="content">

<img alt="选择图片" class="img" id="selectImg"/>
<div class="selectContainer"></div>

</div>
<canvas id="canvas"> </canvas>

<script type="text/javascript" src="js/touch.min.js"></script>
<script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="js/hijs.js"></script>

<script>
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
canvas.width = 200;
canvas.height = 200;

var sWidth = document.documentElement.clientWidth;
var sHeight = document.documentElement.clientHeight;
var imgLength =200;
var selectLength = 100;
var cssScale = "";
var cssTransform = "";
var orignImage =new Image();
var height ;
var width ;
var orignHeight;
var orignWidth;
var maxHeight;
var maxWidth;
var maxScal;
var minScal;
var maxOffx;
var maxOffY;
var offx ;
var offy ;
var cutX;
var cutY;
var currentScale=1;
var target = document.getElementById("selectImg");
$("#selectFile").change(function(){

var file = this.files[0];
var fileReader = new FileReader();
fileReader.readAsDataURL(file);

fileReader.onload=function(){
orignImage.src=this.result;
orignHeight =height = orignImage.height;
orignWidth = width = orignImage.width;
if(height>imgLength&&width>imgLength)
{
if(height>width)
{
width = imgLength/height*width;
height = imgLength;
}
else
{
height=imgLength/width*height;
width = imgLength;
}

}else if(height>imgLength&&width<=imgLength)
{
width = imgLength/height*width;
height= imgLength;
}
else if(height<=imgLength&&width>imgLength)
{
height = imgLength/width*height;
width=imgLength;
}

$(".img").attr("src",this.result);
$(".img").width(width).height(height);
$(".img").css("margin","0 auto");
$(".img").css("display","block");
var selectBoderleft= (sWidth - selectLength)/2+"px";
var selectBoderTop = (height-selectLength)/2+"px";
$(".selectContainer").height(selectLength-2);
$(".selectContainer").width(selectLength-2);
$(".selectContainer").css("top",selectBoderTop);
$(".selectContainer").css("left",selectBoderleft);
maxScal=sWidth/imgLength;
minScal=selectLength/width;
maxOffx =(target.offsetWidth - selectLength)/2;
maxOffY =(target.offsetHeight - selectLength)/2;
$("#info").html("Y:"+target.offsetHeight);

}

})

$(function() { //放大缩小

target.style.webkitTransition = 'all ease 0.05s';
touch.on('#content', 'touchstart', function(ev) {
ev.preventDefault();
});
var initialScale = 1;

touch.on('#content', 'pinchend', function(ev) {
currentScale = ev.scale - 1;
currentScale = initialScale + currentScale;
currentScale = currentScale > maxScal ? maxScal : currentScale; //自己调节可以放大的最大倍数
currentScale = currentScale < minScal ? minScal : currentScale; //自己调节可以缩小的最小倍数
cssScale = 'scale(' + currentScale + ')'
target.style.webkitTransform = cssTransform+cssScale;
initialScale = currentScale;
maxOffx =(target.offsetWidth*currentScale - selectLength)/2;
maxOffY =(target.offsetHeight*currentScale - selectLength)/2;

});

});

$(function() {

touch.on('#selectImg', 'touchstart', function(ev) {
ev.preventDefault();
});

var dx, dy;
touch.on('#selectImg', 'drag', function(ev) {
dx = dx || 0;
dy = dy || 0;
offx = dx + ev.x ;
offy = dy + ev.y ;

if(offy>maxOffY)
{
offy=maxOffY
}
if(offy<-maxOffY)
{
offy=-maxOffY;
}
if(offx>maxOffx)
{
offx=maxOffx
}
if(offx<-maxOffx)
{
offx=-maxOffx;
}

cssTransform = "translate3d(" + offx + "px," + offy + "px,0)";

this.style.webkitTransform = cssTransform + cssScale;

cutX = ((width*currentScale- selectLength)/2-offx)*orignWidth/width;
cutY =((height*currentScale- selectLength)/2-offy)*orignHeight/height;
selectWidth = selectLength/currentScale;
selectHeight =selectLength/currentScale;
console.log(currentScale, target,cutX,cutY,selectWidth,selectHeight);
context.drawImage(orignImage,cutX,cutY,orignWidth*selectLength/currentScale/width,orignHeight*selectLength/currentScale/height,0,0,canvas.width,canvas.height);

$("#info").html("cux="+cutX +" cutY="+cutY);

});
touch.on('#selectImg', 'dragend', function(ev) {
dx += ev.x;
dy += ev.y;

});
})

</script>

</body>
</html>

mimi的更多相关文章

  1. 上传时excel类型accept的MIMI类型

    1.excel文件类型 accept='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/v ...

  2. WebSocket - ( 一.概述 )

    说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...

  3. Oracle 内置sql函数大全

    F.1字符函数--返回字符值 这些函数全都接收的是字符族类型的参数(CHR除外)并且返回字符值.除了特别说明的之外,这些函数大部分返回VARCHAR2类型的数值.字符函数的返回类型所受的限制和基本数据 ...

  4. JavaScript面向对象和原型函数

    对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔!). 常用的几种对象创建模 ...

  5. Java内部类的定义和使用

    为什么要用到内部类: 在java开发学习中我们经常会碰到内部类.内部类又有很多的优势:首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法名称参数相同,你应 ...

  6. JS 原型,检索,更新,引用等

    <script type="text/javascript"> var myObject=maker({ first:f, last:1, state:s, city: ...

  7. oracle函数大全(转载)

    F.1字符函数--返回字符值 这些函数全都接收的是字符族类型的参数(CHR除外)并且返回字符值.除了特别说明的之外,这些函数大部分返回VARCHAR2类型的数值.字符函数的返回类型所受的限制和基本数据 ...

  8. ipa如何通过网络进行安装

    苹果手机端应用,如果发布的到Appstore上,往往比较复杂,周期也比较长,Over-the-Air是Apple在 iOS4 中新加的一项技术,目的是让开发者能够脱离Appstore,实现从自己的服务 ...

  9. 12种不适宜使用的javascript语法

    1. == (o゜▽゜)o☆[BINGO!] Javascript有两组相等运算符,一组是==和!=,另一组是===和!==.前者只比较值的相等,后者除了值以外,还比较类型是否相同. 请尽量不要使用前 ...

随机推荐

  1. Algorithm lecture

    当前标签: lecture   组合数求法讲解 BLADEVIL 2014-01-08 18:59 阅读:3 评论:0     mobius反演讲解 BLADEVIL 2014-01-08 18:13 ...

  2. RPC技术

    微软RPC技术学习小结 RPC,即Remote Procedure Call,远程过程调用,是进程间通信(IPC, Inter Process Communication)技术的一种.由于这项技术在自 ...

  3. DevExpress 学习使用之 SplitContainerControl

    无论是 .net framework 自带还是第三方组件,使用 Split 类控件时通常其 Panel 中都会包含多个子控件,在运行时不可避免遇到因改变 splitter 位置或改变窗体大小引起的界面 ...

  4. iOS学习之路十三(动态调整UITableViewCell的高度)

    大概你第一眼看来,动态调整高度是一件不容易的事情,而且打算解决它的第一个想法往往是不正确的.在这篇文章中我将展示如何使图表单元格的高度能根据里面文本内容来动态改变,同时又不必子类化UITableVie ...

  5. 多模块分布式系统的简单服务访问 - OSGI原形(.NET)

    多模块分布式系统的简单服务访问 - OSGI原形(.NET) 先描述一下本篇描述的适用场景(3台server, 各个模块分布在各个Server上,分布式模块互相依赖.交互的场景): 多个OSIG引擎交 ...

  6. requestScope含义

    requestScope表名一个http请求的整个生命周期,它只是一个定义而已,不是一个对象. ${requestScope.info}就等价于request.getAttribute("i ...

  7. ios学习笔记(一)之Object-C

    一:Objective-C语言基础 二:Objective-C类与继承和协议 一:Objective-C语言基础: 1.1)#import 包含头文件  与#include 作用相同 1.2)Obje ...

  8. 彻底抛弃PeopleEditor,SharePoint中利用Jquery Chosen创建新的人员选择器

    彻底抛弃PeopleEditor,SharePoint中利用Jquery Chosen创建新的人员选择器 基于SharePoint平台开发时,人员选择器使用频率是非常高的,但是原生的人员选择器使用太麻 ...

  9. How to make workflow chart using several tools in Linux?

    Just as what I said, I usually use yED to make workflow chart and markdown as the language to write ...

  10. Good Vim plugin for python [Vim python mode]

    Here I got a very neat plugin for vim which is awesome indeed. It's from youtube years before. So le ...