如何在滚动时保持这些 tagHover 的位置靠近标签并且 tagHover 具有固定位置?

2024-06-19

https://plnkr.co/edit/PuP3f71kCjkqgjjMkgNS?p=preview https://plnkr.co/edit/PuP3f71kCjkqgjjMkgNS?p=preview|下面还有一个 stackoverflow 片段。

不滚动标签悬停将正确显示:

问题

我认为问题是因为我有一个fixed在 tagHovers 上设置的位置tags-modal班级。不过我需要fixed该 div 上的位置,以便 tagHovers 可以突破.tags-container.

有没有另一种方法可以实现这种效果,而不必重新设计 tagHovers 的样式,以便它们必须适合较小的宽度尺寸tags-column?

Correct position without scrolling enter image description here

Once you scroll, position of the fixed tagHover breaks enter image description here

然而,一旦我开始滚动,tagHovers 就会失去与您悬停的标签的相对位置。


.tags-container其中有一个overflow-y: auto;来显示滚动。

每个标签都有一个关联的tag-hover指示。

tagHovers 具有这种样式(因此它们可以显示在标签列的约束之外。)

CSS

https://gist.github.com/leongaban/eb2988a1ff01ada78ea0f663fd0432a8 https://gist.github.com/leongaban/eb2988a1ff01ada78ea0f663fd0432a8

TagHover.html

<section class="tags-modal" ng-show="tghov.tag.hoverDisplay" ng-mouseleave="tghov.leave()">
    <h1>Hover for: {{ tghov.tag.term }}</h1>
</section>
var app = angular.module('plunker', ['ui.bootstrap'])
.component('tagHover', {
//      templateUrl: 'tags_modal.html',
  template: `<section class="tags-modal" ng-show="tghov.tag.hoverDisplay" ng-mouseleave="tghov.leave()">
  <h1>Hover for: {{ tghov.tag.term }}</h1>
</section>`,
  controllerAs: 'tghov',
  bindings : {
      tag: '<'
  }
})
.controller('TagsHoverController', function(){});

app.controller('MainCtrl', function($scope) {
});

app.component('myComponent', {
  bindings: {},
//  templateUrl: 'tags.html',
  template: `<section class="tags-view">
  <div class="tags-column">
    <h1>Tags</h1>
    <div class="tags-container">
      <ul>
        <li ng-repeat="tag in tgs.tags">
          
          <div class="tag-container-container" ng-mouseleave="tgs.leaveTag(tag)">
            <div class="tag-container">
              <div class="tag" ng-mouseover="tgs.tagHover(tag)">{{ tag.term }}</div>
              <tag-hover tag="tag"></tag-hover>
            </div>
          </div>
          
        </li>
      </ul>
    </div>
  </div>
  <div class="tags-content">
    <div class="tags-box">
      <h2>Tags Content</h2> 
    </div>
  </div>
</section>`,
  controllerAs: 'tgs',
  controller: TagsCtrl
});


TagsCtrl.$inject = [
    '$scope',
    '$uibModal'];

function TagsCtrl(
    $scope,
    $uibModal) {
    ///////////////////////////////////
    
    this.hello = "hello world";
    
    this.leaveTag = (tag) => tag.hoverDisplay = false;
    
    this.tagHover = (tag) => tag.hoverDisplay = true;
    
    this.tags = [
      { id:0, term: 'apple'},
      { id:1, term: 'butter'},
      { id:2, term: 'charlie'},
      { id:3, term: 'duff'},
      { id:4, term: 'edward'},
      { id:5, term: 'freddy'},
      { id:6, term: 'george'},
      { id:7, term: 'henry'},
      { id:8, term: 'ink'},
      { id:9, term: 'joker'},
      { id:10, term: 'kevin'},
      { id:11, term: 'leon'},
      { id:12, term: 'mary'},
      { id:13, term: 'nancy'},
      { id:14, term: 'olivia'},
      { id:15, term: 'preston'},
      { id:16, term: 'quincy'},
      { id:17, term: 'robyn'},
      { id:18, term: 'steven'},
      { id:19, term: 'teddy'},
      { id:17, term: 'ulysses'},
      { id:18, term: 'victor'},
      { id:19, term: 'winston'},
      { id:20, term: 'xavier'},
      { id:20, term: 'yvette'},
      { id:21, term: 'zander'}
    ];
}
/* Put your css in here */

body {
  font-family: Arial, sans-serif;
}

.tags-hover-container {
    float: left;
    position: fixed;
    z-index: 101;
    left: 240px;
    margin-top: 40px;
    width: 200px;
    height: auto;
}

