現在我們在使用各大網站的個人中心時,都有個上傳個人頭像的功能。用戶在上傳了個人照片之後,可能不符合網站的要求,於是要求用戶對照片進行裁剪,最終根據用戶裁剪的尺寸生成頭像。這個功能真是太棒了,原來不懂js的時候,感覺很神奇,太神奇了。心想哪天要是自己也能搞清楚這裡面的技術,那該多牛呀~大家是不是也有何我一樣的想法呀~哈哈~~
下面我們就來用javascript來實作這個功能吧。
http://www.w3.org/1999/xhtml">
$("#container").clip({
imgC : $("#imgC"),
blockClass : "block",
tipsClass : "tips"
});
imgC : 表示裁剪图片的容器,也就是右边的图
blockClass : block的样式名 也就是页面上的可以拖动的滑块的样式 因为怕和别的页面上的样式重名 默认是block
tipsClass : tips的样式名 也就是页面上显示left width height top的那个span的样式名 默认是tips
">http://common.cnblogs.com/script/jquery.js">>
\
\
\
\
\
\
\
')
.bind("mousedown.r",function(e){self.start(e)})
.appendTo(this.container[0]);
this.tips = $('').appendTo(this.container[0]);
this.setImg();
},
setImg : 函數(){
var block = this.block;
var left = block.css("left"),
頂部 = block.css("頂部"),
高度 = block.height(),
寬度 = block.width();
this.imgC.css({
高度: 高度,
寬度:寬度,
「背景位置」:「-」左「-」上方
});
this.tips.html("left:" parseInt(left) "top:" parseInt(top)"width:" width " 高度:"高度"");
},
開始:函數(e){
var $elem = $(e.target),
塊 = this.block,
self = 這個,
移動 = false,
容器 = this.container,
動作 = $elem.attr("action");
//這個將會計算基本領域結構的改變瀏覽器的縮放都會讓裡面的數值改變
this.offset = $.extend({height:container.height(),width:container.width()},container.offset());
this.blockOriginal = {height:block.height(),width:block.width(),left:parseInt(block.css("left")),top:parseInt(block.css("top"))};
如果(行動){
this.fun = this[動作];
}其他{
this.x = e.clientX - this.offset.left - this.blockOriginal.left ;
this.y = e.clientY - this.offset.top - this.blockOriginal.top;
移動=真;
}
即
&&this.block[0].setCapture();
this.tips.show();
$(文件)
.bind("mousemove.r",function(e){self.move(e,move)})
.bind("mouseup.r",function(){self.end()});
},
結束:函數(){
$(文件)
.unbind("mousemove.r")
.unbind("mouseup.r");
即
&&this.block[0].releaseCapture();
this.tips.hide();
},
移動 : 函數(e,isMove){
window.getSelection
? window.getSelection().removeAllRanges()
: document.selection.empty();
var 區塊 = this.block;
if(isMove){
var left = Math.max(0,e.clientX - this.offset.left - this.x);
left = Math.min(left,this.offset.width - this.blockOriginal.width);
var top = Math.max(0,e.clientY - this.offset.top - this.y);
top = Math.min(top,this.offset.height - this.blockOriginal.height);
block.css({左:左,上:上});
}其他{
var offset = this.fun(e);
block.css(偏移);
}
this.setImg();
this.moveCallBack();
},
向下 : 函數(e){
var blockOriginal = this.blockOriginal,
sTop = Math.max(dBody.scrollTop,dDoc.scrollTop), //出現垂直滾動條時候要計算這個
offset = this.offset;
if(e.clientY-offset.top>=blockOriginal.top-sTop){
var height = Math.min(offset.height - blockOriginal.top,e.clientY-offset.top-blockOriginal.top sTop),
上方 = blockOriginal.top;
}其他{
var height = Math.min(offset.top blockOriginal.top-e.clientY-sTop,blockOriginal.top),
top = Math.max(e.clientY - offset.top sTop,0);
}
return {高度:高度, 頂部:頂部};
},
向上: 函數(e){
var blockOriginal = this.blockOriginal,
sTop = Math.max(dBody.scrollTop,dDoc.scrollTop),
offset = this.offset;
if(e.clientY-offset.top-blockOriginal.height var top = Math.max(e.clientY-offset.top sTop,0),
maxHeight = blockOriginal.top blockOriginal.height,
height = Math.min(maxHeight,blockOriginal.top blockOriginal.height -(e.clientY-offset.top)-sTop);
}其他{
var height = Math.min(e.clientY-offset.top-blockOriginal.top-blockOriginal.height sTop,offset.height-blockOriginal.top-blockOriginal.height),
頂部 = blockOriginal.top blockOriginal.height;
}
return {高度:高度, 頂部:頂部};
},
左:函數(e){
var blockOriginal = this.blockOriginal,
offset = this.offset;
if(e.clientX - offset.left - blockOriginal.width - blockOriginal.left var left = Math.max(e.clientX - offset.left,0),
width = Math.min(blockOriginal.left blockOriginal.width,blockOriginal.left blockOriginal.width -(e.clientX-offset.left));
}其他{
var width = Math.min(e.clientX-offset.left-blockOriginal.left-blockOriginal.width,offset.width-blockOriginal.left-blockOriginal.width),
左 = blockOriginal.left blockOriginal.width;
}
return {左:左,寬度:寬度};
},
右:函數(e){
var blockOriginal = this.blockOriginal,
offset = this.offset;
if(e.clientX-offset.left>=blockOriginal.left){
var width = Math.min(offset.width - blockOriginal.left,e.clientX - offset.left - blockOriginal.left),
左 = blockOriginal.left;
}其他{
var width = Math.min(offset.left blockOriginal.left - e.clientX,blockOriginal.left),
左 = Math.max(e.clientX - offset.left,0);
}
return {左:左,寬度:寬度};
},
rightDown : 函數(e){
返回 $.extend(this.right(e),this.down(e));
},
leftDown : 函數(e){
return $.extend(this.left(e),this.down(e));
},
rightUp : 函數(e){
return $.extend(this.right(e),this.up(e));
},
leftUp : 函數(e){
return $.extend(this.left(e),this.up(e));
},
getValue : 函數(){
var block = this.block;
返回{
左 : parseInt(block.css("left")),
上方 : parseInt(block.css("top")),
寬度:block.width(),
高度:block.height()
}
}
}
$.fn.clip = 函數(選項){
options.container = this;
返回新剪輯(選項);
}
})();
xx = $("#container").clip({
imgC : $("#imgC")
})
>腳本
身體>
是不是很酷啊,小夥伴們,學本範例的思路吧。

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。