扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
制作图片的放大效果我考虑到的方法是将原始图片绘制到canvas上,然后在对canvas进行局部裁剪最后对裁剪的部分进行放大,这样就可以实现放大镜的效果。
创新互联主要从事网页设计、PC网站建设(电脑版网站建设)、wap网站建设(手机版网站建设)、成都响应式网站建设、程序开发、网站优化、微网站、小程序设计等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了丰富的网站设计、成都网站建设、网站设计、网络营销经验,集策划、开发、设计、营销、管理等多方位专业化运作于一体。
这里我给出一个实现这个想法的示例。该示例实际上就是运用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
对于这些知识在一个叫秒秒学的教程网站上有相关的学习资料,有兴趣的可以自己去看看,希望对你有帮助。
主要思想:\x0d\x0a首先要准备一张有连续帧的图片,然后利用HTML5Canvas的draw方法在不同的时间间隔绘制不同的帧,这样看起来就像动画在播放。\x0d\x0a关键技术点:\x0d\x0aJavaScript函数setTimeout()有两个参数,第一个是参数可以传递一个JavaScript方法,\x0d\x0a另外一个参数代表间隔时间,单位为毫秒数。代码示例:\x0d\x0asetTimeout(update,1000/30);\x0d\x0aCanvas的API-drawImage()方法,需要指定全部9个参数:\x0d\x0actx.drawImage(myImage,offw,offh,width,height,x2,y2,width,height);\x0d\x0a其中offw,offh是指源图像的起始坐标点,width,height表示源图像的宽与高,x2,y2表\x0d\x0a示源图像在目标Canvas上的起始坐标点。\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0aCanvasMouseEventDemo\x0d\x0a\x0d\x0a\x0d\x0avarctx=null;globalvariable2dcontext\x0d\x0avarstarted=false;\x0d\x0avarmText_canvas=null;\x0d\x0avarx=0,y=0;\x0d\x0avarframe=0;225*5+2\x0d\x0avarimageReady=false;\x0d\x0avarmyImage=null;\x0d\x0avarpx=300;\x0d\x0avarpy=300;\x0d\x0avarx2=300;\x0d\x0avary2=0;\x0d\x0awindow.onload=function(){\x0d\x0avarcanvas=document.getElementById("animation_canvas");\x0d\x0aconsole.log(canvas.parentNode.clientWidth);\x0d\x0acanvas.width=canvas.parentNode.clientWidth;\x0d\x0acanvas.height=canvas.parentNode.clientHeight;\x0d\x0aif(!canvas.getContext){\x0d\x0aconsole.log("Canvasnotsupported.PleaseinstallaHTML5compatiblebrowser.");\x0d\x0areturn;\x0d\x0a}\x0d\x0aget2Dcontextofcanvasanddrawrectangel\x0d\x0actx=canvas.getContext("2d");\x0d\x0actx.fillStyle="black";\x0d\x0actx.fillRect(0,0,canvas.width,canvas.height);\x0d\x0amyImage=document.createElement('img');\x0d\x0amyImage.src="..robin.png";\x0d\x0amyImage.onload=loaded();\x0d\x0a}\x0d\x0afunctionloaded(){\x0d\x0aimageReady=true;\x0d\x0asetTimeout(update,100030);\x0d\x0a}\x0d\x0afunctionredraw(){\x0d\x0actx.clearRect(0,0,460,460)\x0d\x0actx.fillStyle="black";\x0d\x0actx.fillRect(0,0,460,460);\x0d\x0afindtheindexofframesinimage\x0d\x0avarheight=myImage.naturalHeight5;\x0d\x0avarwidth=myImage.naturalWidth5;\x0d\x0avarrow=Math.floor(frame5);\x0d\x0avarcol=frame-row*5;\x0d\x0avaroffw=col*width;\x0d\x0avaroffh=row*height;\x0d\x0afirstrobin\x0d\x0apx=px-5;\x0d\x0apy=py-5;\x0d\x0aif(px
html5实现的页面滚动图片动画加载特效源码。页面上下滚动的时候图片可呈现动态加载效果,有常规渐显效果及3D翻转显示两种显示效果供选择。是一款非常美观大气的动画源码。建议使用支持html5与css3效果较好的火狐或谷歌等浏览器预览本源码。
!DOCTYPE html
html
head
meta http-equiv="Content-Type" content="text/html; charset=utf-8" /
title淡入阴影效果/title
style type="text/css"
*{ margin:0px; padding:0;}
body{ color:#666; font:16px/1.5 '微软雅黑',Arial, Helvetica, sans-serif;}
img{ border:0 none;}
.ullist{ float:left; list-style:none; width:100%;}
.ullist li{ background:#eee; float:left; margin:10px; width:228px;}
.ullist li a{ border:10px solid #fff; color:#666; display:inline-block; text-decoration:none;}
.ullist li a:hover{ box-shadow:0 0 10px #666; transition:all 0.40s ease-in-out;}
.fcr{ color:#f00;}
/style
/head
body
ul class="ullist"
lia href="#"img src="1.jpg" alt="" /詹二锋-野色风情br/span class="fcr"¥40,000/span/a/li
lia href="#"img src="1.jpg" alt="" /詹二锋-野色风情br/span class="fcr"¥40,000/span/a/li
/ul
/body
/html
给你写了一个例子,运行一下,就可以了。
1、首先我们创建一个简单的项目,如图所示包括html,css和img三个。
2、这里是html文件,引入css和html代码文件,如图所示。
3、这里是css文件代码,上面是div和图片显示的效果代码,后面是动画效果。
4、这里是事件,这里定义了四个时间段的状态,兼容了ie的。
5、如图所示这里是效果图,会根据时间轮播显示下一张图片 了。
; (function ($) {
/* var i = 2;
$(document).ready(function () {
var arry = ['images/headback/001.jpg', 'images/headback/002.jpg', 'images/headback/003.jpg', 'images/headback/004.jpg', 'images/headback/005.jpg', 'images/headback/006.jpg', ]
setInterval(
function () {
$("#div_pic").css("backgroundImage", "url(" + arry[i] + ")");
i++;
if (i == 5) {
i = 0;
}
}
, 5000);
}); 定时换背景图片的代码 */
//下面是图片切换代码
/*
var t;
var speed = 2; //图片切换速度
var nowlan = 0; //图片开始时间
function changepic() {
var imglen = $("#div_pic").find("li").length;
$("#div_pic").find("li").hide();
$("#div_pic").find("li").eq(nowlan).show();
nowlan = nowlan + 1 == imglen ? 0 : nowlan + 1;
t = setTimeout("changepic()", speed * 1000);
}
onload = function () { changepic(); }
$(document).ready(function ()
//鼠标在图片上悬停让切换暂停
$("#div_pic").hover(function () { clearInterval(t); });
//鼠标离开图片切换继续
$("#div_pic").mouseleave(function () { changepic(); });
});
*/
//下面是图片轮播代码
/* var num = 0
$(function(){
$("#div_pic ol li").mouseover(function(e){
$(this).attr("class","current");
$(this).siblings().attr("class",""); //兄弟节点的class属性设置为空
//alert($('ul').index())
num = $('ul').index() + 2
var index = $(this).index(); //记录选定的li标签在ul中的索引
//图片会出现层叠现象为了显示当前的图片,把当前的图片的z-index 值设置为大于其他的兄弟元素
$("#div_pic ul li").eq(index).css({"left":"650px","zIndex":num})
$("#div_pic ul li").eq(index).siblings().css("zIndex",num-1);
//动画效果,图片从右侧飞入
$("#div_pic ul li").eq(index).animate({left:"0"},500)
});
}); */
//下面是可配置轮播动画代码
$.fn.slide=function(options){
var defaults= {
affect:1, //1:上下滚动; 2:幕布式; 3:左右滚动;4:淡入淡出
time: 5000, //间隔时间
speed:500, //动画快慢
dot_text:true,//按钮上有无序列号
};
var opts=$.extend(defaults,options);
var $this=$(this);
var ool=$("div class='dot'p/p/div");
var $box=$this.find("ul");
var $li=$box.find("li");
var timer=null;
var num=0;
$this.append(ool);
$box.find("li").each(function(i){
ool.find("p").append($("b/b"));
if(opts.dot_text){
ool.find("b").eq(i).html(i+1)
}
})
ool.find("b").eq(0).addClass("cur");
switch(opts.affect){
case 1:
break;
case 2:
$box.find("li").css("display","none");
break;
case 3:
$box.css({"width":$li.eq(0).width()*$li.length});
$li.css("float","left");
break;
case 4:
$box.find("li").css("display","none");
break;
}
$box.find("li").eq(0).show(0);
ool.find("b").mouseover(function(){
num=$(this).index();
run ();
})
timer=setInterval(auto,opts.time);
function auto(){
num$box.find("li").length-1?num++:num=0;
run();
}
function run(){
ool.find("b").eq(num).addClass("cur").siblings().removeClass("cur");
switch(opts.affect){
case 1:
$box.stop(true,false).animate({"top":-240*num},opts.speed);
break;
case 2:
$box.find("li").css({"position":"absolute"});
$box.find("li").stop(false,true).fadeOut(opts.speed).eq(num).slideDown(opts.speed);
break;
case 3:
$box.stop(true,false).animate({"left":-670*num},opts.speed);
break;
case 4:
$box.find("li").css({"position":"absolute"});
$box.find("li").stop(false,true).fadeOut(opts.speed).eq(num).fadeIn(opts.speed);
break;
}
}
$this.mouseover(function(){
clearInterval(timer);
})
$this.mouseout(function(){
timer=setInterval(auto,opts.time);
})
}
}(jQuery));
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流