.tags-column {
  z-index: 1;
  float: left;
  position: relative;
  overflow-y: auto;
  margin-top: 70px;
  max-width: 230px;
  min-width: 230px;
  height: calc(100% - 165px);
}

.tags-column li {
  list-style: none;
}

.tags-container {
  overflow-y: auto;
  height: 320px;
}

.tag-container-container { float: left; position: relative; width: 100%; }

.tag-container { float: left; position: relative; }

.tags-content {
  float: left;
  background: #f0f0f0;
}

.tags-box {
  float: left;
  padding: 20px;
  width: 320px;
  height: 640px;
  background: #4169E1;
}

.tags-box h2 {
  color: #fff;
}

.tag {
  margin: 0 10px 10px 0;
  padding: 9px 10px;
  width: auto;
  color: #fff;
  background: #3D3D3D;
  border-radius: 4px;
  cursor: pointer;
  clear: both;
}

.tag:hover {
  background: #656565;
}

.tags-modal {
  float: left;
  position: fixed;
  z-index: 101;
  left: 100px;
  margin-top: -20px;
  padding: 10px;
  width: 200px;
  height: auto;
  color: white;
  background: blue;
  border-radius: 4px;
}

.tags-modal:before {
    position: absolute;
    top: -8px;
    left: 26px;
    z-index: 99;
    content: '';
    display: block;
    height: 0; width: 0;
    border-bottom: 8px solid blue;
    border-left: 8px solid transparent;
    border-right: 8px solid transparent;
}
<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link href="style.css" rel="stylesheet" />
    <script src="https://code.jquery.com/jquery-2.2.4.min.js"
      integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
      crossorigin="anonymous"></script>
    <script src="https://code.angularjs.org/1.5.4/angular.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/2.3.1/ui-bootstrap.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/2.3.1/ui-bootstrap-tpls.js"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <my-component></my-component>
  </body>
</html>

最后!是的,没有 CSS 解决方案,我必须找出当前鼠标 y 位置并使用 ng-style 动态更新样式。

TickersPanel组件

this.hoverTicker = (event, ticker) => {
    MousePosition.set(event);
    const mouseY = MousePosition.current.y;
    ticker.pos = { top: `${mouseY}px` };
    ticker.hoverDisplay = true;
};

TickersPanel 标记(包含传入股票代码的 tagHover 组件)

<div class="tag-container" ng-mouseleave="tikp.leaveTicker(ticker)">
    <div class="ticker"
         ng-mouseenter="tikp.hoverTicker($event, ticker)"
         ng-click="tikp.selectTicker('portfolio', ticker);">
         <span ng-if="ticker.long && !ticker.hoverDisplay">
            {{ ticker.short }}
         </span>
         <span ng-if="!ticker.long || ticker.hoverDisplay">
            {{ ticker.ticker }}
         </span>
    </div>
    <ticker-hover ticker="ticker"></ticker-hover>
</div>

鼠标位置工厂

const set = (e) => {
    current.x = e.pageX;
    current.y = e.pageY;
}

最后标记悬停标记

<div class="ticker-hover-container"
    ng-style="tkhov.ticker.pos" ng-show="tkhov.ticker.hoverDisplay">

