jQuery 上传头像插件Jcrop的实例

兼容:ie6+,FF,chrome等

示例图:

CSS:

说明:图像比例为110:135

下载包里有
jquery.Jcrop.css

.jc-demo-box{position:
relative; background-color: #e7e7e7; width: 395px; height: 340px;
overflow: hidden; border: 1px solid #c8c8c8;}

#target{max-width:
395px; max-height: 340px;}

.pre-1,.pre-2,.pre-3{
border: 1px solid #c8c8c8;}

.pre-1{ width: 110px;
height: 135px; overflow:hidden; }

.pre-2{ width: 73px;
height: 90px; overflow:hidden; margin-top: 13px; }

.pre-3{ width: 40px;
height: 48px; overflow:hidden;margin-top: 13px; }

.jcrop-holder{overflow:hidden;}

html:

  
 

JS:

$(function(){

var _Jw = ($(‘#target‘).width() - 110) / 2 ,

_Jh = ($(‘#target‘).height() - 135) / 2 ,

_Jw2 = _Jw + 110,

_Jh2 = _Jh + 135;

if($("#target").length >= 1){

var api = $.Jcrop("#target",{

onChange: showPreview,

onSelect: showPreview,

bgFade: true,

bgOpacity: .5,

setSelect: [_Jw, _Jh, _Jw2, _Jh2]

});

}

function showPreview(c){

var iw = $(‘.jcrop-holder>img‘).width(),

ih = $(‘.jcrop-holder>img‘).height(),

rx = 110 / c.w,

ry = 135 / c.h,

rx1 = 73 / c.w,

ry1 = 90 / c.h,

rx2 = 40 / c.w,

ry2 = 48 / c.h,

_data = $(".jc-demo-box").attr("data");

if($.browser.msie && (_data == 90 || _data == 270)){

pre_img2($(‘.pre-1 img‘), rx, ih, ry, iw, c.x, c.y);

pre_img2($(‘.pre-2 img‘), rx1, ih, ry1, iw, c.x, c.y);

pre_img2($(‘.pre-3 img‘), rx2, ih, ry2, iw, c.x, c.y);

}else{

pre_img2($(‘.pre-1 img‘), rx, iw, ry, ih, c.x, c.y);

pre_img2($(‘.pre-2 img‘), rx1, iw, ry1, ih, c.x, c.y);

pre_img2($(‘.pre-3 img‘), rx2, iw, ry2, ih, c.x, c.y);

}

}

$("#idLeft").click(function(e){

imgRotate(-90);

stopEvent(e);

});

$("#idRight").click(function(e){

imgRotate(90);

stopEvent(e);

});

$("#idBig").click(function(e){

imgToSize(20);

stopEvent(e);

});

$("#idSmall").click(function(e){

imgToSize(-20);

stopEvent(e);

});

});

//图片旋转

var imgRotate = function(deg){

var img1 = $(".jcrop-holder>img"),

img2 = $("#real"),

_data = parseInt($(".jc-demo-box").attr("data"));

if($.browser.msie){

var sin = Math.sin(Math.PI / 180 * (_data + deg));

var cos = Math.cos(Math.PI / 180 * (_data + deg));

var _filter = "progid:DXImageTransform.Microsoft.Matrix(M11=" + cos + "," +  "M12=" + (-sin)

+ ",M21=" + sin+ ",M22=" + cos + ",SizingMethod=‘auto expand‘)";

img1.css({

filter: _filter + "alpha(opacity=60)",

opacity: 0.6

});

img2.css({

filter: _filter

});

$(‘.pre-1 img,.pre-2 img,.pre-3 img‘).css({

filter: _filter

});

var _w = img1.width(),

_h = img1.height();

$(‘.jcrop-holder‘).width(_w).height(_h).css({

left: Math.round((395 - _w) / 2) + ‘px‘,

top: Math.round((340 - _h) / 2) + ‘px‘

});

}else{

var _deg = deg + _data;

var _val =  "rotate("+ _deg + "deg)";

img1.css({

"-webkit-transform": _val,

"-moz-transform": _val,

"-ms-transform": _val,

"-o-transform": _val,

"transform": _val

});

img2.css({

"-webkit-transform": _val,

"-moz-transform": _val,

"-ms-transform": _val,

"-o-transform": _val,

"transform": _val

});

$(‘.pre-1 img,.pre-2 img,.pre-3 img‘).css({

"-webkit-transform": _val,

"-moz-transform": _val,

"-ms-transform": _val,

"-o-transform": _val,

"transform": _val

});

}

if( deg > 0){

if(_data == 270){

_data = 0;

}else{

_data = _data + 90;

}

}else{

if(_data == 0){

_data = 270;

}else{

_data = _data - 90;

}

}

$(".jc-demo-box").attr("data", _data);

}

//放大缩小图片

var imgToSize = function (size) {

var img1 = $(".jcrop-holder>img"),

img2 = $("#real"),

ow=img1.width(),

oh=img1.height(),

rx = $("#small").width(),

ry = $("#small").height(),

cx = $("#small").position().left,

cy = $("#small").position().top,

_w = Math.round(ow + size),

_h = Math.round(((ow + size) * oh) / ow),

_data = $(".jc-demo-box").attr("data");

$(‘.jcrop-holder‘).width(_w).height(_h).css({

left: Math.round((395 - _w) / 2) + ‘px‘,

top: Math.round((340 - _h) / 2) + ‘px‘

});

if($.browser.msie && (_data == 90 || _data == 270)){

img1.width(_h).height(_w);

img2.width(_h).height(_w);

pre_img($(‘.pre-1 img‘), rx, oh, ry, ow, cx, cy, 110, 135);

pre_img($(‘.pre-2 img‘), rx, oh, ry, ow, cx, cy, 73, 90);

pre_img($(‘.pre-3 img‘), rx, oh, ry, ow, cx, cy, 40, 48);

}else{

img1.width(_w).height(_h);

img2.width(_w).height(_h);

pre_img($(‘.pre-1 img‘), rx, ow, ry, oh, cx, cy, 110, 135);

pre_img($(‘.pre-2 img‘), rx, ow, ry, oh, cx, cy, 73, 90);

pre_img($(‘.pre-3 img‘), rx, ow, ry, oh, cx, cy, 40, 48);

}

}

var pre_img2 = function(obj, rx, iw, ry, ih, cx, cy){

obj.css({

width: Math.round(rx * iw) + ‘px‘,

height: Math.round(ry * ih) + ‘px‘,

marginLeft: ‘-‘ + Math.round(rx * cx) + ‘px‘,

marginTop: ‘-‘ + Math.round(ry * cy) + ‘px‘

});

}

var pre_img = function(obj, rx, ow, ry, oh, cx, cy, w, h){

obj.css({

width: Math.round( w / rx * ow) + ‘px‘,

height: Math.round(h / ry * oh) + ‘px‘,

marginLeft: ‘-‘ + Math.round(w / rx * cx) + ‘px‘,

marginTop: ‘-‘ + Math.round(h / rx * cy) + ‘px‘

});

}

下载地址:https://github.com/jianhuayixiao/Jcrop

时间: 2024-12-08 09:44:45

jQuery 上传头像插件Jcrop的实例的相关文章

jQuery 自制上传头像插件-附带Demo实例(ajaxfileupload.js第三弹)

这篇文章主要是对前两篇关于ajaxfileupload.js插件的文章 <ASP.NET 使用js插件出现上传较大文件失败的解决方法(ajaxfileupload.js第一弹> <jQuery 关于ajaxfileupload.js插件的逐步解析(ajaxfileupload.js第二弹)> 的一个收关.但是最初也是因为想做这么一个功能,一点一点的引发出了好多问题,不断去学习,研究,才写了这三篇. 早些时候已经实现了上传头像的功能,但是代码却是零零散散的,有html,有jQuery

上传文件插件dropzone的实例

html: <div class="field"> <div id="file" class="dropzone"> <div class="dz-message needsclick"> <font><font>Drop files here or click to upload.</font></font><br> <sp

Jcrop+uploadify+php实现上传头像预览裁剪

最近由于项目需要,所以做了一个上传头像预览并且可以预览裁剪的功能,大概思路是上传的图片先保存到服务器,然后通过ajax从服务器获取到图片信息,再利用Jcrop插件进行裁剪,之后通过PHP获取到的四个裁切点的坐标进行裁剪. 首先看一下uploadify上传插件的API: uploader : uploadify.swf 文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击后淡出打开文件对话框,默认值:uploadify.swf.script :   后台处理程序的相对路径 .默认值:

file API+JCrop 选择、裁剪并上传头像

file API,直接读取本地文件,绕过了后台处理再返回前台的过程,使编程更简单.fileAPI和JCrop的结合使用上传头像. 1.html部分 <input id="demo" type="file" onchange="showPic();"/> <img id="avatar" src=""> 2.fileAPI预览图片(jquery) <script type=&qu

jQuery上传插件Uploadify使用详解(转发原作者冯威)

jQuery上传插件Uploadify使用详解 本文Uploadify版本为2.1.0,已经过时,截止(2016-09-25)最新版本3.2.1的详细介绍请移步<jQuery上传插件Uploadify使用详解(3.2.1)> Uploadify是jQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例时php版本的,本文将详细介绍Uploadify在Aspnet中的使用,您也可以点击下面的链接进行演示或下载. 官方下载 官方文档 官方演示 首先按下面的步骤来实现一个简单的

jQuery之批量上传文件插件之一

$("#uploader").plupload({     /*常规设置*/     runtimes:'html5,flash,silverlight,html4',     url:'hyzx/seller/commPicUpload.action',     /*最大文件限制b, kb, mb, gb, tb */     max_file_size:'1mb',     /*是否生成唯一文件名,如果为true会为上传的文件唯一的文件名.*/     unique_names:t

Jquery 上传插件 FineUploader 在 webform 和 mvc 中的使用;

  多文件上传组件FineUploader使用心得 FineUploader 结合 一般处理程序 [上传示例] 参考:http://www.cnblogs.com/dudu/archive/2012/11/27/fine_uploader_mvc_ajax.html  asp.net mvc示例 参考 :http://www.cnblogs.com/chenkai/archive/2013/01/04/2844702.html  http://www.cnblogs.com/guero/p/38

jquery上传插件uploadify 报错http error 302 解决方法之一

前段时间用到jquery上传插件uploadify时,始终出现系统报出 http error 302 的错误. 网上大量搜集信息,基本上都是说session值丢失的问题,根据网友提供的解决方案进行修改,问题并没有解决. 因此,不排除这是解决302错误的解决方法之一,但是我接下来提出另一解决方案,考虑到异步传输的问题,供大家参考(反正我是成功了). 首先是uploadify初始化: $(function() {           $('#projectfile').uploadify({    

JQuery上传插件Uploadify使用详解及错误处理

转自:http://www.jb51.net/article/43498.htm 关于JQuery上传插件Uploadify使用详解网上一大把,基本上内容都一样.我根据网上的步骤配置完成后,会报一些错误,而我根据这些错误去网上找解决方案,却没有相关资料,所以为了不让更多的朋友走弯路,我把我遇到的一些问题进行汇总,也方便我自己以后查阅. 什么是Uploadify Uploadify是JQuery的一个上传插件,支持多文件上传,实现的效果非常不错,带进度显示. 官网提供的是PHP的DEMO,在这里我