【发布时间】:2013-04-03 16:53:56
【问题描述】:
我正在使用 jQuery 构建产品配置页面,当用户选择相应的颜色选项时,我需要能够更改产品的颜色,在本例中是鞋子。每只鞋都有四个可由用户指定的组成部分。例如。鞋面颜色、鞋底颜色和花边颜色和拼接颜色。
我有各种颜色选项的鞋子照片,可以使用标准化的文件命名约定来调用它们,例如:
black-black-black-black.jpg
和
红黑黑黑.jpg
黑红红红.jpg
等等
我需要产品照片来记住以前的选择,所以如果访问者选择红色鞋面,那么如果他们选择蓝色鞋底,就会记住这一点。 所以最初我们称之为全黑鞋(black-black-black-black.jpg),然后我们在选择红色鞋面时更改该图像(red-black-black-black.jpg),然后再次(red-red-选择红色鞋底时的黑色黑色。
我的 jQuery 缩放脚本 (cloudzoom) 使用图像属性来分配大小图像的大小。 所以我需要用相关文件名替换每个用户选择的这一行,并使该选择具有粘性,直到下一个选项选择。
我这几天一直在研究这个问题,如果可能的话,我非常感谢一些帮助。谢谢。
我的代码在下面,这里有一个工作演示 - http://www.stepto.co.uk/view/product/
jQuery(document).ready(function() {
jQuery('.options ul li a').each(myFunction);
jQuery('.options ul li a').click(function(){
jQuery('.options ul li a').each(myFunction2)
});
});
function myFunction2() {
var embel = jQuery(this).parent().attr("class").split(' ').pop();
jQuery(this).each(function(){
var target = jQuery(this).parent().parent().attr("class");
if(target == "optionset1"){
var base = jQuery(this).parent().attr("class").split(' ').pop();
}
if(target == "optionset3"){
var sole = jQuery(this).parent().attr("class").split(' ').pop();
}
if(target == "optionset4"){
var heel = jQuery(this).parent().attr("class").split(' ').pop();
}
var myattributes2 = "useZoom: '#zoom1', image: 'images/small/" + base + "-" + embel + "-" + sole + "-" + heel + ".jpg', zoomImage: 'images/large/" + base + "-" + embel + "-" + sole + "-" + heel + ".jpg'";
jQuery(this).attr({"class": "cloudzoom-gallery", "href": "#", "data-cloudzoom" : myattributes2});
});
}
function myFunction() {
jQuery(this).each(function(){
var base = "black";
var embel = "black";
var sole = "black";
var heel = "black";
var target = jQuery(this).parent().parent().attr("class");
if(target == "optionset1"){
var base = jQuery(this).parent().attr("class").split(' ').pop();
}
if(target == "optionset2"){
var embel = jQuery(this).parent().attr("class").split(' ').pop();
}
if(target == "optionset3"){
var sole = jQuery(this).parent().attr("class").split(' ').pop();
}
if(target == "optionset4"){
var heel = jQuery(this).parent().attr("class").split(' ').pop();
}
var myattributes2 = "useZoom: '#zoom1', image: 'images/small/" + base + "-" + embel + "-" + sole + "-" + heel + ".jpg', zoomImage: 'images/large/" + base + "-" + embel + "-" + sole + "-" + heel + ".jpg'";
jQuery(this).attr({"class": "cloudzoom-gallery", "href": "#", "data-cloudzoom" : myattributes2});
});
}
<div class="contents" style="width:70%; float:left;">
<div class="theshoe">
<img class="cloudzoom" src="images/small/black-black-black-black.jpg" id="zoom1" data-cloudzoom="zoomImage: 'images/large/black-black-black-black.jpg', zoomSizeMode: 'zoom', zoomOffsetX: 0, zoomOffsetY: 0, zoomFlyOut: false, zoomPosition:'inside'" />
</div>
</div>
<div class="theoptions" style="width:30%; float:left;">
<div class="options">
<h2>Upper Colour</h2>
<ul class="optionset1">
<li class="suedeblack black"><a href="#" class="cloudzoom-gallery">black <img src="images/blank.png"></a></li>
<li class="suedepurple red"><a href="#" class="cloudzoom-gallery">red <img src="images/blank.png"></a></li>
</ul>
<h2>Laces</h2>
<ul class="optionset2">
<li class="studblack black"><a href="#" class="cloudzoom-gallery">black laces <img src="images/blank.png"></a></li>
<li class="studgrey grey"><a href="#" class="cloudzoom-gallery">white laces<img src="images/blank.png"></a></li>
</ul>
<h2>Sole</h2>
<ul class="optionset3">
<li class="soleblack black"><a href="#" class="cloudzoom-gallery">black sole <img src="images/blank.png"></a></li>
<li class="solegrey white"><a href="#" class="cloudzoom-gallery">white sole <img src="images/blank.png"></a></li>
</ul>
<h2>Stitching</h2>
<ul class="optionset4">
<li class="heelblack black"><a href="#" class="cloudzoom-gallery">black stitch <img src="images/blank.png"></a></li>
<li class="heelgrey white"><a href="#" class="cloudzoom-gallery">white stitch <img src="images/blank.png"></a></li>
</ul>
</div>
</div>
</div>
</div>
【问题讨论】:
-
您是否考虑过使用 $.fn.data。我不会尝试编写示例,但您可以在数据中创建大量对象,涵盖您所需的信息,并根据需要进行更改。
-
感谢您的建议。我在这里找到了一个 jQuery.data 示例。我在正确的轨道上吗? - bennadel.com/blog/…
-
由于您的建议,我更新了我的示例 (stepto.co.uk/view/product/help2.php) 以使用 data() 方法,并且我的颜色存储为其中的对象。我现在需要根据用户选择来操作对象。如果您能再给我一些指导,将不胜感激。 @user1167442
-
我不知道,因为我不知道应用程序的上下文,但看起来你可能过于复杂了。具体来说,您想在任何特定时刻了解哪些数据?这里可能有一个非常简单的解决方案。如果您告诉我数据(或数据类型),我可能会提供具体指导。
-
我的颜色选项链接每个都有一个自定义属性“cloudzoom”,格式为 。选择颜色选项时,我需要更新每个链接属性。因此,JPG“Black-Black-Black-Black.jpg”将在选择红色上部时更新为“Red-Black-Black-Black.jpg”。并且这种更新后的上部颜色一次应用于页面上的所有选项链接。
标签: jquery image variables global-variables each