回答
這是可能的,但只有在現代瀏覽器(鉻,Safari,火狐,歌劇)。
您將需要有兩個<div>
的
像這樣..
<div class="container">
<div class="revealer"></div>
</div>
和CSS像這樣
.container {
position: relative;
background: url("images/your-background.jpg");
}
.revealer {
position: absolute;
//set the mask size to be the size of the container
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 1;
background: url("images/your-background-over-state.jpg");
//css3 image masks, this is not cross browser, see the demo for
// cross browser syntax
mask: url("images/mask-shape.png") no-repeat;
//make sure the mask is off screen at first, by setting the mask position
//to minus the width and height of your mask image
mask-position: -300px -300px
}
而且JS
window.addEventListener('load',function(){
var background = document.querySelector('.container'),
revealer = document.querySelector('.revealer');
background.addEventListener('mousemove', function(e){
//the minus represents the half the width/height of your mask image
// to make the reveal centred to the mouse.
var x = e.offsetX - 150,
y = e.offsetY - 150;
// move the position of the mask to match the mouse offsets
revealer.style.maskPosition = x+'px '+y+'px';
return false;
});
});
因爲您需要確保.container
中的任何其他內容具有比掩碼更高的z-index,以確保內容未被屏蔽。要做到這一點相對定位添加到元件在容器
像這樣
.container *:not(.revealer) {
position: relative;
z-index: 2;
}
在面罩使用
圖像是其中固體色創建可見或填充區的圖像,並且所述透明區域是掩模或剪下。
你可以通過使用一個透明的png圖像來做到這一點,該圖像是從中心透明到邊緣半透明的徑向漸變,並使其跟隨鼠標。
document.onmousemove=mousefollower
function mousefollower(e){
x = (!document.all)? e.pageX : event.x+document.body.scrollLeft;
y = (!document.all)? e.pageY : event.y+document.body.scrollTop;
document.getElementById('myImage').style.left = x + 'px';
document.getElementById('myImage').style.top = y + 'px';
}
很明顯,您也可以使用jQuery,並設置mousemove函數只發生在特定的div上。還要確保您使用的圖像足夠大(至少是尺寸的兩倍),以便在移動到div遠端時不會顯示邊緣(這意味着對於大面積區域,您將需要一個巨大的圖像它可能會有很大的滯後)。將圖像放入div中,並將溢出設置爲none,以剪切掉區域外的任何東西。
這不會達到同樣的效果。它只會提供一個半透明的圓圈來跟隨鼠標。它不會透露它背後的元素的一部分。 – AshHeskes
這是沿着正確的路線。透明png需要是複雜設計被咬住的那個。然後你需要一個跟在鼠標後面的圖像_behind_,這個圖像是從中心到白色的淡入淡出。我懷疑用一些聰明的javascript也會有一種「畫布」方式來實現這一點。 – MrMisterMan
這將會類似於一些jQuery的縮放腳本,是的?如果你們可以指出一個我可以修補的例子,那將是完美的。我的JS並不是那個忍者。 – Northernlights
這可以很容易地使用JavaScript的一些CSS和背景定位。這裏有兩個例子:http://jsbin.com/ococal/3
源代碼很容易理解,你可以開始解決這個問題。
的其餘部分變暗,這要歸功於簡化。 – Northernlights
結束了,只是應用一個白色的陰影邊框打破了一點 – Northernlights
- 1. 這個結果可以通過遞歸cte來實現嗎?
- 2. 這個Flash效果可能與jQuery的?
- 3. 可以通過標記獲取UICollectionViewCell嗎?
- 4. 我可以通過NSURLResponse獲取URL嗎?
- 5. 任何人都可以幫助我通過CSS來繪製這個圖標嗎?
- 6. 可以通過css動畫獲取-moz-animation的簡寫嗎?
- 7. 這可以用CSS來完成嗎?
- 8. 這可以通過單個SQL查詢來解決嗎?
- 9. 可以通過引用來獲取父窗口url嗎?
- 10. 你可以通過選定的div來獲取信息嗎?
- 11. 在selenium webdriver ruby中可以通過類來獲取元素嗎?
- 12. HTML或CSS可以給圖像帶來裁剪效果嗎?
- 13. Jekyll可以通過css或js文件進行操作嗎?
- 14. 可以HTML/CSS/JS來通過Adobe空氣
- 15. 是否可以通過css和html實現以下文字效果?
- 16. 這個CSS有效嗎?
- 17. 是否可以通過Flash獲取瀏覽器的書籤
- 18. CSS,是否可以創建這個角落效果
- 19. 我可以用JS數組來做這個嗎?
- 20. 這可以通過sed完成嗎?
- 21. 我可以通過這樣的jsonobject嗎?
- 22. 我可以簡化這個CSS嗎?
- 23. 簡化和製作這個JS效果的可擴展性
- 24. 可以通過css來設置選擇選項的標題嗎?
- 25. 這個網站如何在flash/flex中分層圖片(並且可以通過常規的html/css來完成)
- 26. 在viewpager中可以使用這個效果嗎?
- 27. 這可以通過列表理解或lambda來完成嗎?
- 28. 這可以通過JOIN語句來完成嗎?
- 29. 這可以通過聚合來實現嗎?
- 30. 這可以通過剝皮來完成嗎?
我很想擺弄你的代碼,但沒有效果輸出jsfiddle? – Northernlights
你使用什麼瀏覽器?在Chrome中嘗試它,我在Firefox中測試,似乎它不支持新的CSS屬性。 – AshHeskes
我在firefox上,現在在家裏使用chrome和jsfddle的詞語,但是上帝,現在對我來說很複雜。不過謝謝你,我會努力一點 – Northernlights