【问题标题】:How can I store a string without duplicating it?如何在不复制的情况下存储字符串?
【发布时间】:2022-01-25 13:57:33
【问题描述】:

有 2 个卡片面板,当我将鼠标悬停在卡片上时,我想更改卡片的图像,然后当我离开它时,我想回到初始图像。

第一次它适用于每个图像,但是当我第二次尝试悬停时,它会复制我存储路径的字符串..

HTML 代码

<div class="col-lg d-flex justify-content-center mb-4">
                        <div class="card border-0"">
                            <img src="img/slide-1.jpg" class=" card-img-top" alt="...">
                            <div class="card-body">
                            <h5 class="card-title">Image 1</h5>
                            </div>
                        </div>
                    </div>
<div class="col-lg d-flex justify-content-center mb-4">
                        <div class="card border-0"">
                            <img src="img/slide-1.jpg" class=" card-img-top" alt="...">
                            <div class="card-body">
                            <h5 class="card-title">Image 2</h5>
                            </div>
                        </div>
                    </div>

JQUERY 代码

(function ($) {
    "use strict"; // Start of use strict
    var image_product;
    var image_product_path="/Users/paul/Desktop/Site/";
    $(".card-img-top").on({
        mouseenter: function () {
            image_product = $(this).attr("src");
            $(this).attr("src","/Users/paul/Desktop/Site/img/slide-3.jpg");
            
        },
        mouseleave: function () {
            $(this).attr("src",image_product_path+image_product);
        }
    });

  
  })(jQuery); // End of use strict

当我尝试将鼠标悬停在卡片上时第二次触发的错误: [Error] Not allowed to load local resource: file:///Users/paul/Desktop/Site//Users/paul/Desktop/Site/img/slide-1.jpg

当我尝试将鼠标悬停在卡片上时第三次触发的错误: [Error] Not allowed to load local resource: file:///Users/paul/Desktop/Site//Users/paul/Desktop/Site//Users/paul/Desktop/Site//Users/paul/Desktop/Site/img/slide-1.jpg 等等

【问题讨论】:

  • 错误很明显,你不允许加载本地资源file://重复是因为你在做image_product_path+image_product
  • @LawrenceCherone 以及为什么当我将鼠标悬停在它上面时它第一次工作?
  • 使用网络服务器。切勿使用 打开文件 或在文件管理器中双击 HTML 文件
  • 因为它最初是 src="img/slide-1.jpg" 而不是 src="/Users/paul/Desktop/Site/img/slide-3.jpg"
  • @LawrenceCherone image_product = /img/slide-1image_product_path=/Users/paul/Desktop/Site/

标签: javascript html jquery


【解决方案1】:

请检查链接 https://stackoverflow.com/a/18032363/3526623

上面链接中没有Jquery的解决方案

function hover(element) {
  element.setAttribute('src', 'http://dummyimage.com/100x100/eb00eb/fff');
}

function unhover(element) {
  element.setAttribute('src', 'http://dummyimage.com/100x100/000/fff');
}


<img id="my-img" src="http://dummyimage.com/100x100/000/fff" onmouseover="hover(this);" onmouseout="unhover(this);" />

【讨论】:

  • 感谢@Daniil,但我认为这对我没有帮助。我想做一些动态的事情,因为我会有很多卡片,而且我不想花时间在硬编码上。
【解决方案2】:

这是src 属性和您的image_product 变量在不同阶段包含的内容:

Phase src image_product
before first run img/slide-1.jpg undefined
first mouseenter /Users/paul/Desktop/Site/img/slide-3.jpg img/slide-1.jpg
first mouseleave /Users/paul/Desktop/Site/img/slide-1.jpg img/slide-1.jpg
2nd mouseenter /Users/paul/Desktop/Site/img/slide-3.jpg /Users/paul/Desktop/Site/img/slide-3.jpg
2nd mouseleave /Users/paul/Desktop/Site/Users/paul/Desktop/Site/img/slide-1.jpg /Users/paul/Desktop/Site/img/slide-3.jpg

在您的处理程序函数中,当鼠标进入时,您会继续将 src 中的任何内容存储到 image_product 中。

您第二次使用鼠标进入时,image_product 已经包含完整路径,但在您的 mouseleave 函数中,您每次都在前面添加路径。

【讨论】:

  • 那么我应该清理 Image_product,让它再次清空吗?
  • @我不会为你思考,如果你想做一些琐碎的编程,这是你绝对必须掌握的技能。
  • 不需要Image_product_path,我删除它并工作,但第一次没有工作..不知道我做错了什么..谢谢你试图帮助我。
  • 是的,在制作表格概览时付出了相当大的努力,很高兴它至少有所帮助。在 Markdown 中制作表格并不好玩 :(
  • 是的,很抱歉。感谢您的帮助。希望将来我能像你对我一样帮助别人。
【解决方案3】:

有 n 个卡片面板,我想更改卡片的图像 当我将鼠标悬停在卡片上时,当我离开它时,我想回到 初始图像。

将原始图像设置为数据属性,然后在鼠标移出时将其切换回来。

(function($) {
  $(".card-img-top").on({
    mouseenter: function() {
      $(this).data('original', $(this).attr("src"));
      $(this).attr("src", "https://via.placeholder.com/300/09f/000.png");
    },
    mouseleave: function() {
      $(this).attr("src", $(this).data('original'));
    }
  });
})(jQuery);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="col-lg d-flex justify-content-center mb-4">
  <div class="card border-0">
    <img src="https://via.placeholder.com/300/09f/fff.png" class=" card-img-top " alt="... ">
    <div class="card-body ">
      <h5 class="card-title ">Image 1</h5>
    </div>
  </div>
</div>

如果您想为每张不同的卡片使用不同的图像,请将其设置为数据属性。

(function($) {
  $(".card-img-top").on({
    mouseenter: function() {
      $(this).data('original', $(this).attr("src"));
      $(this).attr("src", $(this).data('hover-image'));
    },
    mouseleave: function() {
      $(this).attr("src", $(this).data('original'));
    }
  });
})(jQuery);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="col-lg d-flex justify-content-center mb-4">
  <div class="card border-0">
    <img src="https://via.placeholder.com/100/09f/fff.png" data-hover-image="https://via.placeholder.com/100/09f/000.png" class=" card-img-top " alt="... ">
    <div class="card-body ">
      <h5 class="card-title ">Image 1</h5>
    </div>
  </div>
</div>

<div class="col-lg d-flex justify-content-center mb-4">
  <div class="card border-0">
    <img src="https://via.placeholder.com/100/07f/aaa.png" data-hover-image="https://via.placeholder.com/100/05f/333.png" class=" card-img-top " alt="... ">
    <div class="card-body ">
      <h5 class="card-title ">Image 2</h5>
    </div>
  </div>
</div>

【讨论】:

  • 谢谢,效果很好。没想到在html中添加新数据。
  • 这是一个非常好的解决方案,但完全无法显示 OP 做错了什么。但由于 OP 没有要求解释,所以这里没有反对意见。
猜你喜欢
  • 2021-06-11
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2019-12-18
相关资源
最近更新 更多