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

界面的简单效果。

主要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. 2nd_SE-结对编程1-基于flask框架的四则运算生成器

    0x00 Coding https://coding.net/u/nikochan/p/2nd_SE/git 0x01 写在前面 因为在上一个作业中,是基于python完成的Command程序.那么再 ...

  2. 201521123013 《Java程序设计》第8周学习总结

    1. 本章学习总结 2. 书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 while(list.contains(str)) list.remove(str); Q2.统计文 ...

  3. 201521123048 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 1.代码阅读:Child压缩包内源代码 //child public class test extends P ...

  4. 201521123053 <<Java基本语法与类库>>第二周

    1.本周学习总结 这是第二周学习了,还是感觉吃力,慢慢来吧 .知识总是一点一点进到脑子里,虽然头小,但总会进来不是! 知识储备:   A.整形变量按照长度分为byte.short.int.long. ...

  5. 201521123100 《Java程序设计》 第1周学习总结

    1. 本章学习总结 1.简单了解学习了Java及其开发环境,学习使用了Notepad++&eclipse开发软件的使用 2.熟练完成了使用Notepad++运行第一个Java程序"H ...

  6. java课程设计--WeTalk(201521123072秦贞一)

    在线群聊系统 1,团队课程设计博客链接 http://www.cnblogs.com/slickghost/p/7018105.html 个人负责模块或任务说明 负责模块:界面设计与实现 2,自己的代 ...

  7. response 常用详解(1)

    我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response. service方法中的re ...

  8. python基础之socket

    一.osi七层 完整的计算机系统由硬件,操作系统,软件组成. 互联网的核心就是由一堆协议组成,协议就是标准,如全世界通信的标准就是英语. 如果把计算机比作人,那么互联网协议就是计算机界的英语,所有计算 ...

  9. temp-存储过程 以前的

    ---------------------------------------------------------------------------------------------------- ...

  10. 深入浅出数据结构C语言版(19)——堆排序

    在介绍优先队列的博文中,我们提到了数据结构二叉堆,并且说明了二叉堆的一个特殊用途--排序,同时给出了其时间复杂度O(N*logN).这个时间界是目前我们看到最好的(使用Sedgewick序列的希尔排序 ...