Tut*_*Ozz 6 html javascript css colors cursor
我有个问题。如何制作一个可以恢复其背后颜色并应用于自身的光标。
就像一个“负面”效应。
但我需要它是自动的,无需对每种颜色进行编码,因此它可以与自身后面的任何元素进行交互。
这是我对自定义光标的开始以及我的背景示例:
(function () {
var follower, init, mouseX, mouseY, positionElement, printout, timer;
follower = document.getElementById('follower');
printout = document.getElementById('printout');
mouseX = event => {
return event.clientX;
};
mouseY = event => {
return event.clientY;
};
positionElement = event => {
var mouse;
mouse = {
x: mouseX(event),
y: mouseY(event) };
follower.style.top = mouse.y + 'px';
return follower.style.left = mouse.x + 'px';
};
timer = false;
window.onmousemove = init = event => {
var _event;
_event = event;
return timer = setTimeout(() => {
return positionElement(_event);
}, 1);
};
}).call(this);
//# sourceURL=coffeescriptRun Code Online (Sandbox Code Playgroud)
* {
cursor: none;
margin:0;
padding:0;
}
.img{
width:49vw;
height:99vh;
position:absolute;
background: url('https://images.pexels.com/photos/531880/pexels-photo-531880.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=1000');
}
.img2{
width:49vw;
height:99vh;
left:49vw;
position:absolute;
background: url('https://cdn-images-1.medium.com/max/1600/0*I-sI3u34g0ydRqyA');
}
#follower {
position: absolute;
top: 50%;
left: 50%;
}
#follower #circle {
position: absolute;
background: #fff;
border-radius: 50%;
opacity: 0.5;
height: 1.5em;
width: 1.5em;
margin-top: -0.5em;
margin-left: -0.5em;
z-index:2;
}Run Code Online (Sandbox Code Playgroud)
<div id="follower">
<div id="circle"></div>
</div>
<div class="img"></div>
<div class="img2"></div>Run Code Online (Sandbox Code Playgroud)
我怎样才能给光标带来负面影响?
Tem*_*fif 13
这是一个使用背景的想法,其中技巧是使用 a 模拟光标,radial-gradient以便您可以根据需要在每个元素上定义颜色:
document.onmousemove = function(e) {
document.body.style.setProperty('--x',(e.clientX)+'px');
document.body.style.setProperty('--y',(e.clientY)+'px');
}Run Code Online (Sandbox Code Playgroud)
* {
cursor: none;
margin:0;
padding:0;
}
.red{
width:33vw;
height:100vh;
position:absolute;
background:
radial-gradient(farthest-side ,white 95%,transparent 100%)
calc(var(--x) - .75em) calc(var(--y) - .75em)/ /*position*/
1.5em 1.5em /*size of circle*/
fixed no-repeat;
background-color:red;
}
.black{
width:33vw;
height:100vh;
margin-left:33vw;
position:absolute;
background:radial-gradient(farthest-side ,cyan 95%,transparent 100%)
calc(var(--x) - .75em) calc(var(--y) - .75em)/1.5em 1.5em fixed no-repeat;
background-color:black;
}
.green{
width:33vw;
height:100vh;
margin-left:66vw;
position:absolute;
background:radial-gradient(farthest-side ,blue 95%,transparent 100%)
calc(var(--x) - .75em) calc(var(--y) - .75em)/1.5em 1.5em fixed no-repeat;
background-color:green;
}Run Code Online (Sandbox Code Playgroud)
<div class="red"></div>
<div class="black"></div>
<div class="green"></div>Run Code Online (Sandbox Code Playgroud)
诀窍是每个渐变都是fixed相对于视口定位的,然后我对所有渐变使用相同的 CSS 变量将它们放置在相同的位置。每一个都将仅在其部分中可见。
如果您有内容并且需要将光标置于所有内容之上,您可以考虑使用伪元素在顶部创建图层:
document.onmousemove = function(e) {
document.body.style.setProperty('--x',(e.clientX)+'px');
document.body.style.setProperty('--y',(e.clientY)+'px');
}Run Code Online (Sandbox Code Playgroud)
* {
cursor: none;
margin:0;
padding:0;
}
.box {
position:relative;
z-index:0;
color:#fff;
}
.box:before {
content:"";
position:absolute;
z-index:999;
top:0;
left:0;
right:0;
bottom:0;
background:
radial-gradient(farthest-side ,var(--c) 95%,transparent 100%)
calc(var(--x) - .75em) calc(var(--y) - .75em)/1.5em 1.5em fixed no-repeat;
}
.red{
width:33vw;
height:100vh;
position:absolute;
background-color:red;
--c:white;
}
.black{
width:33vw;
height:100vh;
margin-left:33vw;
position:absolute;
background-color:black;
--c:cyan;
}
.green{
width:33vw;
height:100vh;
margin-left:66vw;
position:absolute;
background-color:green;
--c:blue;
}Run Code Online (Sandbox Code Playgroud)
<div class="red box">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin molestie sem non dui tempus placerat non ut nulla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In vel nulla commodo, dignissim sem in, viverra ipsum. Nam non libero neque.</div>
<div class="black box">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin molestie sem non dui tempus placerat non ut nulla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In vel nulla commodo, dignissim sem in, viverra ipsum. Nam non libero neque.</div>
<div class="green box">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin molestie sem non dui tempus placerat non ut nulla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In vel nulla commodo, dignissim sem in, viverra ipsum. Nam non libero neque.</div>Run Code Online (Sandbox Code Playgroud)
这是另一个想法,您可以使用与linear-gradient3 个部分相同的尺寸为您制作的光标着色:
(function () {
var follower, init, mouseX, mouseY, positionElement, printout, timer;
follower = document.getElementById('follower');
printout = document.getElementById('printout');
mouseX = event => {
return event.clientX;
};
mouseY = event => {
return event.clientY;
};
positionElement = event => {
var mouse;
mouse = {
x: mouseX(event),
y: mouseY(event) };
follower.style.top = mouse.y + 'px';
return follower.style.left = mouse.x + 'px';
};
timer = false;
window.onmousemove = init = event => {
var _event;
_event = event;
return timer = setTimeout(() => {
return positionElement(_event);
}, 1);
};
}).call(this);
//# sourceURL=coffeescriptRun Code Online (Sandbox Code Playgroud)
* {
cursor: none;
margin:0;
padding:0;
}
.red{
width:33vw;
height:100vh;
position:absolute;
background-color:red;
}
.black{
width:33vw;
height:100vh;
margin-left:33vw;
position:absolute;
background-color:black;
}
.green{
width:33vw;
height:100vh;
margin-left:66vw;
position:absolute;
background-color:green;
}
#follower {
position: absolute;
top: 50%;
left: 50%;
}
#follower #circle {
position: absolute;
background:
linear-gradient(white,white) 0 0,
linear-gradient(cyan,cyan) 33vw 0,
linear-gradient(blue,blue) 66vw 0;
background-size:33vw 100vh;
background-attachment:fixed;
background-repeat:no-repeat;
border-radius: 50%;
opacity: 0.5;
height: 1.5em;
width: 1.5em;
margin-top: -0.5em;
margin-left: -0.5em;
z-index:2;
}Run Code Online (Sandbox Code Playgroud)
<div id="follower">
<div id="circle"></div>
</div>
<div class="red"></div>
<div class="black"></div>
<div class="green"></div>Run Code Online (Sandbox Code Playgroud)
上述代码的相关部分:
background:
linear-gradient(white,white) 0 0,
linear-gradient(cyan,cyan) 33vw 0,
linear-gradient(blue,blue) 66vw 0;
background-size:33vw 100vh;
background-attachment:fixed;
background-repeat:no-repeat;
Run Code Online (Sandbox Code Playgroud)
更新
根据您的新需求,您可以考虑mix-blend-mode实现您想要的
background:
linear-gradient(white,white) 0 0,
linear-gradient(cyan,cyan) 33vw 0,
linear-gradient(blue,blue) 66vw 0;
background-size:33vw 100vh;
background-attachment:fixed;
background-repeat:no-repeat;
Run Code Online (Sandbox Code Playgroud)
document.onmousemove = function(e) {
document.body.style.setProperty('--x',(e.clientX)+'px');
document.body.style.setProperty('--y',(e.clientY)+'px');
}Run Code Online (Sandbox Code Playgroud)
* {
cursor: none;
margin:0;
padding:0;
}
.box {
position:relative;
z-index:0;
color:#fff;
}
.box:before {
content:"";
position:absolute;
z-index:999;
top:0;
left:0;
right:0;
bottom:0;
background:
radial-gradient(farthest-side ,#fff 95%,transparent 100%)
calc(var(--x) - .75em) calc(var(--y) - .75em)/1.5em 1.5em fixed no-repeat;
mix-blend-mode:difference;
}
.red{
width:33vw;
height:100vh;
position:absolute;
background-color:red;
}
.black{
width:33vw;
height:100vh;
margin-left:33vw;
position:absolute;
background:url(https://picsum.photos/800/600?image=1069) center/cover;
}
.green{
width:33vw;
height:100vh;
margin-left:66vw;
position:absolute;
background:url(https://picsum.photos/800/600?image=1039) center/cover;
}Run Code Online (Sandbox Code Playgroud)
您只需更改光标颜色(一次)并定义所需的混合模式。
这是光标元素:
<div class="red box"></div>
<div class="black box"></div>
<div class="green box"></div>Run Code Online (Sandbox Code Playgroud)
document.onmousemove = function(e) {
document.body.style.setProperty('--x',(e.clientX)+'px');
document.body.style.setProperty('--y',(e.clientY)+'px');
}Run Code Online (Sandbox Code Playgroud)
* {
cursor: none;
margin:0;
padding:0;
}
body:before {
content:"";
position:absolute;
z-index:999;
top:var(--y);
left:var(--x);
right:0;
bottom:0;
width:1.5em;
height:1.5em;
border-radius:50%;
transform:translate(-50%,-50%);
background:#fff;
mix-blend-mode:difference;
}
.red{
width:33vw;
height:100vh;
position:absolute;
background-color:red;
}
.black{
width:33vw;
height:100vh;
margin-left:33vw;
position:absolute;
background:url(https://picsum.photos/800/600?image=1069) center/cover;
}
.green{
width:33vw;
height:100vh;
margin-left:66vw;
position:absolute;
background:url(https://picsum.photos/800/600?image=1039) center/cover;
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6540 次 |
| 最近记录: |