宝典:第十三式 拖拽

多么爱人的效果呀。不多说啦, 效果很好,实现起来也简单

拖动效果

介绍下辅助方法吧!

通过ScriptaculousHelper模块的帮助,允许我们在页面中通过拖动来实现Ajax交互。Rails用以实现拖动效果主要有如下两个方法。
● draggable_element:该方法将某个HTML元素定义成一个可以拖动的元素。
● drop_receiving_element:该方法将某个HTML元素定义成一个拖动目的地元素。将一个可拖动元素(使用draggable_element定义)拖动到拖动目的地元素(使用drop_receiving_element定义)时,Rails将会向服务器发送Ajax请求。

记住

<%= javascript_include_tag "prototype","dragdrop"%>

[size=medium][color=red]dragdrop.JS[/color][/size]必须的


<h3>拖动示例</h3> 
<!-- 使用image_tag来生成两张图片 -->
<%= image_tag("vista.jpg" , :id =>"image1")%>
<%= image_tag("vista.jpg" , :id =>"image2")%>
<!-- 使用draggable_element将第一个图片定义成可拖动图片
指定该图片被拖动后会回到原来的地方 -->
<%= draggable_element("image1", :revert => true)%>
<!-- 使用draggable_element将第一个图片定义成可拖动图片
指定该图片被拖动后不会回到原来的地方 -->
<%= draggable_element("image2", :revert => false)%>


使用drop_receiving_element方法的语法格式如下:
drop_receiving_element (element_id, options = {})
该方法将element_id所指定的HTML元素定义成一个可拖动的目的地。因为该方法会发送Ajax选项,因此可以接受如下几个选项。

● :url:该选项指定一个符合url_for格式的URL地址。

● :update:该选项指定使用服务器响应来更新哪个HTML元素。

除此之外,当然也可指定:complete、:loaded等Ajax交互阶段的特定选项。
下面将使用draggable_element和drop_receiving_element实现一个购物车效果。


进入购物车页面时,先经过如下Action处理,该Action创建了一个字符串数组作为实例变量。
# 定义进入购物车的Action
def cart 
# 如果session[:cart]为nil,则将其赋为{},否则不改变
session[:cart] ||= {}
# 创建一个字符串数组
@books = %w{spring ajax struts2}
end
在上面的Action中定义了用户的:cart Session,该Session用以跟踪用户的购物状态。还手动构建了一个字符串数组,这个字符串数组将作为系统的商品。
提示 实际应用中我们可以通过Model从数据库中取出所有商品,但本应用为了简化应用的复杂度,只突出Ajax应用,故没有使用Model进行持久化访问。
视图页面将使用draggable_element方法和drop_receiving_element方法来构建通过拖动来购买商品的应用。cart.rhtml页面的代码如下:
<h3>拖动效果</h3> 
<h3>下面是所有商品</h3>
<!-- 迭代输出@books实例变量 -->
<[email=%@books.each]%@books.each[/email] do |book|%>
<%= image_tag book + ".jpg",
:id =>book %>
<!-- 将@books数组中每个元素都定义成一个可拖动的元素 -->
<%= draggable_element(book, :revert => true)%>
<%end%>
<p>
<b>将上面商品拖到下面方框中就是购买了该商品</b><br>
<div id="my_cart" style="width:500px;height:160px;border:1px solid black;">
</div>
<!-- 将my_cart定义成一个拖动的目的元素,
向add Action发送请求,使用服务器响应更新my_cart元素-->
<%= drop_receiving_element("my_cart",
:url => {:action => "add" },
:update=>"my_cart") %>
上面页面会迭代输出@books实例变量中每个元素,并将每个元素都转换成一个可拖动的元素;除此之外,还使用drop_receiving_element方法定义了一个拖动目的地元素,每当元素被拖动到该元素时,Rails将向add Action发送请求,并发送被拖动元素的id作为请求参数。
下面是add Action的代码:
# 定义添加物品的Action
def add 
# 取得请求参数
product_id = params[:id];
# 如果请求参数不为空
if product_id != nil then
# 如果购物车中的物品已经存在,则数量加1,否则设置该物品数量为1
session[:cart][product_id] =
session[:cart].include?(product_id) ?
session[:cart][product_id] + 1 : 1
end
# 使用_cart.rhtml页面来生成响应
render :partial => 'cart'
end
从上面的Action代码来看,Rails拖动时会将被拖动元素的id作为请求参数发送到服务器,上面的Action就可以获取用户希望购买的物品,从而可以修改用户的session状态。该Action最后提交到_cart.rhtml页面来显示处理结果。该页面的代码如下:
<!-- 迭代session里的cart属性,它是一个Hash对象 -->
<% session[:cart].each do |product,quantity| %> 
<div>
<!-- 按数量输出每本图书 -->
<% quantity.times do |i| %>
<%= image_tag product + ".jpg",
:id => "item_#{product}_#{i}",
:size => "40x60",
:style => "position:relative;" %>
<% end %>
<b> <%= product %>:<%= quantity %></b>
</div>
<;% end %>

