js 原生图片滑动 + 商品选中 价格叠加 input checkbox 选中 价格相加
要实现的效果 还是截图看容易理解
实现效果
点击图中的左箭头 商品向左移动 右箭头像右移动
左边没有的时候 左箭头不能点击滑动
这个效果要的是右箭头点击 滑动的 是一排四个商品 (也有的需求会是单个商品滑动 这里是控制的滑动宽度决定的~ )

后面要实现的就是 选中商品 选中 右侧提示 几个搭配商品 总价格 随着变动

下面来看下代码 先实现滑动
HTML 结构
重点
id="arrLeft" 左箭头ID
id="scrollbox" 包括产品列表的父级ID
id="arrRight" 右箭头ID
<div class="other-recommend"> <a href="javascript:void(0)" rel="prev" class="prev left" id="arrLeft"></a> <div style="width:730px; height: 242px; overflow: hidden; float: left;" id="scrollbox"> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">350</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">351</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">352</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">353</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">354</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">355</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">356</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">357</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">358</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">359</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">370</i></li> </ul> </div> <a href="javascript:void(0)" rel="next" class="next left" id="arrRight"></a> </div>
JS 这里需要先加载一个js文件 编写好的
<SCRIPT language=javascript type=text/javascript>
var scrollPic2 = new ScrollPic();
scrollPic2.scrollContId = "scrollbox"; //内容容器ID
scrollPic2.arrLeftId = "arrLeft";//左箭头ID
scrollPic2.arrRightId = "arrRight"; //右箭头ID
scrollPic2.frameWidth = 730;//显示框宽度
scrollPic2.pageWidth = 730; //翻页宽度180 一个
scrollPic2.speed = 10; //移动速度(单位毫秒,越小越快)
scrollPic2.space = 10; //每次移动像素(单位px,越大越快)
scrollPic2.autoPlay = false; //自动播放
scrollPic2.autoPlayTime = 3; //自动播放间隔时间(秒)
scrollPic2.initialize(); //初始化
</SCRIPT>
<script type="text/javascript" src="scroll.js"></script>
scroll.js
var sina = { $: function (objName) { if (document.getElementById) { return eval('document.getElementById("' + objName + '")') } else { return eval('document.all.' + objName) } }, isIE: navigator.appVersion.indexOf("MSIE") != -1 ? true : false, addEvent: function (l, i, I) { if (l.attachEvent) { l.attachEvent("on" + i, I) } else { l.addEventListener(i, I, false) } }, delEvent: function (l, i, I) { if (l.detachEvent) { l.detachEvent("on" + i, I) } else { l.removeEventListener(i, I, false) } }, readCookie: function (O) { var o = "", l = O + "="; if (document.cookie.length > 0) { var i = document.cookie.indexOf(l); if (i != -1) { i += l.length; var I = document.cookie.indexOf(";", i); if (I == -1)I = document.cookie.length; o = unescape(document.cookie.substring(i, I)) } } ; return o }, writeCookie: function (i, l, o, c) { var O = "", I = ""; if (o != null) { O = new Date((new Date).getTime() + o * 3600000); O = "; expires=" + O.toGMTString() } ; if (c != null) { I = ";domain=" + c } ; document.cookie = i + "=" + escape(l) + O + I }, readStyle: function (I, l) { if (I.style[l]) { return I.style[l] } else if (I.currentStyle) { return I.currentStyle[l] } else if (document.defaultView && document.defaultView.getComputedStyle) { var i = document.defaultView.getComputedStyle(I, null); return i.getPropertyValue(l) } else { return null } } }; function ScrollPic(scrollContId, arrLeftId, arrRightId, dotListId) { this.scrollContId = scrollContId;// 滚动父级元素id this.arrLeftId = arrLeftId;// 左箭头包裹元素id this.arrRightId = arrRightId;// 右箭头包裹元素id this.dotListId = dotListId; this.dotClassName = "dotItem"; this.dotOnClassName = "dotItemOn"; this.dotObjArr = []; this.pageWidth = 0;// 翻页宽度 this.frameWidth = 0;//显示框宽度 this.speed = 10;//移动速度(单位毫秒,越小越快) this.space = 10; this.pageIndex = 0; this.autoPlay = true; this.autoPlayTime = 5; var _autoTimeObj, _scrollTimeObj, _state = "ready"; this.stripDiv = document.createElement("DIV"); this.listDiv01 = document.createElement("DIV"); this.listDiv02 = document.createElement("DIV"); if (!ScrollPic.childs) { ScrollPic.childs = [] }; /*this.ID 是ScrollPic对象数量 ScrollPic.childs是ScrollPic*/ this.ID = ScrollPic.childs.length; ScrollPic.childs.push(this); this.initialize = function () { console.log(ScrollPic.childs.length); /*如果没给出滚动父级元素id 就报错*/ if (!this.scrollContId) { throw new Error("?scrollContId."); return }; /*获取滚动父元素 如果获取不到元素内容 报错*/ this.scrollContDiv = sina.$(this.scrollContId); if (!this.scrollContDiv) { throw new Error("scrollContId??.(scrollContId = \"" + this.scrollContId + "\")"); return }; /*滚动元素的子元素 宽度 超过隐藏*/ this.scrollContDiv.style.width = this.frameWidth + "px"; this.scrollContDiv.style.overflow = "hidden"; /*获取到的滚动html代码 复制到两个新建的div中*/ this.listDiv01.innerHTML = this.listDiv02.innerHTML = this.scrollContDiv.innerHTML; /*清空滚动元素下的子元素*/ this.scrollContDiv.innerHTML = ""; /*父级元素里面 最后面添加节点 strip新的div元素 */ this.scrollContDiv.appendChild(this.stripDiv); /*在strip新div元素最后面一次添加this.listDiv01 和this.listDiv02 的内容*/ this.stripDiv.appendChild(this.listDiv01); this.stripDiv.appendChild(this.listDiv02); /*strip元素样式 超出隐藏 层级1 宽度32766px listDiv01 和02 都浮动向左 */ this.stripDiv.style.overflow = "hidden"; this.stripDiv.style.zoom = "1"; this.stripDiv.style.width = "32766px"; this.listDiv01.style.cssFloat = "left"; this.listDiv02.style.cssFloat = "left"; /* 在父级元素滚动 添加鼠标在元素上的事件 和鼠标离开的事件 执行匿名函数 ScrollPic.childs[" + this.ID + "].stop() */ sina.addEvent(this.scrollContDiv, "mouseover", Function("ScrollPic.childs[" + this.ID + "].stop()")); sina.addEvent(this.scrollContDiv, "mouseout", Function("ScrollPic.childs[" + this.ID + "].play()")); if (this.arrLeftId) { /*获取左箭头对象*/ this.arrLeftObj = sina.$(this.arrLeftId); if (this.arrLeftObj) { /*mousedown 在元素上面 鼠标按下触发*/ sina.addEvent(this.arrLeftObj, "mousedown", Function("ScrollPic.childs[" + this.ID + "].rightMouseDown()")); sina.addEvent(this.arrLeftObj, "mouseup", Function("ScrollPic.childs[" + this.ID + "].rightEnd()")); sina.addEvent(this.arrLeftObj, "mouseout", Function("ScrollPic.childs[" + this.ID + "].rightEnd()")) } }; if (this.arrRightId) { this.arrRightObj = sina.$(this.arrRightId); if (this.arrRightObj) { sina.addEvent(this.arrRightObj, "mousedown", Function("ScrollPic.childs[" + this.ID + "].leftMouseDown()")); sina.addEvent(this.arrRightObj, "mouseup", Function("ScrollPic.childs[" + this.ID + "].leftEnd()")); sina.addEvent(this.arrRightObj, "mouseout", Function("ScrollPic.childs[" + this.ID + "].leftEnd()")) } } ; if (this.dotListId) { this.dotListObj = sina.$(this.dotListId); if (this.dotListObj) { var pages = Math.round(this.listDiv01.offsetWidth / this.frameWidth + 0.4), i, tempObj; for (i = 0; i < pages; i++) { tempObj = document.createElement("span"); this.dotListObj.appendChild(tempObj); this.dotObjArr.push(tempObj); if (i == this.pageIndex) { tempObj.className = this.dotClassName } else { tempObj.className = this.dotOnClassName } ; tempObj.title = "" + (i + 1) + "?"; sina.addEvent(tempObj, "click", Function("ScrollPic.childs[" + this.ID + "].pageTo(" + i + ")")) } } } ; if (this.autoPlay) { this.play() } }; this.leftMouseDown = function () { if (_state != "ready") { return }; _state = "floating"; _scrollTimeObj = setInterval("ScrollPic.childs[" + this.ID + "].moveLeft()", this.speed) }; this.rightMouseDown = function () { if (_state != "ready") { return }; _state = "floating"; _scrollTimeObj = setInterval("ScrollPic.childs[" + this.ID + "].moveRight()", this.speed) }; this.moveLeft = function () { if (this.scrollContDiv.scrollLeft + this.space >= this.listDiv01.scrollWidth) { this.scrollContDiv.scrollLeft = this.scrollContDiv.scrollLeft + this.space - this.listDiv01.scrollWidth } else { this.scrollContDiv.scrollLeft += this.space } ; this.accountPageIndex() }; this.moveRight = function () { if (this.scrollContDiv.scrollLeft - this.space <= 0) { this.scrollContDiv.scrollLeft = this.listDiv01.scrollWidth + this.scrollContDiv.scrollLeft - this.space } else { this.scrollContDiv.scrollLeft -= this.space } ; this.accountPageIndex() }; this.leftEnd = function () { if (_state != "floating") { return } ; _state = "stoping"; clearInterval(_scrollTimeObj); var fill = this.pageWidth - this.scrollContDiv.scrollLeft % this.pageWidth; this.move(fill) }; this.rightEnd = function () { if (_state != "floating") { return } ; _state = "stoping"; clearInterval(_scrollTimeObj); var fill = -this.scrollContDiv.scrollLeft % this.pageWidth; this.move(fill) }; this.move = function (num, quick) { var thisMove = num / 5; if (!quick) { if (thisMove > this.space) { thisMove = this.space } ; if (thisMove < -this.space) { thisMove = -this.space } } ; if (Math.abs(thisMove) < 1 && thisMove != 0) { thisMove = thisMove >= 0 ? 1 : -1 } else { thisMove = Math.round(thisMove) } ; var temp = this.scrollContDiv.scrollLeft + thisMove; if (thisMove > 0) { if (this.scrollContDiv.scrollLeft + thisMove >= this.listDiv01.scrollWidth) { this.scrollContDiv.scrollLeft = this.scrollContDiv.scrollLeft + thisMove - this.listDiv01.scrollWidth } else { this.scrollContDiv.scrollLeft += thisMove } } else { if (this.scrollContDiv.scrollLeft - thisMove <= 0) { this.scrollContDiv.scrollLeft = this.listDiv01.scrollWidth + this.scrollContDiv.scrollLeft - thisMove } else { this.scrollContDiv.scrollLeft += thisMove } } ; num -= thisMove; if (Math.abs(num) == 0) { _state = "ready"; if (this.autoPlay) { this.play() } ; this.accountPageIndex(); return } else { this.accountPageIndex(); setTimeout("ScrollPic.childs[" + this.ID + "].move(" + num + "," + quick + ")", this.speed) } }; this.next = function () { if (_state != "ready") { return } ; _state = "stoping"; this.move(this.pageWidth, true) }; this.play = function () { if (!this.autoPlay) { return } ; clearInterval(_autoTimeObj); _autoTimeObj = setInterval("ScrollPic.childs[" + this.ID + "].next()", this.autoPlayTime * 1000) }; this.stop = function () { clearInterval(_autoTimeObj) }; this.pageTo = function (num) { if (_state != "ready") { return } ; _state = "stoping"; var fill = num * this.frameWidth - this.scrollContDiv.scrollLeft; this.move(fill, true) }; this.accountPageIndex = function () { this.pageIndex = Math.round(this.scrollContDiv.scrollLeft / this.frameWidth); if (this.pageIndex > Math.round(this.listDiv01.offsetWidth / this.frameWidth + 0.4) - 1) { this.pageIndex = 0 } ; var i; for (i = 0; i < this.dotObjArr.length; i++) { if (i == this.pageIndex) { this.dotObjArr[i].className = this.dotClassName } else { this.dotObjArr[i].className = this.dotOnClassName } } } };
未完继续~
下面这个是选中商品 右边的商品数量和 总价 在不断变化
示例图

代码贴上 还没有封装个好方法 以后省得老改 - -
原理 :最直接粗暴的低级方法啊~
选中商品是点击input的onclick事件,包括选中和取消都触发onclick事件,然后判断价格是加还是减,是查看点击input的checked属性为true 来判断依据~
这里的问题就是 单击的元素 我以为是用$(this).checked 来判断 结果是用this.checked来判断 $(this)是返回的jquery对象 所以没有属性checked么~。。。
<SCRIPT language=javascript type=text/javascript>
/* 参考 http://www.cnblogs.com/-run/archive/2011/11/16/2251250.html checkbox 选中*/
var select_num = 0,sale_price1=$('.self-price').html();
$("#scrollbox input:checkbox").click(function(){
/*选中 几个 商品*/
var num = $("#scrollbox input:checkbox:checked").length;
$(".buy-select").find("i").html(num);
console.log(sale_price1);
console.log( $(this) )
console.log( this.checked )
console.log( $(this).attr("checked") )
/*选中商品价格 叠加*/
if(this.checked == true) {
sale_price1 = parseInt($(this).parent().parent().find(".num").html()) + parseInt(sale_price1);
}
else{
sale_price1 = parseInt(sale_price1) - parseInt($(this).parent().parent().find(".num").html()) ;
}
/*实时商品价格写入~*/
$(".no5-price").find("em").html(sale_price1);
})
</SCRIPT>
HTML结构
<!--推荐其他--> <div class="other-recommend"> <a href="javascript:void(0)" rel="prev" class="prev left" id="arrLeft"></a> <div style="width:730px; height: 242px; overflow: hidden; float: left;" id="scrollbox"> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">350</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">351</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">352</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">353</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">354</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">355</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">356</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">357</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">358</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">359</i></li> </ul> <ul class="recommend-goods"> <li class="recommend-goods-image"><img src="images/test-product-image.jpg" width="180" height="180"></li> <li class="recommend-goods-title">迪奥魅惑丝柔粉底液200#</li> <li class="recommend-goods-price"><span><input type="checkbox" name="price" class="checkbox"></span>¥ <i class="num">370</i></li> </ul> </div> <a href="javascript:void(0)" rel="next" class="next left" id="arrRight"></a> </div>

浙公网安备 33010602011771号