js实现微信朋友圈模糊图片功能
本人第一次写文章 ,写的不好大家就凑合着看吧。
界面的简单效果。

主要html如下
<div id="content">
<!--模糊图片-->
<img id="blur" src="data:image/p_001.jpg">
<!--使用canvas绘制图片-->
<canvas id="canvas"></canvas>
<a href="javascript:reset()" rel="external nofollow" class="button" id="button-reset">查看</a>
<a href="javascript:kan()" rel="external nofollow" class="button" id="button-show">立即看全图</a>
</div>
主要的js代码如下
- var canWidth = window.innerWidth;
- var canHeight = window.innerHeight;
- var canvas = document.getElementById("canvas");
- var ctx = canvas.getContext("2d");
- canvas.width = canWidth;
- canvas.height = canHeight;
- var img = new Image();
- img.src = "image/p_001.jpg";
- var radius = 50;
- var leftMargin = 0,
- topMargin = 0;
- img.onload = function() {
- //初始化父容器的宽高使窗口与canvas宽高相同
- $("#content").css({
- "width": canvas.width + "px",
- "height": canvas.height + "px"
- });
- //模糊图片与canva中绘制的图片(隐藏的清楚图片)宽高相同,别忘加px,否则计算出来的只是个值,不带px
- $("#blur").css("width", img.width + "px");
- $("#blur").css("height", img.height + "px");
- //左边距:(图片宽高 - canvas宽高) / 2;等于一边的边距宽高
- leftMargin = (img.width - canvas.width) / 2;
- topMargin = (img.height - canvas.height) / 2;
- //模糊图片的上边距与左边距
- $("#blur").css("top", String(-topMargin) + "px");
- $("#blur").css("left", String(-leftMargin) + "px");
- initCanvas();
- }
- function initCanvas() {
- var theleft = leftMargin < 0 ? -leftMargin : 0;
- var thetop = topMargin < 0 ? -topMargin : 0;
- //创建圆
- region = {
- x: Math.random() * (canvas.width - 2 * radius - 2 * theleft) + radius + theleft,
- y: Math.random() * (canvas.height - 2 * radius - 2 * thetop) + radius + thetop,
- r: radius
- };
- draw(img, region);
- }
- function draw(img) {
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.save();
- setRegion(region);
- /*绘制清楚图片,如leftMargin<0那么取0,
- 图片宽度与canvas宽度哪个最小取哪个值*/
- ctx.drawImage(img, Math.max(leftMargin, 0), Math.max(topMargin, 0),
- Math.min(canvas.width, img.width), Math.min(canvas.height, img.height),
- leftMargin < 0 ? -leftMargin : 0, topMargin < 0 ? -topMargin : 0,
- Math.min(canvas.width, img.width), Math.min(canvas.height, img.height));
- ctx.restore();
- }
- function setRegion(region) {
- ctx.beginPath();
- ctx.arc(region.x, region.y, region.r, 0, Math.PI * 2, false);
- //进行裁减圆
- ctx.clip();
- }
- function reset() {
- initCanvas();
- }
- function show() {
- var animation = setInterval(function() {
- region.r += 20;
- if (region.r > Math.max(canvas.width, canvas.height)) {
- clearInterval(animation);
- }
- draw(img, region);
- }, 30);
- }
- function kan() {
- var name = prompt('口令:5201314', '');
- if (name == '5201314') {
- show();
- } else {
- alert('输入口令有误,请重新输入!');
- }
- }
var canWidth = window.innerWidth;var canHeight = window.innerHeight;var canvas = document.getElementById("canvas");var ctx = canvas.getContext("2d");canvas.width = canWidth;canvas.height = canHeight;var img = new Image();img.src = "image/p_001.jpg";var radius = 50;var leftMargin = 0,topMargin = 0;img.onload = function() {//初始化父容器的宽高使窗口与canvas宽高相同$("#content").css({"width": canvas.width + "px","height": canvas.height + "px"});//模糊图片与canva中绘制的图片(隐藏的清楚图片)宽高相同,别忘加px,否则计算出来的只是个值,不带px$("#blur").css("width", img.width + "px");$("#blur").css("height", img.height + "px");//左边距:(图片宽高 - canvas宽高) / 2;等于一边的边距宽高leftMargin = (img.width - canvas.width) / 2;topMargin = (img.height - canvas.height) / 2;//模糊图片的上边距与左边距$("#blur").css("top", String(-topMargin) + "px");$("#blur").css("left", String(-leftMargin) + "px");initCanvas();}
function initCanvas() {var theleft = leftMargin < 0 ? -leftMargin : 0;var thetop = topMargin < 0 ? -topMargin : 0;//创建圆region = {x: Math.random() * (canvas.width - 2 * radius - 2 * theleft) + radius + theleft,y: Math.random() * (canvas.height - 2 * radius - 2 * thetop) + radius + thetop,r: radius};draw(img, region);}
function draw(img) {ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.save();setRegion(region);/*绘制清楚图片,如leftMargin<0那么取0,图片宽度与canvas宽度哪个最小取哪个值*/ctx.drawImage(img, Math.max(leftMargin, 0), Math.max(topMargin, 0),Math.min(canvas.width, img.width), Math.min(canvas.height, img.height),leftMargin < 0 ? -leftMargin : 0, topMargin < 0 ? -topMargin : 0,Math.min(canvas.width, img.width), Math.min(canvas.height, img.height));ctx.restore();}
function setRegion(region) {ctx.beginPath();ctx.arc(region.x, region.y, region.r, 0, Math.PI * 2, false);//进行裁减圆ctx.clip();}
function reset() {initCanvas();}
function show() {var animation = setInterval(function() {region.r += 20;if (region.r > Math.max(canvas.width, canvas.height)) {clearInterval(animation);}draw(img, region);}, 30);}function kan() {var name = prompt('口令:5201314', '');if (name == '5201314') {show();} else {alert('输入口令有误,请重新输入!');}}
js实现微信朋友圈模糊图片功能的更多相关文章
- Android 仿微信朋友圈发动态功能(相册图片多选)
代码分享 代码名称: 仿微信朋友圈发动态功能(相册图片多选) 代码描述: 仿微信朋友圈发动态功能(相册图片多选) 代码托管地址: http://www.apkbus.com/android-15276 ...
- Android 仿微信朋友圈添加图片
github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...
- Android 仿微信朋友圈发表图片拖拽和删除功能
朋友圈实现原理 我们使用 Android Device Monitor 来分析朋友圈发布图片的界面实现原理.如果需要分析其他应用的界面实现也是采用这种方法哦. 打开 Android Device Mo ...
- React Native(九)——实现仿微信朋友圈发表动态功能
好像很久都没写博客了,罪过罪过~ 许是因为刚接触App有点生疏不得窍门吧,这个月还没有更新过文章.小个把月下来,还是觉得应该边学边总结,这样才能像大神靠近(最近刚接触同业的大牛级人物,还是从中学到了很 ...
- iOS - 仿微信朋友圈视频剪切功能
分析需求 我们先看一看微信的界面 微信效果图 1.页面下部拖动左边和右边的白色竖条控制剪切视频的开始和结束时间,预览界面跟随拖动位置跳到视频相应帧画面,控制视频长度最长15秒,最短5秒 2.拖动下部图 ...
- Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。
转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...
- ionic 实现微信朋友圈分享的完整开发流程
最近开始要着手负责开发ionic的项目了,一直很好奇想实现一个微信朋友圈分享的功能,所以我就网上找了找文章来练手实现,果不其然,找到了几篇,但是发现它们的流程都不太详细,清楚,直接,还有不少坑. 今天 ...
- 微信朋友圈评论/回复/cell/键盘谈起
微信朋友圈评论功能的细节考虑及实现 微信朋友圈回复tableview iOS 实现微信朋友圈评论回复功能(一)
- 实现手机网页调起原生微信朋友圈分享的工具nativeShare.js
http://www.liaoxiansheng.cn/?p=294 我们知道现在我们无法直接通过js直接跳转到微信和QQ等软件进行分享,但是现在像UC浏览器和QQ浏览器这样的主流浏览器自带一个分享工 ...
随机推荐
- Java学习9——面向对象
(重点:内存分析) 类的定义 //用class关键字定义一个类 class Person { //成员变量定义 private int id; private int age = 20; //方法定义 ...
- 201521123044 《Java程序设计》第2周作业-Java基本语法与类库
1. 本章学习总结 ·1.浮点型的不精确,不能简单的像C语言一样用float或者double来定义.在java中有更精确的BigDecimal类. 举例:BigDecimal bd1= new Big ...
- 201521123035 《Java程序设计》第九周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 题目5-1 1.常用异常 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现 ...
- thinkphp介绍及访问方式
ThinkPHP框架 1.解压到www目录下,里面有一个index文件是入口文件,通过修改里面的APP_PATH进入不同的应用 2.ThinkPHP文件夹是核心文件夹,里面东西不要修改,可以查看,比如 ...
- Easyui DataGrid DateRange Filter 漂亮实用的日期区间段筛选功能
自定义扩展Jquery easyui datagrid filter组件实现对日期类型区间段的筛选功能.显示效果如一下 是不是非常实用 引用的jquery 组件是 Date Range Picker ...
- 定位页面元素之xpath详解以及定位不到测试元素的常见问题
一.定位元素的方法 id:首选的识别属性,W3C标准推荐为页面每一个元素设置一个独一无二的ID属性, 如果没有且很难找到唯一属性,解决方法:(1)找开发把id或者name加上.如果不行,解决思路可以是 ...
- mybatis-resultMap使用与详解
1,当数据库的字段名与属性名称不一致时,在mybatis中如何处理? 第一种方式: 采用投影对字段重命名<select id="load" parameterType=&qu ...
- Angular2开发拙见
本文集中讲讲笔者目前使用ng2来开发项目时对其组件的使用的个人的一些拙劣的经验. 先简单讲讲从ng1到ng2框架下组件的职责与地位: ng1中的一大特色--指令,分为属性型.标签型.css类型和注释型 ...
- 新书发布《每天5分钟玩转Docker容器技术》
后台不时收到关于纸质版教程书籍的询问,今天终于可以给大家一个交代了. <每天5分钟玩转Docker容器技术>现已在各大书城上架. 比较了一下,目前京东上最实惠:https://item.j ...
- 简易RPC框架-心跳与重连机制
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...