H5拖放事件巩固实例:

1、简单布局一下,商品信息放入一个ul中;div为购物车,后续会创建元素

<ul>
<li draggable="true">
<img src="img1.jpg" />
<p>javascript语言精粹</p>
<p>¥</p>
</li>
<li draggable="true">
<img src="img2.jpg" />
<p>javascript权威指南</p>
<p>¥</p>
</li>
<li draggable="true">
<img src="img3.jpg" />
<p>精通javascript</p>
<p>¥</p>
</li>
<li draggable="true">
<img src="img4.jpg" />
<p>DOM编程艺术</p>
<p>¥</p>
</li>
</ul>
<div id="div1"></div>

2、css样式:

<style type="text/css">
*{
margin:;
padding:;
}
li{
list-style: none;
width: 200px;
margin: 10px;
border: 1px solid #;
float: left;
}
li img{
width: 200px;
}
li p{
border-bottom: 1px dashed #;
height: 20px;
}
div{
margin: 10px;
clear: both;
width: 600px;
height: 300px;
border: 1px solid #;
}
div p{
height: 20px;
border-bottom: 1px dashed #;
}
.box1{
width: 200px;
float: left;
}
.box2{
width: 200px;
float: left;
}
.box3{
width: 200px;
float: right;
}
#allmoney{
float: right;
border-bottom: none;
}
</style>

3、js部分首先是ondragstart事件,用for循环遍历li标签,然后用拖放事件中的dataTransfer下的setData属性将商品的名称和价格存起来,以便后续加入购物车时获取:

for(var i=; i<aLi.length; i++){

    aLi[i].ondragstart = function(ev){

        var oP = this.getElementsByTagName('p');

        ev.dataTransfer.setData('title',oP[].innerHTML);
ev.dataTransfer.setData('money',oP[].innerHTML); ev.dataTransfer.setDragImage(this,,); }
}

4、触发ondrop事件需在ondragover事件里阻止默认事件;通过getData获取到商品的名称和价格;此处加if判断是为了添加重复的商品到购物车的时候只在原来的商品的基础上增加数量即可,提前创建一个json:var obj = {},利用商品的标题是唯一的这一点来判断,当创建一个p标签后,obj[otitle]=1,再次添加商品时条件!obj[otitle]为false,执行else部分;else部分是增加商品的数量,获取购物车里面的所有的class为box2的span标签,遍历每个元素,判断当其innerHTML值和新拖进来的商品名称otitle相等时,该商品的数量+1,注意:span1的数量需要parseInt取整才能相加。

