jquery实现左右点击滑动

前端养成记:最近做的老项目,涉及到的一个简单的小功能,但是我这样的前端菜鸟还是费了一些功夫的,所以这里记录一下,以免日后忘记。

一、首先看下效果吧

在这里插入图片描述
这个是效果图,这个地方只能显示2个产品,然后可以点击左右滑动,来控制渲染。

二、HTML代码

这是一个div容器,代码是放在它里边的。
 <div class="border-gb-title" id="tjcp">推荐产品</div>
    <div class="grey-card ptb40" id="tjcp_1">
        <div class="flex jus-c pro-white-box positon" id="recommendedProducts" style="position: relative;!important;">
        </div>
    </div>

三、js(jquery)代码

<script>
//用来记录后台查询到的产品列表条数
var total;
//用来做点击左右滑动的指针
var startProd = 0;
//用来存储列表的数组(容器)
var proList = [];
//用来设置id选择器
var contentContainer = $("#recommendedProducts");
//推荐产品
    var recommendedProducts = function () {
    //后台需要的参数
        var param1 = {
            pageNo: 1,
            pageSize: 10,
            type: 5,
            cpzt: 4,
            tzly: ${prodList["投资领域ID"]},
        }
        //ajax请求数据
        $.ajax({
            url: "/prod/productList",
            type: "POST",
            data: param1,
            dateType: "JSON",
            success: function (ret) {
                if (ret['code'] > 0) {
                    //渲染界面
                    var dataList = ret['list'];
                    if (dataList.length != 0){
                        total = ret['totalCount'];
                        contentContainer.empty()
                        //渲染界面
                        prodRender(dataList);
                        //展示左右滑动
                        renderDatas();
                    }else {
                   		//当后台返回的产品列表list为空时,隐藏掉推荐产品整个div块
                        $("#tjcp").hide();
                        $("#tjcp_1").hide();
                    }
                }
            }
        })
    }
    //详情渲染
    var prodRender = function (data) {
        for (var i = 0; i < data.length; i++) {
            var res = [];
            res.push('<div class="pro-white">');
            res.push('<div class="pro-title">'+data[i]['产品名称']+'</div>');
            res.push('<div class="mt20">');
            res.push('<div class="fl ml15">');
            res.push('<div class="num fwb">'+data[i]['业绩比较基准']+'</div>');
            res.push('<div class="mt15">业绩比较基准<span class="iconfont iconjizhun"></span></div>');
            res.push('</div>');
            res.push('<div class="fr mr15">');
            res.push('<div class="mt10 fs16">'+data[i]['产品期限']+'<span class="iconfont iconqixian"></span></div>');
            res.push('<div class="pro-border">'+ data[i]["起投金额"] + "万元起投/" + data[i]["风险等级"] + '</div>');
            res.push('</div>');
            res.push('<div class="clear"></div>');
            res.push('</div>');
            res.push('</div>');
            //先将所有产品放进容器,后面备用
            proList.push(res);
        }
    }

    //限制左右轮播
    function renderDatas(){
        contentContainer.empty();
		if(proList.length > 1){//数据至少2条
			 //这里循环要展示的个数,我这里需要展示2条
            for(var i=0; i<2; i++){
                contentContainer.append(proList[(startProd+i)%total].join(""));
            }
        }else {//如果只有一条数据
            contentContainer.append(proList[(startProd)%total].join(""));
        }
        contentContainer.append('<div class="clear"></div>');
        contentContainer.append('<div class="slide-left" οnclick="left()"></div>');
        contentContainer.append('<div class="slide-right" οnclick="right()"></div>');
    }
    //左滑动
    function left() {
        startProd = (startProd-1+total)%total;
        renderDatas();
    }
    //右滑动
    function right() {
        startProd = (startProd+1+total)%total;
        renderDatas();
    }
</script>

三、后台(java)代码

/*
*
*接收前端传来的参数,直接调用数据库,返回数据即可
*/
@Controller
@RequestMapping(value = "/prod")
public class ProdController {
	 @RequestMapping(value = "/productList",method = RequestMethod.POST)
     @ResponseBody
      public DataResultSet productList(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap){
         String queryType = ParamUtils.getString(request, "type", ""); // 查询类型
         String custNo = ParamUtils.getString(request, "custNo", ""); // 客户号
         String userId = ParamUtils.getString(request, "userId", "");
         String prodName = ParamUtils.getString(request, "prodName", ""); // 产品名称
         String cpzt = ParamUtils.getString(request, "cpzt", ""); // 产品状态
         String cpbq = ParamUtils.getString(request, "cpbq", ""); // 产品标签
         String cpType = ParamUtils.getString(request, "cpType", ""); // 产品类型
         String cpqx = ParamUtils.getString(request, "cpqx", ""); // 产品期限
         String cpsyl = ParamUtils.getString(request, "cpsyl", ""); // 产品收益率
         String tzly = ParamUtils.getString(request, "tzly", ""); // 投资领域
         String kfpd = ParamUtils.getString(request, "kfpd", ""); // 开放频度
         //调用service
         DataResultSet dataList = prodService.queryProduct(queryType,custNo,userId,prodName,cpzt,cpbq,cpType,cpqx,cpsyl,tzly,kfpd);
         if (dataList.getCode()<0){
             dataList.setCode(-1);
             dataList.setMessage("查询出错,请稍后再试");
         }
         return dataList;
     }
}

//service接口
public interface ProdService {
	public DataResultSet queryProduct(String queryType,String custNo,String userId,String prodName,String cpzt,String cpbq,String cpType,String cpqx,String cpsyl,String tzly,String kfpd);
}

//service实现类
@Service
public class ProdServiceImpl implements ProdService {
	@Override
    public DataResultSet queryProduct(String queryType,String custNo,String userId,String prodName,String cpzt,String cpbq,String cpType,String cpqx,String cpsyl,String tzly,String kfpd){
        return baseDao.callOldFwcpPaging(null,"PRODUCT_LST",1,10,"",queryType,custNo,userId,prodName,cpzt,cpbq,cpType,cpqx,cpsyl,tzly,kfpd);
    }

这里说明一下,因为本项目技术比较老旧,用的是存储过程,所以这里直接调用了存储过程的名字。

项目说明:
1、项目比较老,用的jsp+springmvc+存储过程(Oracle);
2、所以基本业务逻辑前端都会做判断,后端的逻辑基本都在存储过程里边,因此后台直接调用存储过程接口,返回数据给前台就可以了。
3、上面的这个左右滑动是个万能公式,可以套用的,只需要将renderDatas()方法的for循环的“展示条数”改成自己需要的就可以。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