第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅通過 svg 蒙版中的孔單擊

僅通過 svg 蒙版中的孔單擊

慕哥6287543 2022-11-27 16:14:59
我有 svg 掩碼,它確定矩形中的孔。在 svg mask 后面我有一些可點擊的元素,我想將事件傳遞給它們,但只能通過孔。我已經(jīng)嘗試過pointer-events值,但我只能制作整個面具來傳遞事件或制作整個面具來捕獲它們。對于一個孔,可以簡單地使用 clip-path 來完成,只需確定孔的外部,但是多個孔會使事情變得更加困難。有沒有可能避免使用剪輯路徑?我也試過pointer-events: visiblePainted和pointer-events: painted,但沒有成功。
查看完整描述

2 回答

?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗 獲得超2個贊

這個問題有幾個方面。首先,你是對的,掩碼和剪輯路徑的行為與命中測試不同。

裁剪路徑是一個幾何邊界,給定的點顯然在該邊界之內(nèi)或之外;因此,指針事件必須在裁剪元素的渲染區(qū)域上正常捕獲,但不能在裁剪區(qū)域上捕獲...相比之下,掩碼不是二進(jìn)制轉(zhuǎn)換,而是像素操作,并且完全不同的行為透明和幾乎但不完全透明可能是令人困惑的任意;因此,對于應(yīng)用了遮罩的元素,即使在遮罩不透明度變?yōu)榱愕膮^(qū)域,也必須捕獲指針事件。

其次,剪輯路徑是一種幾何形狀,但就像所有路徑一樣,它可能包含孔洞。<rect>您可以使用一個具有三個子路徑而不是三個<path>,只要clip-rule確保內(nèi)部的子路徑從周圍的形狀中切出即可。

第三,如果該pointer-events屬性應(yīng)用于<svg>HTML 上下文中的元素,其行為會變得……奇怪。pointer-events: none元素上的任何其他值<svg>都會導(dǎo)致整個邊界框接收事件 -為 HTML 元素提出的一種行為,但目前不屬于任何規(guī)范的一部分。

這里的解決方案是pointer-events: none<svg>元素上設(shè)置,然后pointer-events: painted在子<rect>元素上反轉(zhuǎn)它。

button, svg {

  position:absolute;

  width:400px;

  height:400px

}

button {

  background: #0000ff;

  cursor: pointer; 

}

button:hover {

  background: #008800; 

}

svg {

  pointer-events: none;

}

.over {

  fill: #000;

  clip-path: url(#clip);

  pointer-events: painted;

}

<button></button>

<svg xmlns="http://www.w3.org/2000/svg" height="400" width="400">

 <defs>

   <clipPath id="clip" clip-rule="evenodd">

 <path d="M 20 20 h 360 v 360 h -360 z

          M 40 40 v 40 h 40 v -40 z

          M 200 290 v 40 h 40 v -40 z" />

   </clipPath>

 </defs>

 <rect y="0" x="0" height="400" width="400" class="over" />

</svg>


查看完整回答
反對 回復(fù) 2022-11-27
?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗 獲得超11個贊

剪貼蒙版對于從復(fù)雜的對象中裁剪出部分很有用,但如果您只是使用純色塊,那么創(chuàng)建已經(jīng)有孔的形狀可能同樣容易。


我在下面添加了一個示例。這有幫助嗎?


<svg width="400" heoght="200" viewBox="0 0 400 200">

  <text x="100" y="100" text-anchor="middle"

    alignment-baseline="middle" onclick="alert('Hello!')"

    style="cursor:pointer">Click me</text>

  <text x="300" y="100" text-anchor="middle"

    alignment-baseline="middle" onclick="alert('Hello?')"

    style="cursor:pointer">Not me</text>

  <path d="M20 20 180 20 180 180 20 180ZM60 60 60 140 140

    140 140 60Z" fill="#3a6" fill-opacity="0.7"

     fill-rule="nonzero"/>

  <path d="M220 20 380 20 380 180 220 180Z" fill="#f20"

    fill-opacity="0.7"/>

</svg>


查看完整回答
反對 回復(fù) 2022-11-27
  • 2 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號