好程式設計師web前端分享用CSS和JS打造一個簡單的圖片編輯器
本文主要是利用 CSS的 filter和簡單的Jquery程式碼來實現一個簡單的圖片編輯器,包括對圖片的透明度,黑白,圖片亮度等調節。
CSS filter
我們首先來探討一下
filter。
首先來說明一下
filter,在CSS裡面要實現filter,其實很簡單,使用類似下面的宣告方式:
1. <font size="3">.example {</font>
2. <font size="3"> filter: [];</font>
3. <font size="3"> }</font>
<font size="3">比如說,我們給圖片新增一點灰度(grayscale)特效,就可以這樣:</font>
1. <font size="3"> .example {</font>
2. <font size="3"> filter: grayscale(90%);</font>
3. <font size="3"> }</font>
當然,為了瀏覽器相容,我們最好這樣寫:
1. <font size="3">.example {</font>
2. <font size="3"> -webkit-filter: grayscale(90%);</font>
3. <font size="3"> filter: grayscale(90%);</font>
4. <font size="3"> }</font>
需要注意的是:
filter的屬性值的單位通常可能是從0到1之間,但是有些不是這樣的,比如blur是使用畫素'px'來作為單位的,而hue-rotate則使用角度deg來作為基本單位;
1. <font size="3"> .example {</font>
2. <font size="3"> filter: blur(10px);</font>
3. <font size="3"> }</font>
4. <font size="3"> .example-2 {</font>
5. <font size="3"> filter: hue-rotate(90deg);</font>
6. <font size="3"> }</font>
但是如果每次只能使用一個
filter就比較麻煩了,所以CSS提供了更加方便的書寫形式,直接並排著寫:
1. <font size="3"> .example {</font>
2. <font size="3"> filter: grayscale(0.5) blur(10px);</font>
3. <font size="3"> }</font>
這樣就可以實現對一個元素新增多個
filter屬性。
簡單地說完
filter之後,我們來動手建立一個簡單的圖片編輯器。
建立基本的
HTML檔案
在這裡我們建立一個
index.html,程式碼也比較簡單:
1. <font size="3"> Image Editor</font>
2. <font size="3"> Grayscale</font>
3. <font size="3"> Blur</font>
4. <font size="3"> Brightness</font>
5. <font size="3"> Contrast</font>
6. <font size="3"> Hue Rotate</font>
7. <font size="3"> Opacity</font>
8. <font size="3"> Invert</font>
9. <font size="3"> Saturate</font>
10. <font size="3"> Sepia</font>
這個檔案裡,我們引入了
main.css和main.js,main.css其實是對編輯器的一些排版起的作用,並沒有對圖片的filter效果做出實際的影響,我們做的是編輯器,所以在使用者改變某個filter的值的時候,我們可以實時讓使用者看到效果,於是這些實現filter的程式碼應該就放在main.js裡面。
上面的每一個
下面的
元素下面的
input都是filter的一個屬性設定,因為我們可以同時用多個filter來對圖片產生特效,所以我每個filter的屬性值都設定為可以調節的狀態。
上面的
index.html還要說明的是,在最上面我們提供一個輸入框,用於給使用者輸入圖片的URL,當使用者點選回車的時候,我們就將這張圖片顯示到編輯區域。使用的是下面的簡單js程式碼:
1. <font size="3"> function addImage(e) {</font>
2. <font size="3"> var imgUrl = $("#imgUrl").val();</font>
3. <font size="3"> if (imgUrl.length) {</font>
4. <font size="3"> $("#imageContainer img").attr("src", imgUrl);</font>
5. <font size="3"> }</font>
6. <font size="3"> e.preventDefault();</font>
7. <font size="3"> }</font>
8. <font size="3"> //on pressing return, addImage() will be called</font>
9. <font size="3"> $("#urlBox").submit(addImage);</font>
上面的
js程式碼也是寫到main.js當中。有了可以使用者自己新增圖片之後,我們就可以實現對圖片的編輯了:
每次使用者在滑動進度條的時候,我們就可以將效果展示給使用者看,於是我們來監聽使用者的
mousemove事件:
1. $("input[type=range]").mousemove(editImage);
也就是說,每次使用者在移動控制條的時候,我們都執行
editImage函式。
但是這樣的體驗可能還不是最好,因為在最後使用者的滑鼠離開控制條的時候,我們還可以監聽
change事件,把這一刻的變化也交給editImage函式處理,所以可以將上面的程式碼寫成這樣:
1. font size="3">$("input[type=range]").mousemove(editImage).change(editImage);</font>
2. <font size="3"> 複製程式碼編寫editImage函式</font>
3. <font size="3"> 上面我們將input[type=range]的mousemove和change事件交給了editImage函式處理,所以,我們來編寫一下editImage的函式程式碼:</font>
4. <font size="3"> function editImage() {</font>
5. <font size="3"> var gs = $("#gs").val(); // grayscale</font>
6. <font size="3"> var blur = $("#blur").val(); // blur</font>
7. <font size="3"> var br = $("#br").val(); // brightness</font>
8. <font size="3"> var ct = $("#ct").val(); // contrast</font>
9. <font size="3"> var huer = $("#huer").val(); //hue-rotate</font>
10. <font size="3"> var opacity = $("#opacity").val(); //opacity</font>
11. <font size="3"> var invert = $("#invert").val(); //invert</font>
12. <font size="3"> var saturate = $("#saturate").val(); //saturate</font>
13. <font size="3"> var sepia = $("#sepia").val(); //sepia</font>
14. <font size="3"> $("#imageContainer img").css("filter", 'grayscale(' + gs+</font>
15. <font size="3"> '%) blur(' + blur +</font>
16. <font size="3"> 'px) brightness(' + br +</font>
17. <font size="3"> '%) contrast(' + ct +</font>
18. <font size="3"> '%) hue-rotate(' + huer +</font>
19. <font size="3"> 'deg) opacity(' + opacity +</font>
20. <font size="3"> '%) invert(' + invert +</font>
21. <font size="3"> '%) saturate(' + saturate +</font>
22. <font size="3"> '%) sepia(' + sepia + '%)');</font>
23. <font size="3"> $("#imageContainer img").css("-webkit-filter", 'grayscale(' + gs+</font>
24. <font size="3"> '%) blur(' + blur +</font>
25. <font size="3"> 'px) brightness(' + br +</font>
26. <font size="3"> '%) contrast(' + ct +</font>
27. <font size="3"> '%) hue-rotate(' + huer +</font>
28. <font size="3"> 'deg) opacity(' + opacity +</font>
29. <font size="3"> '%) invert(' + invert +</font>
30. <font size="3"> '%) saturate(' + saturate +</font>
31. <font size="3"> '%) sepia(' + sepia + '%)');</font>
32. <font size="3"> }</font>
其實很簡單,我們在每次使用者滑動控制條的時候,我們就透過類似
var gs = $("#gs").val();的語句取得相對應地值,然後透過Jquery的css()方法直接為圖片加上filter效果,而且相信你也看得出來,這個函式的後半段就是實現瀏覽器相容的
1. <font size="3"> $("#imageContainer img").css("-webkit-filter",...)</font>
2. <font size="3"> 複製程式碼</font>
3. <font size="3"> 這段程式碼其實就是在img元素實現了類似下面的效果;</font>
4. <font size="3"> </font>
5. <font size="3">[img=28,30][/img]</font>
最後,如果你不想將某些特效加到圖片上面去,你可以點
reset然後將圖片重置到原始狀態:
1. <font size="3">
2. $('#imageEditor').on('reset', function () {</font>
3. <font size="3"> setTimeout(function() {</font>
4. <font size="3"> editImage();</font>
5. <font size="3"> },0);</font>
6. <font size="3"> });</font>
這裡需要說明一下的是,這裡的
setTimeout函式就是為了將reset的效果最快地展現出來,如果寫成下面的形式:
1. <font size="3">$('#imageEditor').on('reset', function () {</font>
2. <font size="3"> editImage();</font>
3. <font size="3"> });</font>
這個時候,
reset效果執行起來其實是有一點延遲的,你明顯可以看到等待的時候,它並不是很快。
瀏覽器開啟
index.html,就可以看到相應的調節效果了。你可以拖動一些設定項的控制條來檢視效果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2641841/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師web前端分享用JavaScript實現的5個常見函式程式設計師Web前端JavaScript函式
- 好程式設計師web前端教程分享CSS預編譯器的再次理解程式設計師Web前端CSS編譯
- 好程式設計師Web前端分享前端CSS篇程式設計師Web前端CSS
- 好程式設計師web前端教程分享CSS技巧!程式設計師Web前端CSS
- 好程式設計師web前端分享邏輯運算程式設計師Web前端
- 好程式設計師web前端分享CSS元素型別程式設計師Web前端CSS型別
- 好程式設計師web前端分享CSS基礎篇程式設計師Web前端CSS
- 好程式設計師web前端分享Css3的概念和優勢程式設計師Web前端CSSS3
- 好程式設計師web前端分享如何理解JS的單執行緒程式設計師Web前端JS執行緒
- 好程式設計師web前端教程分享js中的模組化一程式設計師Web前端JS
- 好程式設計師web前端培訓分享FormData 簡單介紹程式設計師Web前端ORM
- 好程式設計師web前端分享HTML表單和輸入程式設計師Web前端HTML
- 好程式設計師前端分享使用JS開發簡單的音樂播放器程式設計師前端JS播放器
- 好程式設計師Web前端教程分享CSS派生選擇器的講解程式設計師Web前端CSS
- 好程式設計師web前端教程分享js檔案引用編碼方式程式設計師Web前端JS
- 好程式設計師web前端分享CSS不同元素margin的計算程式設計師Web前端CSS
- 好程式設計師web前端培訓分享CSS定位的教程程式設計師Web前端CSS
- 好程式設計師web前端分享JS檢查瀏覽器型別和版本程式設計師Web前端JS瀏覽器型別
- 好程式設計師web前端分享css初始化程式碼程式設計師Web前端CSS
- 好程式設計師web前端分享12個CSS高階技巧彙總程式設計師Web前端CSS
- 好程式設計師web前端教程分享js閉包程式設計師Web前端JS
- 好程式設計師web前端教程分享js模板模式程式設計師Web前端JS模式
- 好程式設計師web前端培訓分享怎樣學好css?程式設計師Web前端CSS
- 10個程式設計師最喜歡的HTML和CSS等線上程式碼編輯器程式設計師HTMLCSS
- 10個程式設計師最喜歡的 HTML和CSS 等線上程式碼編輯器程式設計師HTMLCSS
- 好程式設計師web前端分享CSS3 漸變程式設計師Web前端CSSS3
- 好程式設計師web前端系列之css3動畫程式設計師Web前端CSSS3動畫
- 好程式設計師web前端分享主流CSS image比較程式設計師Web前端CSS
- 好程式設計師web前端技術分享css盒模型程式設計師Web前端CSS模型
- 好程式設計師web前端分享CSS Bug、CSS Hack和Filter學習筆記程式設計師Web前端CSSFilter筆記
- 好程式設計師web前端教程分享web中CSS絕對定位程式設計師Web前端CSS
- 好程式設計師web前端分享18個用CSS製作出來的東西程式設計師Web前端CSS
- 好程式設計師分享Linux重器vi編輯器程式設計師Linux
- 好程式設計師web前端教程分享JavaScript簡寫方法程式設計師Web前端JavaScript
- 好程式設計師web前端教程之Node.Js流程程式設計師Web前端Node.js
- 好程式設計師web前端分享CSS3彈性盒程式設計師Web前端CSSS3
- 好程式設計師web前端系列之CSS3-3D程式設計師Web前端CSSS33D
- 好程式設計師web前端分享css常用屬性縮寫程式設計師Web前端CSS