本人第一次写文章 ,写的不好大家就凑合着看吧。

界面的简单效果。

主要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代码如下

  1. var canWidth = window.innerWidth;
  2. var canHeight = window.innerHeight;
  3. var canvas = document.getElementById("canvas");
  4. var ctx = canvas.getContext("2d");
  5. canvas.width = canWidth;
  6. canvas.height = canHeight;
  7. var img = new Image();
  8. img.src = "image/p_001.jpg";
  9. var radius = 50;
  10. var leftMargin = 0,
  11. topMargin = 0;
  12. img.onload = function() {
  13. //初始化父容器的宽高使窗口与canvas宽高相同
  14. $("#content").css({
  15. "width": canvas.width + "px",
  16. "height": canvas.height + "px"
  17. });
  18. //模糊图片与canva中绘制的图片(隐藏的清楚图片)宽高相同,别忘加px,否则计算出来的只是个值,不带px
  19. $("#blur").css("width", img.width + "px");
  20. $("#blur").css("height", img.height + "px");
  21. //左边距:(图片宽高 - canvas宽高) / 2;等于一边的边距宽高
  22. leftMargin = (img.width - canvas.width) / 2;
  23. topMargin = (img.height - canvas.height) / 2;
  24. //模糊图片的上边距与左边距
  25. $("#blur").css("top", String(-topMargin) + "px");
  26. $("#blur").css("left", String(-leftMargin) + "px");
  27. initCanvas();
  28. }
  29. function initCanvas() {
  30. var theleft = leftMargin < 0 ? -leftMargin : 0;
  31. var thetop = topMargin < 0 ? -topMargin : 0;
  32. //创建圆
  33. region = {
  34. x: Math.random() * (canvas.width - 2 * radius - 2 * theleft) + radius + theleft,
  35. y: Math.random() * (canvas.height - 2 * radius - 2 * thetop) + radius + thetop,
  36. r: radius
  37. };
  38. draw(img, region);
  39. }
  40. function draw(img) {
  41. ctx.clearRect(0, 0, canvas.width, canvas.height);
  42. ctx.save();
  43. setRegion(region);
  44. /*绘制清楚图片,如leftMargin<0那么取0,
  45. 图片宽度与canvas宽度哪个最小取哪个值*/
  46. ctx.drawImage(img, Math.max(leftMargin, 0), Math.max(topMargin, 0),
  47. Math.min(canvas.width, img.width), Math.min(canvas.height, img.height),
  48. leftMargin < 0 ? -leftMargin : 0, topMargin < 0 ? -topMargin : 0,
  49. Math.min(canvas.width, img.width), Math.min(canvas.height, img.height));
  50. ctx.restore();
  51. }
  52. function setRegion(region) {
  53. ctx.beginPath();
  54. ctx.arc(region.x, region.y, region.r, 0, Math.PI * 2, false);
  55. //进行裁减圆
  56. ctx.clip();
  57. }
  58. function reset() {
  59. initCanvas();
  60. }
  61. function show() {
  62. var animation = setInterval(function() {
  63. region.r += 20;
  64. if (region.r > Math.max(canvas.width, canvas.height)) {
  65. clearInterval(animation);
  66. }
  67. draw(img, region);
  68. }, 30);
  69. }
  70. function kan() {
  71. var name = prompt('口令:5201314', '');
  72. if (name == '5201314') {
  73. show();
  74. } else {
  75. alert('输入口令有误,请重新输入!');
  76. }
  77. }

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实现微信朋友圈模糊图片功能的更多相关文章

  1. Android 仿微信朋友圈发动态功能(相册图片多选)

    代码分享 代码名称: 仿微信朋友圈发动态功能(相册图片多选) 代码描述: 仿微信朋友圈发动态功能(相册图片多选) 代码托管地址: http://www.apkbus.com/android-15276 ...

  2. Android 仿微信朋友圈添加图片

    github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...

  3. Android 仿微信朋友圈发表图片拖拽和删除功能

    朋友圈实现原理 我们使用 Android Device Monitor 来分析朋友圈发布图片的界面实现原理.如果需要分析其他应用的界面实现也是采用这种方法哦. 打开 Android Device Mo ...

  4. React Native(九)——实现仿微信朋友圈发表动态功能

    好像很久都没写博客了,罪过罪过~ 许是因为刚接触App有点生疏不得窍门吧,这个月还没有更新过文章.小个把月下来,还是觉得应该边学边总结,这样才能像大神靠近(最近刚接触同业的大牛级人物,还是从中学到了很 ...

  5. iOS - 仿微信朋友圈视频剪切功能

    分析需求 我们先看一看微信的界面 微信效果图 1.页面下部拖动左边和右边的白色竖条控制剪切视频的开始和结束时间,预览界面跟随拖动位置跳到视频相应帧画面,控制视频长度最长15秒,最短5秒 2.拖动下部图 ...

  6. Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。

    转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...

  7. ionic 实现微信朋友圈分享的完整开发流程

    最近开始要着手负责开发ionic的项目了,一直很好奇想实现一个微信朋友圈分享的功能,所以我就网上找了找文章来练手实现,果不其然,找到了几篇,但是发现它们的流程都不太详细,清楚,直接,还有不少坑. 今天 ...

  8. 微信朋友圈评论/回复/cell/键盘谈起

    微信朋友圈评论功能的细节考虑及实现       微信朋友圈回复tableview iOS 实现微信朋友圈评论回复功能(一)

  9. 实现手机网页调起原生微信朋友圈分享的工具nativeShare.js

    http://www.liaoxiansheng.cn/?p=294 我们知道现在我们无法直接通过js直接跳转到微信和QQ等软件进行分享,但是现在像UC浏览器和QQ浏览器这样的主流浏览器自带一个分享工 ...

随机推荐

  1. 【Alpha】Daily Scrum Meeting——Day5

    站立式会议照片 1.本次会议为第五次Meeting会议: 2.本次会议在上午大课间09:40,在陆大楼召开,本次会议为30分钟讨论昨天的任务完成情况以及接下来的任务安排. 燃尽图 每个人的工作分配 成 ...

  2. 团队作业4——第一次项目冲刺(Alpha版本)1st day

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 1.界面 主界面以及游戏界面大体上完成了 界面内的功能正在写 2.登陆方面 QQ授权还未申请 申请完在登陆界面完成后实现用QQ ...

  3. 201521123018 《Java程序设计》第12周学习总结

    1. 本章学习总结 你对于本章知识的学习总结 2. 书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.da ...

  4. 201521123027 <java程序设计>第11周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2.书面作业 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchro ...

  5. Java课程设计-计算器 丁树乐(201521123024)

    1.团队课程设计博客链接 http://www.cnblogs.com/br0823/p/7064407.html 2.个人负责模块或任务说明 界面优化 各类之间拼接 3.自己的代码提交记录截图 4. ...

  6. Python 的笔试题

    其实大多数说学习Python 是纯兴趣,真的我不信,许多人已经工作了,没有那么多时间搞自己的纯兴趣了,都会为了生活奋斗,可以说转行来学python 就是未来加薪,当然,小编现在也快要准备工作了,所以也 ...

  7. 纳税服务系统【信息发布管理、Ueditor、异步信息交互】

    需求分析 我们现在来到了纳税服务系统的信息发布管理模块,首先我们跟着原型图来进行需求分析把: 一些普通的CRUD,值得一做的就是状态之间的切换了.停用和发布切换. 值得注意的是:在信息内容中,它可以带 ...

  8. JVM菜鸟进阶高手之路二(JVM的重要性,Xmn是跟请求量有关。)

    转载请注明原创出处,谢谢! 今天看群聊jvm,通常会问ygc合适吗? 阿飞总结,可能需要2个维度,1.单位时间执行次数,2.执行时间 ps -p pid -o etime 查看下进程的运行时间, 17 ...

  9. PostgreSQL使用MyBatis,insert时返回主键

    MyBatis中普通的insert语句是这样的: <insert id="insert" parameterType="com.xxx.xxx.xxDo" ...

  10. 保存数据到sdcard中去

    这里只贴上核心的代码:其它自行脑补!