oDiv.ondragover = function( ev ){
ev.preventDefault();
} oDiv.ondrop = function( ev ){
ev.preventDefault(); var otitle = ev.dataTransfer.getData('title');
var omoney = ev.dataTransfer.getData('money'); if( !obj[otitle] ){
var oP = document.createElement('p');
var oSpan = document.createElement('span');
oSpan.className = 'box1';
oSpan.innerHTML = ;
oP.appendChild(oSpan); var oSpan = document.createElement('span');
oSpan.className = 'box2';
oSpan.innerHTML = otitle;
oP.appendChild(oSpan); var oSpan = document.createElement('span');
oSpan.className = 'box3';
oSpan.innerHTML = omoney;
oP.appendChild(oSpan);
oDiv.appendChild(oP); obj[otitle] = ;
}else{    var Span1 =document.getElementsByClassName('box1');
   var Span2 = document.getElementsByClassName('box2');   for(var i=; i<Span2.length; i++){
   if( Span2[i].innerHTML == otitle ){
   Span1[i].innerHTML = parseInt(Span1[i].innerHTML) + ;
}
}
}

5、最后是商品的总价的计算

if(!allmoney){     //提前定义全局变量 var allmoney = null;
allmoney = document.createElement('p'); //注意这里前面没有加var 不是变量
allmoney.id = 'allmoney';
} iNum += parseInt(omoney); //提前定义全局变量 var iNum = 0; allmoney.innerHTML = iNum + '¥'; oDiv.appendChild(allmoney);

HTML5拖放加入购物车的更多相关文章

  1. html5 拖放到购物车

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. HTML5拖放(drag and drop)与plupload的懒人上传

    HTML5拖放能够将本地的文件拖放到页面上,plupload又是很好的文件上传插件,而今天就将两者结合,做了个文件拖拽上传的功能. 简述HTML5拖放 拖放是HTML5标准的一部分,任何元素都能够拖放 ...

  3. HTML5 拖放

    拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 浏览器支持 I ...

  4. HTML5拖放API

    拖放事件事件提供了拖放可以控制几乎所有方面的拖放操作.棘手的部分是确定每个事件触发:在拖项目火:别人火下降的目标.拖动项时,以下事件(按照这个顺序): 拖曳开始拖dragend此刻你把鼠标按钮和开始移 ...

  5. HTML5拖放

    HTML5拖放 <!doctype html> <html> <head> <meta charset="UTF-8"> <t ...

  6. HTML5 拖放及排序的简单实现

    HTML5 拖放及排序的简单实现 之前写过个类似的例子,看这里. 但想再深入一步,希望能通过拖放,来交换二个元素的位置.最好有应用到手机平台上. 作了个简单的例子,在手机上测试的时候不成功..查了好多 ...

  7. HTML5 拖放(Drag 和 Drop)功能开发——基础实战

    随着HTML5的普及度越来越高,现在写代码也遇到一些了,经过同事的点播开展了一次Dojo活动用以技术交流,我也乘此机会将HTML5的拖放功能整理了一下. 简介 拖拽(Drag/Drop)是个非常普遍的 ...

  8. localStorage存值取值以及存取JSON,以及基于html5 localStorage的购物车

    localStorage.setItem("key","value");//存储变量名为key,值为value的变量 localStorage.key = &q ...

  9. 【Demo】HTML5拖放--简单demo

    用HTML5拖放功能编写一个简单的拖放Demo 单次拖放demo 效果: ------拖放前------- ------拖放后-------  实现代码: <!DOCTYPE html> ...

随机推荐

  1. 编译Uboot时提示error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

    在Ubuntu14.04 64位系统中已经安装了libc6:i386的库,编译Uboot时提示error while loading shared libraries: libz.so.1: cann ...

  2. 更改Windows Live Writer默认日志与草稿保存路径

    目的:把保存Windows Live Writer的日志与草稿文件夹My Weblog Posts移动到E:\Blog\路径下 用mklink命令,创建E:\Blog\路径下的My Weblog Po ...

  3. leetcode day5

    [242]Valid Anagram: Given two strings s and t, write a function to determine if t is an anagram of s ...

  4. shell 创建带参数的命令方法

    主要用到case in,和shift命令. shift 命令是从参数数组中,删除当前第一个参数. while [ "$1" != "" ] do case $1 ...

  5. 创建 Web 前端开发环境(node和npm以及git)

    Web 前端开发涉及多种工具,这里将常用工具的安装和配置进行说明,提供了详细的说明,为后继的开发创建一个坚实的基础. 本文介绍的工具有:NodeJS, NPM, Bower, Git 和 Grunt. ...

  6. CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动

    CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动1.关于mysql?MySQL是一个关系型数据库管理 ...

  7. LogBack log出力路径

    转自:http://blog.csdn.net/z69183787/article/details/30284391 请看下面这段配置,这是无法工作的: <?xml version=" ...

  8. Unity跨平台原理

    An ahead-of-time (AOT) compiler is a compiler that implements ahead-of-time compilation. This refers ...

  9. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (三)

    本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二) 前几天有点事情所以没有继续更新,今天我们接着说.上个帖子中我们看到已经把Excel数据生成了.bin的文件,不过其 ...

  10. catalan卡特兰数

    卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名.历史上,清代数学家明安图(1692年-1763年)在其<割圜密率捷法>最 ...