自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用 Resize 實現(xiàn)強大的圖片拖拽切換預(yù)覽功能

開發(fā) 前端
本文將介紹一個非常有意思的功能,使用純 CSS 利用 resize 實現(xiàn)強大的圖片切換預(yù)覽功能。利用 resize 來實現(xiàn)容器大小的控制。

[[419852]]

Hello 大家好,我是 Coco,今天給大家?guī)硪粋€巧妙的小技巧。

本文將介紹一個非常有意思的功能,使用純 CSS 利用 resize 實現(xiàn)強大的圖片切換預(yù)覽功能。類似于這樣:

圖片

思路

首先,要實現(xiàn)這樣一個效果如果不要求可以拖拽,其實有非常多的辦法。

  1. 將兩張圖片疊加在一起
  2. 改變上層圖片的寬度,或者使用 mask, 改變 mask 的透明度區(qū)間變化

兩種方式都簡單示意一下。

假設(shè)我們的結(jié)構(gòu)如下,分別使用 background 展示兩張圖片:

  1. <div class="g-outer"
  2.     <div class="g-inner"></div> 
  3. </div> 

方法一,改變上層圖片的寬度的方式:

  1. .g-outer { 
  2.     width: 650px; 
  3.     height: 340px; 
  4.     background-image: url(image1.png); 
  5.     overflow: hidden; 
  6. .g-inner { 
  7.     height: 340px; 
  8.     background: url(image2.png); 
  9.     animation: widthchange 3s infinite alternate linear; 
  10. @keyframes widthchange { 
  11.     0% { 
  12.         width: 650px; 
  13.     } 
  14.     100% { 
  15.         width: 0px; 
  16.     } 

效果如下:

當(dāng)然,使用 mask 遮罩的方式也非常輕松的可以實現(xiàn)類似的效果:

  1. .g-outer { 
  2.     background-image: url(https://images.cnblogs.com/cnblogs_com/coco1s/881614/o_21081614180122.png); 
  3. .g-inner { 
  4.     background: url(https://images.cnblogs.com/cnblogs_com/coco1s/881614/o_21081614175811.png); 
  5.     mask: linear-gradient(90deg, #fff 0%, #fff 50%, transparent 50%, transparent 100%); 
  6.     mask-size: 200% 100%; 
  7.     animation: maskChange 2s infinite alternate linear; 
  8. @keyframes maskChange { 
  9.     0% { 
  10.         mask-position: -100% 0; 
  11.     } 
  12.     100% { 
  13.         mask-position: 0 0; 
  14.     } 

也可以得到同樣的效果:

上述 DEMO 的完整代碼:CodePen Demo -- Switch Picture[1]

對強大的 mask 屬性還不是太了解的,可以猛戳:奇妙的 CSS MASK[2]

使用 resize 實現(xiàn)拖拽功能

下一步則是最核心,最關(guān)鍵的一步,巧妙的使用 CSS resize 屬性,實現(xiàn)拖拽控制元素的寬度。

什么是 resize ?

resize:該屬性允許你控制一個元素的大小

語法如下:

  1. /* Keyword values */ 
  2.   resize: none; 
  3.   resize: both; 
  4.   resize: horizontal; 
  5.   resize: vertical; 
  6.   resize: block; 
  7.   resize: inline; 

看一個最簡單的 DEMO:

  1. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. A aut qui labore rerum placeat similique hic consequatur tempore doloribus aliquid alias, nobis voluptates. Perferendis, voluptate placeat esse soluta deleniti id!</p> 
  1. p { 
  2.     width: 200px; 
  3.     height: 200px; 
  4.     resize: horizontal; 
  5.     overflow: scroll

這里,我們設(shè)置了一個長寬為 200px 的

為橫向可拖拽改變寬度。效果如下:

圖片

簡單總結(jié)一些小技巧:

  • resize 的生效,需要配合 overflow: scroll。當(dāng)然,準(zhǔn)確的說法是,overflow 不是 visible,或者可以直接作用于替換元素譬如圖像、<video> 及 <iframe>、<textarea> 等
  • 我們可以通過 resize 的 horizontal、vertical、both 來設(shè)置橫向拖動、縱向拖動、橫向縱向皆可拖動
  • 可以配合容器的 max-width、min-width、max-height、min-height 限制可拖拽改變的一個范圍

 將 resize 運用于圖片拖拽切換

OK,接下來,我們將 resize 運用于圖片拖拽切換。

首先,還是上述的代碼,我們將 resize 作用于子元素試試:

  1. <div class="g-outer"
  2.     <div class="g-inner width-change"></div> 
  3. </div> 

 

  1. .g-outer { 
  2.     width: 650px; 
  3.     height: 340px; 
  4.     background-image: url(image1.png); 
  5.     overflow: hidden; 
  6.  
  7. .g-inner { 
  8.     height: 340px; 
  9.     background: url(image2.png); 
  10.     resize: horizontal; 
  11.     overflow: scroll
  12.     max-width: 640px; 
  13.     min-width: 10px; 

可以看到,g-inner 設(shè)置了 resize: horizontal,將允許被橫向拖動,實際的效果如下:

圖片

嗯,非常接近了,因為需要配合 overflow: scroll,所以出現(xiàn)了惱人的滾動條,非常的不美觀,我們得想辦法干掉滾動條。

借助多一層嵌套及絕對定位實現(xiàn)隱藏滾動條

隱藏滾動條的方式有很多,這里我們介紹其中一種巧妙的方式,我們對我們的結(jié)構(gòu)進(jìn)行一下改造,再疊加多一層 div:

  1. <div class="g-outer"
  2.     <div class="g-inner"
  3.         <div class="g-resize"></div> 
  4.     </div> 
  5. </div> 

我們將控制拖拽這個功能交給 g-resize,它負(fù)責(zé)改變元素的寬度,而 g-inner 改為絕對定位,當(dāng) g-resize 的寬度增大時,其父元素 g-inner 也會隨之增大,最后設(shè)置 g-resize 的 opacity 為 0 即可隱藏滾動條。

核心代碼如下:

  1. .g-outer { 
  2.     position: relative
  3.     width: 650px; 
  4.     height: 340px; 
  5.     background-image: url(image1.png); 
  6.     overflow: hidden; 
  7. .g-inner { 
  8.     position: absolute
  9.     top: 0; 
  10.     left: 0; 
  11.     min-width: 0; 
  12.     max-width: 650px; 
  13.     height: 340px; 
  14.     background-image: url(image2.png); 
  15. .g-resize { 
  16.     position: relative
  17.     resize: horizontal; 
  18.     overflow: scroll
  19.     width: 0; 
  20.     height: 340px; 
  21.     max-width: 650px; 
  22.     min-width: 15px; 
  23.     animation: opacityChange 3s infinite alternate linear; 
  24. @keyframes opacityChange { 
  25.     0% { 
  26.         opacity: 0; 
  27.     } 
  28.     100% { 
  29.         opacity: 1; 
  30.     } 

這里,為了方便示意,我將 opacity 設(shè)置了一個漸隱漸現(xiàn)的動畫效果,方便示意:

圖片

借助偽元素,顯示拖拽條

最后一步,由于完全隱藏了滾動條,用戶也就不知道可以拖拽了,所以我們還需要繪制一個更為好看的拖拽條,這里延續(xù)上述的布局,給 .g-inner 再添加一個偽元素,絕對定位在元素最后即可:

  1. .g-inner:before { 
  2.     content: "↔"
  3.     position: absolute
  4.     background: rgba(0, 0, 0, 0.5); 
  5.     top: 0; 
  6.     right: 0; 
  7.     height: 100%; 
  8.     line-height: 340px; 

最終完美達(dá)成效果:

圖片

完整詳細(xì)的代碼,你可以在我的 CSS 靈感[3]上看到:

CSS 靈感 -- 利用 resize 實現(xiàn)圖片切換預(yù)覽功能[4]

總結(jié)一下

通過本文,你可以學(xué)會:

  • 利用 resize 來實現(xiàn)容器大小的控制
  • 通過一些巧妙的方式來隱藏不太美觀的滾動條
  • 以及配合上述的一些技巧,使用純 CSS 實現(xiàn)圖片拖拽切換預(yù)覽功能

最后

好了,本文到此結(jié)束,希望對你有幫助 :)

參考資料

[1]CodePen Demo -- Switch Picture:

https://codepen.io/Chokcoco/pen/RwVmPQw

[2]奇妙的 CSS MASK:

https://github.com/chokcoco/iCSS/issues/80

[3]CSS 靈感:

https://csscoco.com/inspiration/#/

[4]CSS 靈感 -- 利用 resize 實現(xiàn)圖片切換預(yù)覽功能:

https://csscoco.com/inspiration/#/./others/css-resize-switch-picture

 

責(zé)任編輯:姜華 來源: iCSS前端趣聞
相關(guān)推薦

2024-01-23 09:15:33

Vue3組件拖拽組件內(nèi)容編輯

2012-04-24 09:48:49

HTML5

2012-05-17 13:17:26

HTML5

2024-03-27 08:28:31

元素拖拽API文件上傳

2009-12-29 18:09:00

Silverlight

2017-03-13 10:11:28

AndroidRecyclerVie功能介紹

2012-06-13 10:49:23

PHP

2020-10-20 11:12:11

Nodejs

2023-09-13 09:20:00

日志配置Spring

2021-07-23 09:40:05

深度學(xué)習(xí)編程人工智能

2010-12-22 09:56:24

PHP

2009-09-08 10:35:24

LINQ技術(shù)

2023-12-19 09:00:03

OCR軟件開源Ocrad

2022-04-20 18:22:18

CSS拖拽預(yù)覽圖

2009-02-12 15:53:58

Windows 7預(yù)覽功能體驗

2015-05-28 10:20:34

js相冊翻頁

2010-03-05 09:19:54

Android系統(tǒng)

2010-03-04 13:36:55

openSUSE

2013-01-23 11:30:39

JSVirtualKeybjQuery

2009-07-07 08:46:11

微軟Windows 7新功能
點贊
收藏

51CTO技術(shù)棧公眾號