如何在 AngularJS 中悬停时显示图像

Posted

技术标签:

【中文标题】如何在 AngularJS 中悬停时显示图像【英文标题】:How to display images on hover in AngularJS 【发布时间】:2018-03-14 04:59:52 【问题描述】:

image HTML

我想在悬停在下面的图像时显示上面的图像。但我不知道如何显示它,因为我是角度新手

<div class="col-md-7" ng-controller="slideController">
    <div class="text-center">
    <?php 
        $id = $_GET['id'];
        $result1 = mysqli_query($db, "SELECT * FROM product_images WHERE product_id ='$id' ");
        while($row1 = mysqli_fetch_assoc($result1))  ?>
            <img src="../backend/uploads/<?php echo $row1['image']; ?>"   ng-model="id[<?php echo $row1['id']; ?>]" ng-hide="hideImage">
    <?php  ?>
    <hr>
    <?php 
        $id = $_GET['id'];
        $result1 = mysqli_query($db, "SELECT * FROM product_images WHERE product_id ='$id' ");
        while($row1 = mysqli_fetch_assoc($result1))  ?>
            <img src="../backend/uploads/<?php echo $row1['image']; ?>"   ng-mouseover="slideImage(<?php echo $row1['id']; ?>)">
    <?php  ?>
    </div>
</div>

JS

var slide=angular.module("myApp",[])
slide.controller('slideController', function ($scope) 
$scope.id = ;
$scope.hideImage = true;
console.log($scope.id)

$scope.slideImage = function(id) 
    if (id == $scope.id) 
        $scope.hideImage = false;
    

【问题讨论】:

【参考方案1】:

最好将后端数据输出为javascript对象,然后以角度作用于该对象。

<div class="col-md-7" ng-controller="slideController">
    <div class="text-center">
      <img ng-repeat='image in images' ng-src="image.url"   ng-hide="!image.show">
    <hr>
      <img ng-repeat='image in images' ng-src="image.url"   ng-mouseenter="image.show = true" ng-mouseleave="image.show = false">
    </div>
</div>

<script>var images = [
  <?php 
    $id = $_GET['id'];
    $result = mysqli_query($db, "SELECT * FROM product_images WHERE product_id ='$id' ");
      while($row = mysqli_fetch_assoc($result))  ?>
  
    url: "<?php echo $row['image']; ?>",
    id: <?php echo $row['id']; ?>
  ,
  <?php  ?>
]</script>

编辑:我看到您正在尝试将中心区域用作主要查看器,就像轮播一样。在这种情况下,最好分配一个变量而不是使用ng-repeat

angular.module('test', []).controller('slideController', SlideController);

function SlideController($scope) 
  $scope.images = [
     id: 1, url: 'https://cdn.pixabay.com/photo/2015/04/17/09/36/domestic-cat-726989_960_720.jpg' ,
     id: 2, url: 'https://cdn.pixabay.com/photo/2014/12/03/21/20/kittens-555822_960_720.jpg' ,
     id: 3, url: 'https://cdn.pixabay.com/photo/2013/09/29/12/38/cat-188088_960_720.jpg' ,
     id: 4, url: 'https://cdn.pixabay.com/photo/2015/11/15/20/21/cat-1044750_960_720.jpg' ,
  ]
  
  $scope.mainImage = $scope.images[0];
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<div class="col-md-7" ng-app="test" ng-controller="slideController">
  <div class="text-center">
    <img ng-src="mainImage.url"  >
    <hr>
    <img ng-repeat="image in images" ng-src="image.url"   ng-mouseenter="$parent.mainImage = image">
  </div>
</div>

【讨论】:

@BhaskararoGummidi 这应该是正确的答案,我要撤回我的答案,因为它不是正确的方法。但也请参考here @Icycool 我认为加载的数组是无效的,因为数组的对象之间没有逗号,你能改变这个吗,我找到了这个加载到数组中的链接here,谢谢,太好了回答! @Icycool 数组将在数组的最后一个元素中有一个逗号,可以吗?你能提供角度数组的完整JS吗,它应该是一个范围变量,抱歉答案不完整所以我问这个,第一个元素也应该默认显示 @NarenMurali 是的,我总是在最后一个元素中使用带有逗号的 js 数组来进行版本控制,所以没关系。如果要默认显示第一个元素,可以在控制器中设置$scope.images[0].show = true @Icycool 优秀的先生......但是一旦鼠标离开图像,默认图像就会消失。

以上是关于如何在 AngularJS 中悬停时显示图像的主要内容,如果未能解决你的问题,请参考以下文章

Tailwind CSS:在图像悬停时显示文本

Flipbox 在 Chrome 中悬停时显示扭曲的图像

Django Admin - 悬停时显示图像

半秒后使用 AngularJS 在鼠标悬停时显示子菜单

使用innerHTML在悬停时显示图像图例(不是工具提示)?

html 在悬停时显示图像,隐藏当前图像