【问题标题】:Change css :onhover distance更改css:悬停距离
【发布时间】:2012-07-15 22:28:15
【问题描述】:

我想知道是否有办法让 css :onhover 更快发生(即我距离链接 10 像素,:onhover 调用,而距离仍然 10 像素)。

编辑:我正在想办法改变滚动条的:onhover 距离。

编辑 2:这是代码:

html {
    overflow: auto;
}
body {
    position: absolute;
    top: 20px;
    left: 20px;
    bottom: 20px;
    right: 20px;
    padding: 30px; 
    overflow-y: scroll;
    overflow-x: hidden;
}
::-webkit-scrollbar {
    width: 5px;
}

/* Track */
::-webkit-scrollbar-track {
    -webkit-border-radius: 10px;
    border-radius: 10px;
    border: none;
}

/* Handle */
::-webkit-scrollbar-thumb{
    -webkit-border-radius: 10px;
    border-radius: 10px;
    background: rgba(200,200,200,0.1);
}
::-webkit-scrollbar-thumb:hover {
    -webkit-border-radius: 10px;
    border-radius: 10px;
    background: rgba(200,200,200,0.8); 
}

【问题讨论】:

    标签: css webkit onhover


    【解决方案1】:

    CSS border property 添加到将接收悬停事件的元素。

    参考1:jsFiddle Proximity Detector

    编辑:我现在看到您已经为您的问题重写了主要编辑

    我查看了您的代码,并提出了您可能喜欢的 Chrome 滚动条的方法!

    参考2:jsFiddle Scrollbar Proximity Detector

    【讨论】:

    • 哇。看起来你用第二个例子搞定了。
    • 哇!第二个示例按我想要的方式工作。谢谢!
    • 还有css,谢谢!
    【解决方案2】:

    我发现解决这种侵入性的 CSS 方法。透明的<divs>、额外的标记和margin/padding 方法会妨碍周围的UI。但如果它们适合你,那将是纯 CSS 方法。

    如果您愿意使用 Javascript 来解决这个问题,您可以在 body 上捕获 mousemove 并计算关系。

    演示: http://jsfiddle.net/ThinkingStiff/Buaze/

    脚本

    function isNear( element, distance, event ) {
        var left = element.documentOffsetLeft - distance,
            top = element.documentOffsetTop - distance,
            right = left + element.clientWidth + ( 2 * distance ),
            bottom = top + element.clientHeight + ( 2 * distance ),
            x = event.pageX,
            y = event.pageY;
        return ( x > left && x < right && y > top && y < bottom );
    };
    
    document.body.addEventListener( 'mousemove', function () {
        var near = document.getElementById( 'near' );
    
        if( isNear( near, 20, event ) ) {
            near.textContent = 'is near!';
        } else {
            near.textContent = '';
        };
    } );           
    
    window.Object.defineProperty( Element.prototype, 'documentOffsetTop', {
        get: function () { 
            return this.offsetTop + ( this.offsetParent ? this.offsetParent.documentOffsetTop : 0 );
        }
    } );
    
    window.Object.defineProperty( Element.prototype, 'documentOffsetLeft', {
        get: function () { 
            return this.offsetLeft + ( this.offsetParent ? this.offsetParent.documentOffsetLeft : 0 );
        }
    } );
    

    HTML

    <div id="near"></div>
    

    CSS

    #near {
        border: 1px solid red;
        height: 100px;
        left: 50px;
        line-height: 100px;
        position: relative;
        text-align: center;
        top: 50px;
        width: 100px;
    }
    

    【讨论】:

    • @CharlesL 我错过了那个编辑。不,Javascript 无法访问这样的滚动条。
    • @CharlesL,JavaScript 可以判断是否设置了垂直溢出,从而表明滚动条可见。也就是说,这是使用当前滚动条“CSS 样式”以及确定滚动条位置的浏览器视口“右侧”的问题。当一切都说完了,你的脚本也可以工作了! (滚动句柄的滚动顶部和固定垂直大小需要额外的工作)+1 仍然是一个很好的答案!
    【解决方案3】:

    不,但是您可以在其上直接放置一个比目标元素大 10 像素的透明 div,然后使用 Javascript 为其提供 onhover 函数。不过,我认为这对于纯 CSS 是不可能的。

    【讨论】:

    • 只需要确保它不会真正干扰链接附近区域的任何功能。
    • 确实如此。这种问题真的很棘手——通过z-index 属性将 div 定位在链接下方可能会避免该特定问题。
    【解决方案4】:

    您不需要使用 javascript,您可以使用 padding:10px 设置父包装容器,并在其上设置 :hover 选择器而不是您的子元素。

    【讨论】:

    • 这取决于它是否会干扰周围的元素。使用 javascript,您可以在所有内容的顶部设置一个固定位置的 div 作为叠加层,并在滚动时移动 div 以始终匹配链接的位置。
    • @JonTaylor 是的,这是一个很好的观点,但我认为将父级绝对定位,将子级设置为相对可能是一种可靠(虽然混乱)的解决方法。
    猜你喜欢
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2012-11-02
    • 2012-12-15
    • 2014-06-10
    • 2021-01-06
    • 1970-01-01
    相关资源
    最近更新 更多