扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
制作图片的放大效果我考虑到的方法是将原始图片绘制到canvas上,然后在对canvas进行局部裁剪最后对裁剪的部分进行放大,这样就可以实现放大镜的效果。
网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、微信平台小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了卫滨免费建站欢迎大家使用!
这里我给出一个实现这个想法的示例。该示例实际上就是运用HTML5 canvas中对画布进行裁剪与保存画布状态的相关知识实现的。
上面是给出示例的效果图。这是不是你想要的放大镜效果呢?
下面我们来看下示例代码:在这个示例中当你点击图片时图片就会出现上图效果,再一次点击时就变成原始图片了。
!DOCTYPE html
html
head
meta charset="utf-8"
title放大镜/title
!—HTML代码设计:一个简单的canvas元素--
/head
body
div id="result-stub" class="well hidden"
canvas id="canvas" width="345" height="345"
p你的浏览器不支持canvas元素/p
/canvas
/div
script
window.onload=function() {
//获取canvas对象以及图片对象
var
canvas = document.getElementById('canvas'),
img = new Image(),
context = null,
dataUrl = null,
//设置一个标记,该标记的作用是控制我们点击canvas时放大镜效果的消失和出现
isMagnified = false,
//init函数只要是在图片加载时绘制出图形
init = function() {
img.onload = function() {
//绘制原始图片
context.drawImage(img, 0, 0);
//将图片信息转化为二进制信息或者URL信息存储在dataUrl中方便后面调用
dataUrl = canvas.toDataURL();
}
img.src = 'fist-pump-baby.jpg';
//设置标记值
isMagnified = false;
},
//magnify函数的作用是绘制具有放大镜效果的图形
magnify = function() {
//保存当前画布的绘制状态即画布绘制原始图片的状态。方便我们在后面恢复到绘制原始图片的状态
context.save();
//因为放大镜的圆圈和把手是通过canvas绘制的这里设置了一些绘制把手和圆圈的样式属性。
context.lineWidth = 10;// 线条宽度
context.shadowColor = '#000';// 阴影的颜色黑色
context.shadowBlur = 15;// 模糊级别为15
context.shadowOffsetX = 5;// 形状与阴影的水平距离5
context.shadowOffsetY = 5;// 形状与阴影的垂直距离5
//保存画布当前状态即我们设置阴影属性后的状态方便后面使用
context.save();
//绘制出放大镜把手的图形
context.beginPath();
context.moveTo(230, 230);
context.lineCap = 'round';
context.lineWidth = 30;
context.lineTo(285, 285);
context.stroke();
//对图片进行裁剪,裁剪出的图形是一个圆形。
context.beginPath();
context.arc(
150,
150,
115,
0,
Math.PI * 2,
true);
context.clip();
//创建一个新的Image对象,这个Image对象的图片资源是前面存储在dataUrl中的图片资源。所以这个Image对象和之前初始化的Image对象是完全一样的。
var magnified = new Image();
magnified.src = dataUrl;
//对Image对象进行放大1.5倍,并进行绘制。注意此时的画布状态时裁剪为一个圆形的状态,所以这里绘制的也仅仅是图片中的一个圆形区域。这里为了绘制出图片中娃娃的脸设置了绘制的图片有一定的偏移量。
context.scale(1.5, 1.5);
context.drawImage(img, -40, -40);
//调用restore()函数将画布状态恢复到绘制把放大镜把手时的状态,即具有阴影属性
context.restore();
//绘制放大镜的圆圈,即绘制刚刚我们裁剪出来图片的边框。这样刚刚裁剪出来的圆形图形就会正好处于放大镜的圆圈中。
context.arc(
150,
150,
115,
0,
Math.PI * 2,
true);
context.stroke();
//重置画布,将画布恢复到绘制元素图片的状态,以方便绘制出放大效果后,再次点击是绘制原始图片。
context.restore();
//设置标记值,实现点击后放大效果消失。
isMagnified = true;
};
//加载初始化代码,即当运行页面时会在页面绘制出一个原始图像
init();
//监听画布的点击事件,当点击页面的图像时会根据标记的值来进行判断是否对画布进行方大处理
$('canvas').click(function() {
if (isMagnified) {
init();//绘制原始图像
}
else {
magnify();//绘制放大的图像
}
});
}
/script
script src="jquery.js"/script
/body
/html
对于这些知识在一个叫秒秒学的教程网站上有相关的学习资料,有兴趣的可以自己去看看,希望对你有帮助。
touchmove这个方法
然后用e.touches[0],e.touches[1]... 来判断不同的点,自己写点小算法就搞定了
!DOCTYPE html
html
head
meta charset="utf-8" /
script type="text/javascript" src="jquery-1.7.2.min.js"/script
style type="text/css"
*{
margin: 0;
padding: 0;
}
.hbody{
margin-left: 25%;
}
.show{
margin-left: 160px;
width: 200px;
height: 200px;
border: 1px solid #EEEEEE;
}
.show img{
width: 200px;
height: 200px;
}
.tab{
border: 1px solid #eee;
width: 535px;
height:100px ;
}
.tab img{
border: 1px solid #eee;
width: 100px;
height: 100px;
cursor: pointer;
}
/style
/head
body
div class="hbody"
div class="show"
img /
/div
div class="tab"
img src="1.jpg" /
img src="2.jpg" /
img src="3.jpg" /
img src="4.jpg" /
img src="5.jpg" /
/div
/div
/body
script
$(function(){
var Src = $('.tab').find('img').eq(0).attr('src');
$('.show').find('img').attr('src',Src)
})
$('.tab').find('img').mouseover(function(){
var inx = $(this).index();
var Imgsrc = $('.tab').find('img').eq(inx).attr('src');
$('.show').find('img').attr('src',Imgsrc)
})
/script
/html
引一个jquery文件,图片地址替换一下就可以了
看完下面的代码你就明白了,稍作删改就是你要的效果
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""
html xmlns=""
head
meta http-equiv="Content-Type" content="text/html; charset=gb2312" /
titlejQuery心型图片墙鼠标悬浮变大/title
style type="text/css"
*{padding:0; margin:0;}
ul,li{list-style:none;}
body{font:12px/20px "Microsoft Yahei","SimSun",Arial,sans-serif; background:#CCC;}
.heartPic{width:749px;height:630px;margin:60px auto 0 auto;}
.heartPic ul{float:left;width:749px;}
.heartPic ul li{float:left;width:100px;height:100px;padding:2px;cursor:pointer;}
.heartPic ul li.on{z-index:99;}
.heartPic ul li.on .in{position:relative;left:-50px;top:-50px;padding:5px 5px 20px 5px;background:#666;}
.heartPic ul li .pTxt{display:none;width:100px;height:15px;text-align:center;color:#fff;overflow:hidden;}
.heartPic .showDiv{display:block;}
/style
/head
body
div class="heartPic"
ul
li/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_01.jpg" /
p class="pTxt"可爱的女娃娃/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_02.jpg" /
p class="pTxt"呆萌的小熊/p
/div
/li
li/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_03.jpg" /
p class="pTxt"卡哇伊的小熊/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_04.jpg" /
p class="pTxt"女巫骑着扫帚/p
/div
/li
li/li
/ul
ul
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_05.jpg" /
p class="pTxt"女娃娃/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_06.jpg" /
p class="pTxt"星星可爱/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_07.jpg" /
p class="pTxt"呆萌女/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_08.jpg" /
p class="pTxt"狗狗/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_09.jpg" /
p class="pTxt"绿树/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_10.jpg" /
p class="pTxt"粉爱粉爱的/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_11.jpg" /
p class="pTxt"蜡笔小新/p
/div
/li
/ul
ul
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_12.jpg" /
p class="pTxt"震不碎的心/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_13.jpg" /
p class="pTxt"很有意境/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_14.jpg" /
p class="pTxt"樱木花道最爱啊/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_15.jpg" /
p class="pTxt"俩骷髅/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_16.jpg" /
p class="pTxt"萌妹子/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_17.jpg" /
p class="pTxt"可爱的小狗/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_18.jpg" /
p class="pTxt"夫妇俩白头偕老/p
/div
/li
/ul
ul
li/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_19.jpg" /
p class="pTxt"刷子/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_20.jpg" /
p class="pTxt"偶的头像/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_21.jpg" /
p class="pTxt"树叶子/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_22.jpg" /
p class="pTxt"星星/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_23.jpg" /
p class="pTxt"浅色哦/p
/div
/li
li/li
/ul
ul
li/li
li/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_24.jpg" /
p class="pTxt"太阳帅哥/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_25.jpg" /
p class="pTxt"大笑脸/p
/div
/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_26.jpg" /
p class="pTxt"企鹅/p
/div
/li
li/li
li/li
/ul
ul
li/li
li/li
li/li
li
div class="in"
img width="100" height="100" src="/jscss/demoimg/201404/index_27.jpg" /
p class="pTxt"小兔子/p
/div
/li
li/li
li/li
li/li
/ul
/div
script type="text/javascript" src="/ajaxjs/jquery-1.6.2.min.js"/script
script type="text/javascript"
$(function(){
$(".heartPic li").hover(function(){
$(this).addClass("on");
$(this).find("img").animate({"width":"200px","height":"200px"});
$(this).find("div").animate({"width":"200px","height":"200px"});
$(this).find(".pTxt").animate({"width":"200px","height":"20px"});
$(this).find("p").addClass("showDiv");
},function(){
$(this).animate({height:"100px"},100).removeClass("on");
$(this).find("img").stop(true,true).animate({"width":"100px","height":"100px"});
$(this).find("div").stop(true,true).animate({"width":"100px","height":"100px"});
$(this).find(".pTxt").stop(true,true).animate({"width":"0px","height":"0px"});
});
})
/script
div style="text-align:center;clear:both"
/div
/body
/html
可以设置cookie(可以加载一个cookie.min.js,使用起来非常方便)。就是当第一次进入页面的时候,先去读取该cookie,如果存在,说明之前已经做了更改,把cookie值稍作处理就可以完成初始化了(记得当初始化完成后删除该cookie),如果cookie不存在说明还没有做过更改。
html5页面加入这段
meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=2,user-scalable=no"/
maximum-scale=2 表示页面最大放大2倍,这样你只要双击图片就可以实现放大了,如果是要js来实现的话 那就得写拖动插件了。 原理:先改变图片那个div的宽度为2倍然后定义那个div为绝对定位,这个div可以拖动(需要js来监听处理对应的函数)
所以简单的做还是就用浏览器自带的放大功能吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流