^ tkhov is the controllerAs this

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在滚动时保持这些 tagHover 的位置靠近标签并且 tagHover 具有固定位置? 的相关文章

  • JavaScript 在对象中创建数组并将数据推送到数组

    我是编程新手 我正在尝试 React 并具有函数 addComment 当用户向新闻添加评论时执行该函数 此时我需要创建一个属性comments 数组 并分配或推送到该数组输入评论值价值 但现在我只重写了数组的 0 个元素 无法添加新元素
  • 使用 jQuery 将文本分解到随机位置

    有一些 jQuery 示例 介绍如何内爆文本 如下所示 http jsfiddle net doktormolle dNXVx http jsfiddle net doktormolle dNXVx 我怎样才能做到相反 我想将跨度元素中的字
  • 使用 Javascript 基于 Cookie 的重定向

    我正在尝试根据 cookie 的存在创建重定向 所以当用户连接到我的网站时jonathanstevens org他们第一次被重定向到jonathanstevens org landing 代码部分 Global js function cr
  • 使用 jQuery 检测用户何时滚动到 div 底部

    我有一个 div 框 称为 Flux 里面有可变数量的内容 此 divbox 的溢出设置为自动 现在 我想做的是 当使用滚动到此 DIV 框的底部时 将更多内容加载到页面中 我知道如何执行此操作 加载内容 但我不知道如何检测用户何时滚动到
  • Angularjs 中的动态表单名称属性

    当动态创建 inputName 时 人们将如何使用 formName inputName valid
  • 如何制作像 Twitter 一样带有字符限制突出显示的文本区域?

    Twitter 的提交推文文本框会突出显示超出字符限制的字符 如您所见 超出字符限制的字符以红色突出显示 我怎样才能实现这样的目标 您将在这里找到必要的解决方案和所需的代码 超过 140 限制 即变为负数 时如何插入 标签 https st
  • 类型错误:app.makeSingleInstance 不是函数

    从 Electron v2 0 3 升级到最新版本 v5 0 1 当我尝试运行电子时 出现以下错误 TypeError app makeSingleInstance is not a function 我相信这是因为 api 已经改变了 我
  • 如何在html5画布中向前和向后移动圆圈中的对象?

    我正在 html5 canvas 中开发一个小应用程序 我需要使用键盘按键以圆周运动移动对象 我可以使用键盘按键移动对象 但存在错误 该对象不会从同一位置向后或向前移动 任何人都可以帮助我完成此操作 请检查以下代码 任何形式的帮助将非常感激
  • 在 Google 地图上显示路径时出现问题

    我有多个经度和纬度点 例如 1 long lat starting point 2 long lat 3 long lat 4 long lat 我的代码如下
  • 通过 Scriptaculous 拖放防止 JavaScript 点击事件

    我的页面上有一些可拖动的元素 这些相同的元素有一个导航到另一个页面的点击事件 我试图确定在用户拖动时防止触发单击事件的最佳方法 但如果不拖动则仍然允许单击事件 有人对实现这一目标的最佳方法有任何想法吗 我通过使用类似以下内容解决了这个问题
  • NicEdit 数据不在 POST 中

    我确信我在这里错过了一些非常简单的东西 我已经搜索过 但似乎找不到答案 用这个简单的形式 我如何将 NicEdit 框中的内容发送到我的 HTTP POST 我得到的只是原始文本区域值而不是编辑后的版本 h2 Test Page h2
  • 三行无表 CSS 布局,中间行填充剩余空间

    我需要的是一个包含 3 行的基于像素高度的 div 最上面一行的高度根据内容而变化 底行具有固定高度 中间行填充任何剩余空间 一切都是宽度 100 我一直在努力构建一个 div 和基于 CSS 的布局几个小时 这让我从字面上看seconds
  • 没有jquery的动画,左右滑动

    我试图在显示 div 时将其向左滑动 在隐藏它时将其向右滑动 但我不想使用 jQuery 有没有一种方法可以在不使用javascript库的情况下制作简单的动画并支持IE7和IE8 这是我的显示 隐藏js function showHide
  • 将事件处理程序分配给带括号和不带括号的方法之间的区别

    假设您有以下内容 function doStuff code 2 种说法有什么区别 window onload doStuff window onload doStuff 两个语句都立即调用该方法 但如果我使用第一个语句 我可以将 onlo
  • Openlayers 3 中心地图

    我在唱歌开放层 3 http openlayers org en v3 0 0 apidoc 显示地图 我想使用经纬度坐标将地图居中 我正在使用快速入门代码 http openlayers org en v3 1 1 doc quickst
  • 通过 XMLHttpRequest 将数据从 JavaScript 发送到 PHP

    再会 我正在尝试将一段简单的数据从一个 php 文件 manage php 发送到另一个 view php 我无法通过表单发送数据 我想通过 JS 脚本发送数据 这是我的尝试 var read function id xmlhttp new
  • Webpack 未将 css 复制到 dist 中

    我有以下 css 文件 以及以下 webpack 配置 var path require path module exports entry app src index js output path path resolve dirname
  • Bootstrap轮播不滑动

    我一直在尝试使用 Bootstrap Carousel 并在一定程度上取得了成功 我也可以单击并更改图像 但我有一个问题 只是不滑动而已 我哪里做错了 html div class carousel slide ol class carou
  • 父元素的 mousedown 事件中的 offsetX 和 offsetY 错误

    我在 mousedown 上获取 offsetX 时遇到问题 下面是我的代码 div Click the text The mouseDown function is triggered when the mouse button is p
  • html 中的图像按钮

    我正在尝试获取一个带有图像的按钮 我见过类似下面的东西 但它们不会为您提供普通按钮所具有的按钮按下 释放效果

随机推荐