精华内容
参与话题
问答
  • Qt自绘实现苹果按钮滑动效果

    万次阅读 多人点赞 2020-10-24 16:19:44
    用到的类:QTimer,QPaintEvent,QPainter,QRectF 首先,重写绘制事件,需要在头文件加入QPaintEvent头文件,然后加入如下代码: ...void MainWindow::mousePressEvent(QMouseEvent *event){ Q_UNUSED(event) ...

    在这里插入图片描述


    用到的类:QTimer,QPaintEvent,QPainter,QRectF

    在这里插入图片描述

    首先,重写绘制事件,需要在头文件加入QPaintEvent头文件,并定义几个变量。

        bool ison=false;
        float currentValue;
        float widthSize,heightSize;
    

    然后加入如下代码:

    思路就是鼠标点击,触发paintEvent函数

    void MainWindow::mousePressEvent(QMouseEvent *event){
        Q_UNUSED(event)
        ison=!ison; //在头文件种定义:bool ison=false;
        //当鼠标点击,ison为true;
        timer->start(1);//定时器开始(ms级)
        this->update();//触发paintEvent函数
    }
    

    paintEvent函数的重写

    void MainWindow::paintEvent(QPaintEvent *event){
        Q_UNUSED(event)
        QPainter painter(this);
        painter.setRenderHint(QPainter::SmoothPixmapTransform);
        //QPainter::SmoothPixmapTransform  使用平滑的pixmap变换算法(双线性插值算法),而不是近邻插值算。
        painter.setRenderHint(QPainter::Antialiasing); //使绘制时边缘平滑,qt反走样默认关闭
        painter.setPen(Qt::NoPen);//画笔样式,这里无
        if(ison){
            painter.save();//保存当前画笔的状态,与下面的restore();成对出现
            painter.setBrush(Qt::green);
            QRectF greenRect=QRectF(0,0,widthSize,heightSize);
            painter.drawRoundedRect(greenRect,0.5*heightSize,0.5*heightSize);
            painter.restore();
            painter.save();
            painter.setBrush(Qt::white);
            painter.drawEllipse(currentValue,0.05*heightSize,0.9*heightSize,0.9*heightSize);
            painter.restore();//恢复画笔
            //save() 用于保存 QPainter 的状态,restore() 用于恢复 QPainter 的状态,save() 和 restore() 一般都是成对使用的,
            //如果只调用了 save() 而不调用 restore(),那么保存就没有意义了,保存是为了能恢复被保存的状态而使用的。
        }else{
        	//边框
            painter.save();
            QColor grayColor(199,199,199);//灰色
            painter.setBrush(grayColor);//画笔颜色
            QRectF roundRect=QRectF(0,0,widthSize,heightSize);
            painter.drawRoundedRect(roundRect,0.5*heightSize,0.5*heightSize);
            //绘制椭圆边框
            painter.restore();
            //背景
            painter.save();
            painter.setBrush(Qt::red);
            QRectF redRect=QRectF(heightSize*0.05,heightSize*0.05,widthSize-heightSize*0.1,heightSize*0.9);
            painter.drawRoundedRect(redRect,0.45*heightSize,0.45*heightSize);
            //第1、2个参数制定矩形的左上角起点,第3个参数制定矩形的长度,第4个参数指定矩形的宽度
            //最后两个参数决定角的圆度。它可以为0到99之间的任意值(99代表最圆)。
            //绘制圆形矩形
            painter.restore();
            //按钮
            painter.save();
            painter.setBrush(Qt::white);
            painter.drawEllipse(currentValue,0.05*heightSize,0.9*heightSize,0.9*heightSize);
            //第1,2个参数表示圆/椭圆距屏幕左上角的像素数。第3,4个参数表示圆/椭圆的宽度和高度,两者相同时为圆。
            //绘制圆按钮
            painter.restore();
        }
    }
    

    鼠标点击进行绘制,按钮从左边滑到右边应该有一个运动状态。这就是定时器。

    在窗体构造函数中进行信号绑定:

        timer=new QTimer(this);
        timer->setInterval(50);
        connect(timer,SIGNAL(timeout()),this,SLOT(begainAnimation()));
        //下面是绘制参数相关
        if(ison){
            currentValue=widthSize-0.95*heightSize;
        }else{
            currentValue=0.05*heightSize;
        }
    

    然后编写begainAnimation函数:

    void MainWindow::begainAnimation(){
        int i=0.05*heightSize;
        int n=widthSize-0.95*heightSize;
        if(ison){
            currentValue+=1;
            if(currentValue>n-i){
                timer->stop();
            }
        }else{
            currentValue-=1;
            if(currentValue<i){
                timer->stop();
            }
        }
        update();
        //每1ms调用一次updata。
    }
    

    绘制矩形:paint->drawRect(20,20,160,160);
    第1、2个参数制定矩形的左上角起点,第3个参数制定矩形的长度,第4个参数指定矩形的宽度

    绘制圆和椭圆:paint->drawEllipse(20,20,210,160);
    第1,2个参数表示圆/椭圆距屏幕左上角的像素数。第3,4个参数表示圆/椭圆的宽度和高度,两者相同时为圆。

    绘制圆角矩形:paint->drawRoundRect(20,20,210,160,50,50);
    前面四个参数和绘制矩形的参数一致,最后两个参数决定角的圆度。它可以为0到99之间的任意值(99代表最圆)。


    展开全文
  • 效果图: 源码 var start_clientY; //记录当前滑动开始的值 var end_clientY; //记录当前滑动结束的值 var animation = wx.createAnimation({ duration: '400' }); //初始化动画 var his...

    微信小程序开发交流qq群   173683895

       承接微信小程序开发。扫码加微信。

    效果图:

     

    源码

    var start_clientY; //记录当前滑动开始的值
    var end_clientY; //记录当前滑动结束的值
    var animation = wx.createAnimation({
      duration: '400'
    }); //初始化动画
    
    var history_distance = 0; //历史距离
    Page({
      // 滑动开始
      touchstart: function(e) {
        start_clientY = e.changedTouches[0].clientY
        // console.log('touchstart', start_clientY)
      },
      // 滑动结束
      touchend: function(e) {
        console.log('e', e)
        end_clientY = e.changedTouches[0].clientY;
        var item = Number(e.target.id);
        var end = end_clientY - start_clientY
        console.log('滑动距离', end, '当前下标', item)
    
        // 不是第一张j   Math.abs(end)=> 求绝对值
        if (Math.abs(end) < 20) {
          wx.showToast({
            title: '点击了' + this.data.list[item].img,
            icon: 'none'
          })
          return
        };
    
        // 如果是下拉第一张图片,整体动画
        if (item == 0) {
          for (var i = 0; i < this.data.list.length; i++) {
            animation.translateY(80 * i!=0?80*i:80).step();
            this.setData({
              ['animation[' + i + ']']: animation.export(),
            })
          }
          setTimeout(() => {
            for (var i = 0; i < this.data.list.length; i++) {
              animation.translateY(0).step();
              this.setData({
                ['animation[' + i + ']']: animation.export(),
              })
            }
          }, 450)
          return
        }
    
        //开始滑动当前的 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
        // 需要计算缓存,默认没有,所以在onLoad先初始化,让默认有
        history_distance = this.data.animation[item].actions[0].animates[0].args[0];
        let item_args = end + history_distance > 0 ? end + history_distance : 0;
        console.log('当前滑动的图片滑动距离', item_args)
        animation.translateY(item_args).step();
    
        this.setData({
          ['animation[' + item + ']']: animation.export(),
        })
        //开始滑动当前的 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    
        // 如果历史滑动大于0,就是往下拉
        if (end != 0) {
          for (var i = 1; i < this.data.list.length; i++) {
    
            // 让内层的都跟着滑动
            var _item_1 = item - i;
            if (_item_1 > 0) {
              animation.translateY(item_args / 2 / i).step();
              this.setData({
                ['animation[' + _item_1 + ']']: animation.export(),
              })
            }
    
            // 如果不是最后一张图并且小于图片数组的长度,让外层的都跟着滑动
            var _item_2 = item + i;
            if (item != this.data.list.length - 1 && _item_2 < this.data.list.length) {
              animation.translateY(item_args * 2 * i).step();
              this.setData({
                ['animation[' + _item_2 + ']']: animation.export(),
              })
            }
    
          }
        } else {
          // 如果历史滑动等于0,重新初始化
          this.inti();
        }
    
    
      },
      // ================================================================================================================================
      onShow() {
        // 初始化
        this.inti();
      },
      onLoad(e) {},
      // 初始化
      inti() {
        for (var i = 0; i < this.data.list.length; i++) {
          this.setData({
            ['animation[' + i + '].actions[0].animates[0].args[0]']: 0,
          })
        }
      },
      data: {
        windowWidth: wx.getSystemInfoSync().windowWidth,
        list: ['https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=935292084,2640874667&fm=27&gp=0.jpg', 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3205470526,1518785822&fm=27&gp=0.jpg', 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=873265023,1618187578&fm=27&gp=0.jpg','https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3967239004,1951414302&fm=27&gp=0.jpg'],
        animationArr: [],
        animation: [],
        scrollTop: 100
      },
    })

    a

    <view class='bg' >
      <block wx:for='{{list}}' wx:key=''>
          <image bindtouchend='touchend' bindtap='click' bindtouchstart='touchstart' id='{{index}}' animation='{{animation[index]}}' class='borner' style='top: {{index*80}}rpx;' src='{{item}}'></image>
    
      </block>
    </view>

    css

    page{
      height: 100%;
    }
    .bg{
      height: 100%;
      width: 100%;
      position: fixed;
    }
    .top_title{
      position: relative;
    }
    image{
      margin-top: 50rpx;
      width: 90%;
      height: 90%;
      margin-left: 5%;
      position: absolute;
      border-radius: 10rpx;
    }

     

    展开全文
  • JS 实现 div 滑动效果,模拟平面滑动,模拟平面滑动效果 本来想找个现成的代码,找了很久 要不是 轮播页面切换效果,要不就是翻书翻页的效果。。。 <!DOCTYPE ...

    JS 实现 div 滑动效果,模拟平面滑动,模拟平面滑动效果

    本来想找个现成的代码,找了很久 要不是 轮播页面切换效果,要不就是翻书翻页的效果。。。

     
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
       <script src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
    
    
        <style>
            .list{
                margin:100px;
                width:500px;
                height:250px;
                position:relative;
                overflow:hidden;
                border:1px solid #ccc;
            }
            .list div{
                 border:1px solid #ccc;
                 width:200px;
                 height:200px;
                background:#fff;
                position: absolute;
            }
      
             
        </style>
    </head>
    <body>
        <div class="list">
            <div class="act" style=""><img src="./picture/pic1.png"> </img>   <a class="a" href="javascript:;" ></a>  </div>
             <div style=""><img src="./picture/pic2.png"> </img>     <a class="a" href="javascript:;" ></a> </div>
             <div style=""><img src="./picture/pic3.png"> </img>     <a class="a" href="javascript:;" ></a> </div>
             <div style=""><img src="./picture/pic4.png"> </img>     <a class="a" href="javascript:;" ></a> </div>
    
    		 </div>
    	
    	
    	     
         
        <script>
         $(function () {
             slide();
        });
        function slide() {
            var timer = null;
    		var ds = $('.list div'), L = ds.length, ii = 1,list = 4,i = 0;
            function sliding() {
    	
                    var el = $(this).parent('div');
     
    
    				var n = $(ds[i]);
     
    				
    			n.css({ left: 300, zIndex: ii++ }).animate({ left: 0 }, 2000)
    				i++;
    				if(i==4)
    				{i=0}
    
            }
    	 		timer = setInterval(sliding, 6000);
        }
    
    	</script>
     
    </body>	
    </html>

     

     

    展开全文
  • XD拖拽滑动效果

    千次阅读 2019-12-19 13:44:58
    1、一张画布两个矩形。 2、使用photosplash2加入图片。 3、复制画布,如图设置方位。 4、设置交互属性。 结果。

    1、一张画布两个矩形。

    2、使用photosplash2加入图片。

    3、复制画布,如图设置方位。

    4、设置交互属性。

    结果。

    展开全文
  • vue左右滑动效果

    2019-11-21 16:01:30
    <template> <div id="app"> <nav> <p v-for="(item,index) in arr" @click="toggle(index)" :class="{active:index==active}" ...
  • CollapsingToolbarLayout 滑动效果

    千次阅读 2018-11-15 19:42:44
    fragment_store.xml &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"... ...
  • Flutter实现层叠滑动效果

    千次阅读 2020-04-26 18:17:18
    滑动效果 使用PageView滑动来控制当前显示的位置 Stack( children: <Widget>[ // 两者堆叠在一起。通过PageView滑动的Controller来控制当前显示的page CardScrollWidget(currentPage), Positioned.fill...
  • jQuery 效果 - 滑动滑动打开和收起子菜单效果 源代码: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;script src="...
  • 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38140505自从Gallery被谷歌废弃以后,Google推荐使用...的确HorizontalScrollView可以实现Gallery的效果,但是HorizontalScrollView存在一个
  • Android 仿滴滴首页嵌套滑动效果

    千次阅读 2020-08-04 11:30:30
    CompNsViewGroup 内部包含顶部地图 MapView 和滑动布局 LinearLayout,而 LinearLayout 布局的内部即我们常用的滑动控件 RecyclerView,在这里为何还要加层 LinearLayout 呢?这样做的好处是,我们可以更好的适配...
  • 使用slidingmenu,主内容区是可以随着侧滑菜单一起滑动的,像qq滑动效果, 使用drawerlayout,侧滑菜单是直接覆盖在主内容区上的,像邮箱大师滑动效果, drawerlayout有没有这种滑动效果,该怎么设置,多谢![qq滑动...
  • js的滑动效果

    千次阅读 2018-10-15 03:10:45
    当页面不够用是或者我们想要在一定空间内进行大量布局,除了层结构外,我还想到了js中的滑动效果,首先 jquery滑动效果有向上滑动和向下滑动1、jQuery slideUp()2、jQuery slideDown() &lt;!DOCTYPE html&...
  • Vue页面切换滑动效果

    千次阅读 2018-11-01 17:49:27
    试着用Vue做了个页面切换时滑动效果,如下示例 源码 https://github.com/Aiden1204/VueAnimateDemo 这里使用了Vue的transition组件,具体可见文档 https://cn.vuejs.org/v2/guide/transitions.html 直接看...
  • 微信小程序之卡片层叠滑动效果

    万次阅读 2019-06-03 16:49:27
    微信小程序之卡片层叠滑动效果 代码: js: // index/gun/jsSwiper2/jsSwiper2.js Page({ /** * 页面的初始数据 */ data: { startX: 0, endX: 0, iCenter: 3, datas: [{ id: 1, zIndex: 2, opa...
  • 安卓 实现滑动效果

    千次阅读 2018-06-30 12:59:50
    实现滑动效果有下面几种方式1.layout(int l, int t, int r, int b): 1).参数:分别代表左上右下四个点的坐标 2).View绘制时,会通过onLayout方法设置显示位置,我们也可用通过layout函数调用onLayout方法2....
  • 纯CSS导航栏下划线滑动效果 问题描述 面向 C 端的产品嘛,总有一些动效想要提高用户体验,以下是用纯 css 实现导航栏选中下划线滑动效果 解决方案 以下是实现效果: 主要代码如下: <template> <section ...
  • jQuery 效果--滑动效果

    2018-02-06 17:07:33
    滑动效果 方法列表 方法 描述 slideUp() 用于隐藏所有匹配的元素,并带有向上滑动的过渡动画效果。 slideDown() 用于显示所有匹配的元素,并带有向下滑动的过渡动画效果。 slideToggle() 用于...
  • cube-ui 移动端滑动效果

    千次阅读 2019-06-27 17:29:00
    移动端,常见的tab切换效果比较多,今天,我就用cube-ui ,这个移动端非常火的UI框架来实现。我们使用vue来做tab切换效果的时候,往往倾向于用路由实现,其实也可以用组件来实现,而且在滑动效果的细节上更加完善。
  • 移除严格模式 然后添加babelrc一项 如果想移除警告
  • Android ViewPager禁止滑动、滑动效果

    千次阅读 2017-11-01 00:26:51
    Android ViewPager禁止滑动、滑动效果

空空如也

1 2 3 4 5 ... 20
收藏数 24,990
精华内容 9,996
关键字:

滑动效果