制作圖片的放大效果我考慮到的方法是將原始圖片繪制到canvas上,然后在對canvas進行局部裁剪最后對裁剪的部分進行放大,這樣就可以實現(xiàn)放大鏡的效果。
創(chuàng)新互聯(lián)主要從事網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機版網(wǎng)站建設(shè))、成都響應式網(wǎng)站建設(shè)、程序開發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、小程序設(shè)計等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷經(jīng)驗,集策劃、開發(fā)、設(shè)計、營銷、管理等多方位專業(yè)化運作于一體。
這里我給出一個實現(xiàn)這個想法的示例。該示例實際上就是運用HTML5?canvas中對畫布進行裁剪與保存畫布狀態(tài)的相關(guān)知識實現(xiàn)的。
上面是給出示例的效果圖。這是不是你想要的放大鏡效果呢?
下面我們來看下示例代碼:在這個示例中當你點擊圖片時圖片就會出現(xiàn)上圖效果,再一次點擊時就變成原始圖片了。
!DOCTYPE html
html
head
meta charset="utf-8"
title放大鏡/title
!—HTML代碼設(shè)計:一個簡單的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,
//設(shè)置一個標記,該標記的作用是控制我們點擊canvas時放大鏡效果的消失和出現(xiàn)
isMagnified = false,
//init函數(shù)只要是在圖片加載時繪制出圖形
init = function() {
img.onload = function() {
//繪制原始圖片
context.drawImage(img, 0, 0);
//將圖片信息轉(zhuǎn)化為二進制信息或者URL信息存儲在dataUrl中方便后面調(diào)用
dataUrl = canvas.toDataURL();
}
img.src = 'fist-pump-baby.jpg';
//設(shè)置標記值
isMagnified = false;
},
//magnify函數(shù)的作用是繪制具有放大鏡效果的圖形
magnify = function() {
//保存當前畫布的繪制狀態(tài)即畫布繪制原始圖片的狀態(tài)。方便我們在后面恢復到繪制原始圖片的狀態(tài)
context.save();
//因為放大鏡的圓圈和把手是通過canvas繪制的這里設(shè)置了一些繪制把手和圓圈的樣式屬性。
context.lineWidth = 10;//?線條寬度
context.shadowColor = '#000';//?陰影的顏色黑色
context.shadowBlur = 15;//?模糊級別為15
context.shadowOffsetX = 5;//?形狀與陰影的水平距離5
context.shadowOffsetY = 5;//?形狀與陰影的垂直距離5
//保存畫布當前狀態(tài)即我們設(shè)置陰影屬性后的狀態(tài)方便后面使用
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();
//創(chuàng)建一個新的Image對象,這個Image對象的圖片資源是前面存儲在dataUrl中的圖片資源。所以這個Image對象和之前初始化的Image對象是完全一樣的。
var magnified = new Image();
magnified.src = dataUrl;
//對Image對象進行放大1.5倍,并進行繪制。注意此時的畫布狀態(tài)時裁剪為一個圓形的狀態(tài),所以這里繪制的也僅僅是圖片中的一個圓形區(qū)域。這里為了繪制出圖片中娃娃的臉設(shè)置了繪制的圖片有一定的偏移量。
context.scale(1.5, 1.5);
context.drawImage(img, -40, -40);
//調(diào)用restore()函數(shù)將畫布狀態(tài)恢復到繪制把放大鏡把手時的狀態(tài),即具有陰影屬性
context.restore();
//繪制放大鏡的圓圈,即繪制剛剛我們裁剪出來圖片的邊框。這樣剛剛裁剪出來的圓形圖形就會正好處于放大鏡的圓圈中。
context.arc(
150,
150,
115,
0,
Math.PI * 2,
true);
context.stroke();
//重置畫布,將畫布恢復到繪制元素圖片的狀態(tài),以方便繪制出放大效果后,再次點擊是繪制原始圖片。
context.restore();
//設(shè)置標記值,實現(xiàn)點擊后放大效果消失。
isMagnified = true;
};
//加載初始化代碼,即當運行頁面時會在頁面繪制出一個原始圖像
init();
//監(jiān)聽畫布的點擊事件,當點擊頁面的圖像時會根據(jù)標記的值來進行判斷是否對畫布進行方大處理
$('canvas').click(function() {
if (isMagnified) {
init();//繪制原始圖像
}
else {
magnify();//繪制放大的圖像
}
});
}
/script
script src="jquery.js"/script
/body
/html
對于這些知識在一個叫秒秒學的教程網(wǎng)站上有相關(guān)的學習資料,有興趣的可以自己去看看,希望對你有幫助。
主要思想:\x0d\x0a首先要準備一張有連續(xù)幀的圖片,然后利用HTML5Canvas的draw方法在不同的時間間隔繪制不同的幀,這樣看起來就像動畫在播放。\x0d\x0a關(guān)鍵技術(shù)點:\x0d\x0aJavaScript函數(shù)setTimeout()有兩個參數(shù),第一個是參數(shù)可以傳遞一個JavaScript方法,\x0d\x0a另外一個參數(shù)代表間隔時間,單位為毫秒數(shù)。代碼示例:\x0d\x0asetTimeout(update,1000/30);\x0d\x0aCanvas的API-drawImage()方法,需要指定全部9個參數(shù):\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實現(xiàn)的頁面滾動圖片動畫加載特效源碼。頁面上下滾動的時候圖片可呈現(xiàn)動態(tài)加載效果,有常規(guī)漸顯效果及3D翻轉(zhuǎn)顯示兩種顯示效果供選擇。是一款非常美觀大氣的動畫源碼。建議使用支持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、首先我們創(chuàng)建一個簡單的項目,如圖所示包括html,css和img三個。
2、這里是html文件,引入css和html代碼文件,如圖所示。
3、這里是css文件代碼,上面是div和圖片顯示的效果代碼,后面是動畫效果。
4、這里是事件,這里定義了四個時間段的狀態(tài),兼容了ie的。
5、如圖所示這里是效果圖,會根據(jù)時間輪播顯示下一張圖片 了。
; (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); });
//鼠標離開圖片切換繼續(xù)
$("#div_pic").mouseleave(function () { changepic(); });
});
*/
//下面是圖片輪播代碼
/* var num = 0
$(function(){
$("#div_pic ol li").mouseover(function(e){
$(this).attr("class","current");
$(this).siblings().attr("class",""); //兄弟節(jié)點的class屬性設(shè)置為空
//alert($('ul').index())
num = $('ul').index() + 2
var index = $(this).index(); //記錄選定的li標簽在ul中的索引
//圖片會出現(xiàn)層疊現(xiàn)象為了顯示當前的圖片,把當前的圖片的z-index 值設(shè)置為大于其他的兄弟元素
$("#div_pic ul li").eq(index).css({"left":"650px","zIndex":num})
$("#div_pic ul li").eq(index).siblings().css("zIndex",num-1);
//動畫效果,圖片從右側(cè)飛入
$("#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));