【问题标题】:img src & jQuery?img src & jQuery?
【发布时间】:2010-12-22 23:47:17
【问题描述】:

我有一张图片,并使用 jQuery 将它变成了一个按钮。 所谓的按钮有两种状态:常规和按下。

使用 jQuery 我检测到“mousedown”和“mouseup”并替换“src”属性,如下所示:

$("#btn").click(function() {
   ;//DO SOMETHING HERE WHEN PRESSED
});
$("#btn").mousedown(function() {
   $(this).attr({ src: regular.png });
});
$("#btn").mouseup(function() {
   $(this).attr({ src : pushed.png });
});

在离线测试时效果很好!但是今天我注意到,当图像存储在服务器上时,它会随着每个属性的变化一遍又一遍地加载图像。

如何避免这个加载问题,让所有图片只从服务器加载一次?

另外,如果有更好的方法来完成我在这里尝试做的事情,请告诉我。

谢谢。

【问题讨论】:

标签: jquery image button attributes src


【解决方案1】:

你试过Preload插件吗?

更新:对不起,我没有仔细阅读,我认为这是一个翻转要求。更通用的预加载脚本是here

顺便说一句,我同意 CSS 精灵是更好的解决方案如果它们适合这种情况,即如果您可以完全控制图像本身。

【讨论】:

  • 我不确定 Preload 能否解决这里的问题。例如:初始状态是“常规”。一旦我按住按钮,它就会从服务器加载“推送”图像。当我释放按钮时,它再次加载“常规”图像!等等。浏览器只是一遍又一遍地加载相同的图像......
【解决方案2】:

创建包含两种按钮状态的单个图像。然后,在 mouseout/mouseover 上动态改变背景图片的位置:

<style type="text/css">

 .button_normal {
   width: 50px;
   height: 50px;
   background-image: url(merged_button_bg.png);
   background-repeat: no-repeat;
   border: solid black 1px;
   cursor: pointer;
 }

 .button_over {
  background-position: -50px;
 }

</style>

<div class="button_normal"></div>

<script>

 $(document).ready(function() {
  $('.button_normal').mouseover(function() {
   $(this).addClass('button_over');
  });
  $('.button_normal').mouseout(function() {
   $(this).removeClass('button_over');
  });
 });

</script>

本示例假设目标图像为 50px 正方形,merged_button_bg.png 为 100px x 50px。

【讨论】:

  • 我可以用 做到这一点吗?因为
    不喜欢与其他 div 保持在同一行:/
  • 您可以在.button_normal 类中添加float: left 规则以使div 并排对齐
  • 或显示:块;到 :)
【解决方案3】:

您可以使用 span 或 div 来显示图像(通过背景图像),而不是更改 src 属性,并创建两个 CSS 类,每个图像一个。然后你可以切换元素的 CSS 类来切换按钮。

【讨论】:

  • +1。更好的是,使用 css sprites 会减少请求的数量。 alistapart.com/articles/sprites
  • 这是最优雅的解决方案之一。就像 Alex 推荐的那样,我会使用 pygorex1 发布的示例中的 CSS sprite。
猜你喜欢
相关资源
最近更新 更多
热门标签