Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
.獲取元素在文檔上的坐標(biāo)
function DocuemntHtmlPageXY (elem) { var rect=elem.getBoundingClientRect(); var scrollTop=window.scrollTop || (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop || 0; var scrollLeft=window.scrollLeft || (document.documentElement && document.documentElement.scrollLeft) || document.body.scrollLeft || 0; var html=document.documentElement || document.getElementsByTagName_r('html')[0]; //修復(fù)ie6 7 下的瀏覽器邊框也被算在 boundingClientRect 內(nèi)的 bug var deviation=html.getBoundingClientRect(); //修復(fù) ie8 返回 -2 的 bug deviation={ //FF 不允許修改返回的對(duì)象 left: deviation.left < 0 ? 0 : deviation.left, top: deviation.top < 0 ? 0 : deviation.top }; return { left: rect.left + scrollLeft - deviation.left, top: rect.top + scrollTop - deviation.top }; }
2.舉例如下:
于基于Python+PyQt的框架結(jié)構(gòu)的程序開發(fā),前面已經(jīng)講了很多小例子了,有興趣的小伙伴們可以翻看下前面的文章。
總體來說,實(shí)現(xiàn)相同的功能,相比于其它如C/C++等編程語言,確實(shí)簡單太多了。
下面,再給出一個(gè)小例子,使用PyQt5界面庫,在Python3上來實(shí)現(xiàn)一個(gè)簡單的顏色拾取器的小工具,下面看看具體的實(shí)現(xiàn)過程吧。
本例運(yùn)行界面如下圖所示,實(shí)現(xiàn)的功能是,實(shí)時(shí)捕捉當(dāng)前鼠標(biāo)所在位置的顏色并進(jìn)行顯示,顯示結(jié)果包括顏色指示、顏色的RGB值、顏色的CSS值及當(dāng)前鼠標(biāo)的坐標(biāo)值等信息。
可考慮在定時(shí)器超時(shí)事件中每隔一段時(shí)間(如20ms)取一次當(dāng)前鼠標(biāo)所在的位置的顏色信息,對(duì)該顏色值進(jìn)行解析并分別顯示其RGB值和CSS樣式的值。
在PyQt中進(jìn)行編程實(shí)現(xiàn)時(shí),需要考慮以下兩個(gè)問題:
對(duì)于第一個(gè)問題,可使用PyQt類中的QCusor類的pos()函數(shù)實(shí)時(shí)獲取當(dāng)前的鼠標(biāo)位置信息。
對(duì)于第二個(gè)問題,可使用QScreen類的grabWindow()函數(shù),將當(dāng)前鼠標(biāo)所在區(qū)域存儲(chǔ)為QPixmap類型的畫布里面,然后再使用toImage()函數(shù)將其轉(zhuǎn)化為圖像,有了圖像信息后,就可獲取該圖像上任意像素點(diǎn)的顏色信息(QColor類型)了。最后使用QColor類的red()、green()、blue()函數(shù)分別獲取其RGB值即可。對(duì)于顏色的CSS值顯示,直接將RGB值轉(zhuǎn)換為16進(jìn)制顯示即可。
在定時(shí)器超時(shí)槽函數(shù)里面實(shí)現(xiàn)該軟件的具體功能,其代碼(不足20行)如下圖所示:
代碼簡要解釋如下:
(1)第48-50行,使用QCusor類的pos()函數(shù)獲取當(dāng)前的鼠標(biāo)位置信息x、y并顯示。
(2)第52-56行,使用QScreen類的grabWindow()函數(shù),將當(dāng)前鼠標(biāo)所在區(qū)域存儲(chǔ)到QPixmap類型的pixmap變量里面,使用toImage()函數(shù)將其轉(zhuǎn)化為圖像,然后使用pixel()函數(shù)獲取該圖像上(0,0)像素點(diǎn)的顏色信息,最后使用QColor類的red()、green()、blue()函數(shù)分別獲取其RGB顏色的分量值。
(3)第58-60行,將RGB顏色進(jìn)行顯示,并在label控件上使用樣式表設(shè)置其背景色進(jìn)行實(shí)時(shí)指示當(dāng)前鼠標(biāo)所在位置的顏色信息。
(4)第62-64行,將R、G、B顏色值轉(zhuǎn)換為16進(jìn)制,顯示其CSS值信息。
整個(gè)工程除了上面的核心代碼實(shí)現(xiàn)外,還包括界面的布局、定時(shí)器創(chuàng)建、槽函數(shù)關(guān)聯(lián)等內(nèi)容,程序的完整實(shí)現(xiàn)代碼如下圖所示:
程序主窗口基類為QWidget類,代碼簡要解釋如下:
(1)第9-14行,類初始化函數(shù),調(diào)用initUI函數(shù)并創(chuàng)建定時(shí)器、設(shè)置槽函數(shù)關(guān)聯(lián)及啟動(dòng)定時(shí)器等。
(2)第16-40行,具體的界面設(shè)計(jì)函數(shù),包括控件的創(chuàng)建/布局、窗口的居中設(shè)置、標(biāo)題、圖標(biāo)設(shè)置等。
(3)第61-65行,創(chuàng)建窗口并顯示。
總體來說,這個(gè)例子界面比較簡單,代碼量比較少,也比較好理解,運(yùn)行上面的程序后,即可出現(xiàn)前面的軟件界面,當(dāng)移動(dòng)鼠標(biāo)時(shí),可在界面上實(shí)時(shí)顯示當(dāng)前鼠標(biāo)位置的顏色信息。
本文實(shí)現(xiàn)顏色拾取器的小工具,僅僅用了不到70行的代碼,試想一下,如果你用純粹的C++語言來實(shí)現(xiàn)相同的功能,將需要多少代碼量呢?所以,如果你做軟件界面開發(fā)的話,Python+PyQt的框架結(jié)構(gòu)真的是一個(gè)不錯(cuò)的選擇。
本文由編碼那些事原創(chuàng),請關(guān)注+轉(zhuǎn)發(fā)+收藏+點(diǎn)贊,帶你一起長知識(shí)!
近看到 ElementPlus 官網(wǎng)上的切換主題方式非常有趣,這是一個(gè)過渡的動(dòng)畫效果
所以在網(wǎng)上查了一番,找到基本的實(shí)現(xiàn)方法
基本效果
首先我們起一個(gè) html 文件,寫一個(gè)按鈕,以及簡單的背景顏色切換,來模擬主題的切換
可以看到實(shí)現(xiàn)了最簡單的主題切換效果
document.startViewTransition
想要實(shí)現(xiàn)過渡效果,需要先用到一個(gè) JavaScript 的原生方法:document.startViewTransition
這個(gè)方法是用來做動(dòng)畫過渡效果的
通過調(diào)用 API,讓瀏覽器為新舊兩種不同視圖分別捕獲并建立了快照 (即 ::view-transition-old(root)舊快照 和 ::view-transition-new(root) 新快照),而后新舊兩快照在 ::view-transition-image-pair(root) 容器中完成轉(zhuǎn)場動(dòng)畫的過渡。動(dòng)畫結(jié)束后則刪除其相關(guān)偽元素 (快照和容器)
過渡動(dòng)畫效果
我們可以應(yīng)用一下這個(gè) API
現(xiàn)在去切換主題顏色,發(fā)現(xiàn)有過渡效果了~
圓形擴(kuò)散過渡動(dòng)畫
接下來實(shí)現(xiàn)圓形過渡的效果,其實(shí)這個(gè)動(dòng)畫最終是展示::view-transition-new(root)這個(gè)偽元素,所以我們只需要讓這個(gè)偽元素有原型擴(kuò)散的過渡動(dòng)畫即可~
那圓形擴(kuò)散動(dòng)畫咋做呢?其實(shí)很簡單,只需要將偽元素的半徑,從0 -> 100%即可
代碼如下
并且我們需要取消掉 document.startViewTransition默認(rèn)的動(dòng)畫效果,不然它會(huì)導(dǎo)致我們自定義的動(dòng)畫效果無效~
最終得到圓形擴(kuò)散的效果
*請認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。