头像截取 图片上传 js插件
先看一下整体效果
页面html
<div class="row">
<div class="tabs-container">
<ul class="nav nav-tabs">
<li>
<a style="color: #676a6c;padding: 10px 30px 10px 40px;"> 上传头像<span style="color:red;">*</span></a>
</li>
<li class="active">
<a data-toggle="tab" href="#tab-1" aria-expanded="true"> 本地上传</a>
</li>
<li class="">
<a data-toggle="tab" href="#tab-2" aria-expanded="false">相册选取</a>
</li>
</ul>
<div class="tab-content">
<div id="tab-1" class="tab-pane active">
<div class="panel-body" style="height:475px">
<div class="container">
<div class="imageBox">
<div class="thumbBox"></div>
<div class="spinner" style="display: none">Loading...</div>
</div>
<div class="cropped"></div>
<div class="action">
<div class="new-contentarea tc">
<a href="javascript:void(0)" class="upload-img">
<label for="upload-file">上传图像</label>
</a>
<input type="file" class="" name="upload-file" id="upload-file" />
</div>
<input type="button" id="btnCrop" class="Btnsty_peyton" value="裁切">
<input type="button" id="btnZoomIn" class="Btnsty_peyton" value="+">
<input type="button" id="btnZoomOut" class="Btnsty_peyton" value="-">
</div>
</div>
</div>
</div>
<div id="tab-2" class="tab-pane">
<div class="panel-body" id="Album" style="height:475px;overflow: scroll;overflow-x: hidden;">
<a class="fancybox" title="选取该照片">
<img src="/assets/img/Inteall/HeadPortrait/user_Doctor_01.jpg" alt="图片" />
</a>
<a class="fancybox" title="选取该照片">
<img src="/assets/img/Inteall/HeadPortrait/user_Doctor_02.jpg" alt="图片" />
</a>
<a class="fancybox" title="选取该照片">
<img src="/assets/img/Inteall/HeadPortrait/user_Doctor_03.jpg" alt="图片" />
</a>
<a class="fancybox" title="选取该照片">
<img src="/assets/img/Inteall/HeadPortrait/user_Doctor_04.jpg" alt="图片" />
</a>
<a class="fancybox" title="选取该照片">
<img src="/assets/img/Inteall/HeadPortrait/user_Doctor_05.jpg" alt="图片" />
</a>
<a class="fancybox" title="选取该照片">
<img src="/assets/img/Inteall/HeadPortrait/user_Doctor_06.jpg" alt="图片" />
</a>
</div>
</div>
</div>
</div>
</div>
页面js引用
<script src="/assets/js/jquery.js"></script>
<script src="~/assets/js/cropbox/cropbox.js"></script>
<script type="text/javascript">
var HeaderImg = null, EditHeaderImg = null, cropper = null, options =
{
thumbBox: '.thumbBox',
spinner: '.spinner',
imgSrc: "/assets/img/Inteall/HeadPortrait/user_Doctor_01.jpg",
loadAfter: function () { $('#btnCrop').click(); }
};
$(window).load(function () {
cropper = $('.imageBox').cropbox(options)
$('#upload-file').on('change', function () {
var reader = new FileReader();
reader.onload = function (e) {
options.imgSrc = e.target.result;
cropper = $('.imageBox').cropbox(options);
}
reader.readAsDataURL(this.files[]);
this.files = null;
});
$('#btnCrop').on('click', function () {
HeaderImg = cropper.getDataURL();
$('.cropped').html('');
//$('.cropped').append('<img src="' + img + '" align="absmiddle" style="width:64px;margin-top:4px;border-radius:64px;box-shadow:0px 0px 12px #7E7E7E;" ><p>64px*64px</p>');
$('.cropped').append('<img src="' + HeaderImg + '" align="absmiddle" style="width:180px;margin-top:4px;border-radius:180px;box-shadow:0px 0px 12px #7E7E7E;"><p>180px*180px</p>');
});
$('#btnZoomIn').on('click', function () {
cropper.zoomIn();
});
$('#btnZoomOut').on('click', function () {
cropper.zoomOut();
});
$(".imageBox").autoScroll();
$("#Album").autoScroll(); $('.fancybox img').each(function () {
$(this).click(function () {
options.imgSrc = $(this).attr('src');
cropper = $('.imageBox').cropbox(options);
$('.nav-tabs li:nth(1) a').click();
$('#btnCrop').click();
});
});
});
</script>
cropbox.js
/**
* Created by ezgoing on 14/9/2014.
*/ "use strict";
(function (factory) {
if (typeof define === 'function' && define.amd) {
define(['jquery'], factory);
} else {
factory(jQuery);
}
}(function ($) {
var cropbox = function (options, el) {
var el = el || $(options.imageBox),
obj =
{
state: {},
ratio: ,
options: options,
imageBox: el,
thumbBox: el.find(options.thumbBox),
spinner: el.find(options.spinner),
image: new Image(),
getDataURL: function () {
var width = this.thumbBox.width(),
height = this.thumbBox.height(),
canvas = document.createElement("canvas"),
dim = el.css('background-position').split(' '),
size = el.css('background-size').split(' '),
dx = parseInt(dim[]) - el.width() / + width / ,
dy = parseInt(dim[]) - el.height() / + height / ,
dw = parseInt(size[]),
dh = parseInt(size[]),
sh = parseInt(this.image.height),
sw = parseInt(this.image.width); canvas.width = width;
canvas.height = height;
var context = canvas.getContext("2d");
context.drawImage(this.image, , , sw, sh, dx, dy, dw, dh);
var imageData = canvas.toDataURL('image/png');
return imageData;
},
getBlob: function () {
var imageData = this.getDataURL();
var b64 = imageData.replace('data:image/png;base64,', '');
var binary = atob(b64);
var array = [];
for (var i = ; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}
return new Blob([new Uint8Array(array)], { type: 'image/png' });
},
zoomIn: function () {
this.ratio *= 1.1;
setBackground();
},
zoomOut: function () {
this.ratio *= 0.9;
setBackground();
},
loadAfter: options.loadAfter || function () { }
},
setBackground = function (IsOnload) {
var w = parseInt(obj.image.width) * obj.ratio;
var h = parseInt(obj.image.height) * obj.ratio; var pw = (el.width() - w) / ;
var ph = (el.height() - h) / ; el.css({
'background-image': 'url(' + obj.image.src + ')',
'background-size': w + 'px ' + h + 'px',
'background-position': pw + 'px ' + ph + 'px',
'background-repeat': 'no-repeat'
});
},
imgMouseDown = function (e) {
e.stopImmediatePropagation(); obj.state.dragable = true;
obj.state.mouseX = e.clientX;
obj.state.mouseY = e.clientY;
},
imgMouseMove = function (e) {
e.stopImmediatePropagation(); if (obj.state.dragable) {
var x = e.clientX - obj.state.mouseX;
var y = e.clientY - obj.state.mouseY; var bg = el.css('background-position').split(' '); var bgX = x + parseInt(bg[]);
var bgY = y + parseInt(bg[]); el.css('background-position', bgX + 'px ' + bgY + 'px'); obj.state.mouseX = e.clientX;
obj.state.mouseY = e.clientY;
}
},
imgMouseUp = function (e) {
e.stopImmediatePropagation();
obj.state.dragable = false;
},
zoomImage = function (e) {
e.originalEvent.wheelDelta > || e.originalEvent.detail < ? obj.ratio *= 1.1 : obj.ratio *= 0.9;
setBackground();
} obj.spinner.show();
obj.image.onload = function () {
obj.spinner.hide();
setBackground('onload'); el.bind('mousedown', imgMouseDown);
el.bind('mousemove', imgMouseMove);
$(window).bind('mouseup', imgMouseUp);
el.bind('mousewheel DOMMouseScroll', zoomImage);
obj.loadAfter();
};
obj.image.src = options.imgSrc;
el.on('remove', function () { $(window).unbind('mouseup', imgMouseUp) }); return obj;
}; jQuery.fn.cropbox = function (options) {
return new cropbox(options, this);
};
})); $.fn.extend({
"preventScroll": function () {
$(this).each(function () {
var _this = this;
if (navigator.userAgent.indexOf('Firefox') >= ) { //firefox
_this.addEventListener('DOMMouseScroll', function (e) { e.preventDefault(); }, false);
} else {
_this.onmousewheel = function (e) {
return false;
};
}
})
},
"autoScroll": function () {
$(this).each(function () {
var _this = this;
if (navigator.userAgent.indexOf('Firefox') >= ) { //firefox
_this.addEventListener('DOMMouseScroll', function (e) {
_this.scrollTop += e.detail > ? : -;
e.preventDefault();
}, false);
} else {
_this.onmousewheel = function (e) {
e = e || window.event;
_this.scrollTop += e.wheelDelta > ? - : ;
return false;
};
}
})
}
});
cropbox.css
@charset "utf-8"; .container {
width: 400px;
position: relative;
font-family: 微软雅黑;
font-size: 12px;
margin-left: 0px;
} .container p {
line-height: 12px;
line-height: 0px;
height: 0px;
margin: 10px;
color: #bbb;
} .action {
width: 400px;
height: 30px;
margin: 10px ;
} .cropped {
position: absolute;
right: -230px;
top: ;
width: 200px;
/*border: 1px #ddd solid;*/
height: 300px;
padding: 4px;
/* box-shadow: 0px 0px 12px #ddd;*/
text-align: center;
} .imageBox {
position: relative;
height: 400px;
width: 400px;
border: 1px solid #aaa;
background: #fff;
overflow: hidden;
background-repeat: no-repeat;
cursor: move;
box-shadow: 4px 4px 12px #B0B0B0;
} .imageBox .thumbBox {
position: absolute;
top: %;
left: %;
width: 200px;
height: 200px;
margin-top: -100px;
margin-left: -100px;
box-sizing: border-box;
border: 1px solid rgb(, , );
box-shadow: 1000px rgba(, , , 0.5);
background: none repeat scroll % % transparent;
} .imageBox .spinner {
position: absolute;
top: ;
left: ;
bottom: ;
right: ;
text-align: center;
line-height: 400px;
background: rgba(,,,0.7);
} .Btnsty_peyton {
float: right;
width: 66px;
display: inline-block;
margin-bottom: 10px;
height: 30px;
line-height: 30px;
font-size: 14px;
color: #FFFFFF;
margin: 0px 2px;
background-color: #4dbec4;
border-radius: 3px;
text-decoration: none;
cursor: pointer;
box-shadow: 0px 0px 5px #B0B0B0;
border: 0px #fff solid;
}
/*选择文件上传*/
.new-contentarea {
width: 100px;
overflow: hidden;
margin: auto;
position: relative;
float: left;
} .new-contentarea label {
width: %;
height: %;
display: block;
} .new-contentarea input[type=file] {
width: 100px;
height: 30px;
background: #;
margin: auto;
position: absolute;
margin-right: -94px;
top: ;
right /*\**/: 0px\;
margin-right /*\**/: 0px\;
width /*\**/: 10px\;
opacity: ;
filter: alpha(opacity=);
z-index: ;
} a.upload-img {
width: 100px;
display: inline-block;
margin-bottom: 10px;
height: 30px;
line-height: 30px;
font-size: 14px;
color: #FFFFFF;
background-color: #4dbec4;
border-radius: 3px;
text-decoration: none;
border: 0px #fff solid;
box-shadow: 0px 0px 5px #B0B0B0;
} a.upload-img:hover {
background-color: #ec7e70;
} .tc {
text-align: center;
}
头像截取 图片上传 js插件的更多相关文章
- 图片上传JS插件梳理与学习
项目的oper端和seller端,用了两个不同插件,简单了解一下: 一.seller端:AjaxUpload.js seller端使用的是 AjaxUpload.js ,封装好的一个库.调用时传入参数 ...
- 图片上传jQuery插件(兼容IE8)
图片上传jQuery插件(兼容IE8) 代码来源 :https://github.com/zilan93/uploadImg html <!DOCTYPE html> <ht ...
- 百度编辑器前后端二开图片上传Js Thinkphp tp5 ueditor
百度编辑器图片上传Jsueditor.all.min.js 下载链接 链接:https://pan.baidu.com/s/1VNgw9ELgRRHKeCQheFkQTw 提取码:fnfi 使用方法: ...
- springMVC3 ckeditor3.6 图片上传 JS回调
一.引入js文件 <script type="text/javascript" src="<%=base %>/resources/ckeditor/c ...
- 适用于各浏览器支持图片预览,无刷新异步上传js插件
文件上传无疑是web应用中一个非常常用的功能,不管是PHP.jsp还是aspx.mvc等都会需要文件上传,但是众所周知当使用自带的文件上传功能时总会出现页面刷新的情况.当然现在有了html5这个好东西 ...
- 阿里云OSS图片上传plupload.js结合jq-weui 图片上传的插件
项目中用到了oss上传,用的plupload,奈何样式上不敢恭维,特别是放在移动端上使用.于是自己把它移植到了jq weui的上传图片组件上. 更改:选择照片后确认即及时上传至oss服务器,不限制上传 ...
- 图片上传js
var imgURL; function getImgURL(node) { try{ var file = null; if(node.files && node.files[0] ...
- js截取图片上传(仅原理)----闲的无聊了代码就不共享了!写的难看,不好意思给你们看了(囧)
就算世界再坑爹,总有一些属性能带你走出绝望(伟大的absolute) 今天吐槽一下!......在我的世界里没有正统UI,所以效果图永远都是那么坑爹! 这里我要感谢有个position:absolut ...
- ASP.Net MVC3 图片上传详解(form.js,bootstrap)
图片上传的插件很多,但很多时候还是不能切合我们的需求,我这里给大家分享个我用一个form,file实现上传四张图片的小demo.完全是用jquery前后交互,没有用插件. 最终效果图如下: 玩过花田人 ...
随机推荐
- SQL SERVER 存储过程中SELECT 返回值如何赋值给变量
今天在处理一个问题时,使用到一个存储过程,是用于更新并获取最新ID的.在使用过程中,需要获取到这个ID并赋值给变量,结果用EXEC @ID = 存储过程的方式获取失败了.具体情况如下: 为了还原整个情 ...
- 【bzoj3174】[Tjoi2013]拯救小矮人 贪心+dp
题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚 ...
- BZOJ4867 Ynoi2017舌尖上的由乃(dfs序+分块)
容易想到用dfs序转化为序列上的问题.考虑分块,对每块排序,修改时对于整块打上标记,边界暴力重构排序数组,询问时二分答案,这样k=sqrt(nlogn)时取最优复杂度nsqrt(nlogn)logn, ...
- [BZOJ5120] [2017国家集训队测试]无限之环
Description 曾经有一款流行的游戏,叫做InfinityLoop,先来简单的介绍一下这个游戏: 游戏在一个n×m的网格状棋盘上进行,其中有些小方格中会有水管,水管可能在方格某些方向的边界的中 ...
- [SDOI2014]数表 莫比乌斯反演
---题面--- 题解: 设$f(d)$表示数$d$的约数和,那么$(i, j)$中的数为$f(gcd(i, j))$,那么有2种枚举方法.1,枚举每一格看对应的$f(d)$是几.$$ans = \s ...
- BZOJ1149:[CTSC/APIO2007]风铃——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1149 https://www.luogu.org/problemnew/show/P3621 sb ...
- AOJ.562 寻找罗恩和赫敏
寻找罗恩和赫敏 考察点 水题 Time Mem Len Lang 0 492KB 0.42K G++ 题意分析 计算1/C(n,2)的值 代码总览 /* Title:AOJ.562 Author:pe ...
- [学习笔记]Segment Tree Beats!九老师线段树
对于这样一类问题: 区间取min,区间求和. N<=100000 要求O(nlogn)级别的算法 直观体会一下,区间取min,还要维护区间和 增加的长度很不好求.... 然鹅, 从前有一个来自杭 ...
- 【队列】【P2827】【NOIP2016D2T3】蚯蚓
传送门 Description 本题中,我们将用符号 $\lfloor c \rfloor$ 表示对 $c$ 向下取整,例如:$\lfloor 3.0 \rfloor = \lfloor 3.1 \r ...
- 使用JavaScript OOP特性搭建Web应用
最近,我面试了一个有五年 Web 应用程序开发经验的软件开发人员.四年半来她一直在从事 JavaScript 相关的工作,她自认为 JavaScript 技能非常好,但在不久之后我就发现实际上她对 J ...