<!-- 如果还没有购买图书 -->
<%= "您暂时还未购买任何图书!" if session[:cart].empty? %>
上面的_cart.rhtml页面生成的响应将会用来更新原来页面的my_cart元素,从而可以通过拖动来购买商品

上面应用的界面更加友好:浏览者可以直接通过拖动鼠标来购买商品,这是很有乐趣的事情。
值得指出的,如果希望加载该页面时即显示用户的购物车中有多少商品,应该在用户进入该页面时立即向add Action发送请求(add Action已经处理了没有请求参数的情形)。上面应用已经实现了该功能,我们在body元素load时通过remote_function来发送请求,从而实现了页面加载时立即发送请求的要求。
下载前可以先看下教程 https://pan.quark.cn/s/a426667488ae 标题“仿淘宝jquery图片左右切换带数字”揭示了这是一个关于运用jQuery技术完成的图片轮播机制,其特色在于具备淘宝在线平台普遍存在的图片切换表现,并且在整个切换环节中会展示当前图片的序列号。 此类功能一般应用于电子商务平台的产品呈现环节,使用户可以便捷地查看多张商品的照片。 说明中的“NULL”表示未提供进一步的信息,但我们可以借助标题来揣摩若干核心的技术要点。 在构建此类功能时,开发者通常会借助以下技术手段:1. **jQuery库**:jQuery是一个应用广泛的JavaScript框架,它简化了HTML文档的遍历、事件管理、动画效果以及Ajax通信。 在此项目中,jQuery将负责处理用户的点击动作(实现左右切换),并且制造流畅的过渡效果。 2. **图片轮播扩展工具**:开发者或许会采用现成的jQuery扩展,例如Slick、Bootstrap Carousel或个性化的轮播函数,以达成图片切换的功能。 这些扩展能够辅助迅速构建功能完善的轮播模块。 3. **即时数字呈现**:展示当前图片的序列号,这需要通过JavaScript或jQuery来追踪并调整。 每当图片切换时,相应的数字也会同步更新。 4. **CSS美化**:为了达成淘宝图片切换的视觉效果,可能需要设计特定的CSS样,涵盖图片的排列方、过渡效果、点状指示器等。 CSS3的动画和过渡特性(如`transition`和`animation`)在此过程中扮演关键角色。 5. **事件监测**:运用jQuery的`.on()`方法来监测用户的操作,比如点击左右控制按钮或自动按时间间隔切换。 根据用户的交互,触发相应的函数来执行...
垃圾实例分割数据集 一、基础信息 • 数据集名称:垃圾实例分割数据集 • 图片数量: 训练集:7,000张图片 验证集:426张图片 测试集:644张图片 • 训练集:7,000张图片 • 验证集:426张图片 • 测试集:644张图片 • 分类类别: 垃圾(Sampah) • 垃圾(Sampah) • 标注格:YOLO格,包含实例分割的多边形点坐标,适用于实例分割任务。 • 数据格:图片文件 二、适用场景 • 智能垃圾检测系统开发:数据集支持实例分割任务,帮助构建能够自动识别和分割图像中垃圾区域的AI模型,适用于智能清洁机器人、自动垃圾桶等应用。 • 环境监控与管理:集成到监控系统中,用于实时检测公共区域的垃圾堆积,辅助环境清洁和治理决策。 • 计算机视觉研究:支持实例分割算法的研究和优化,特别是在垃圾识别领域,促进AI在环保方面的创新。 • 教育与实践:可用于高校或培训机构的AI课程,作为实例分割技术的实践数据集,帮助学生理解计算机视觉应用。 三、数据集优势 • 精确的实例分割标注:每个垃圾实例都使用详细的多边形点进行标注,确保分割边界准确,提升模型训练效果。 • 数据多样性:包含多种垃圾物品实例,覆盖不同场景,增强模型的泛化能力和鲁棒性。 • 格兼容性强:YOLO标注格易于与主流深度学习框架集成,如YOLO系列、PyTorch等,方便研究人员和开发者使用。 • 实际应用价值:直接针对现实世界的垃圾管理需求,为自动化环保解决方案提供可靠数据支持,具有重要的社会意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值