js实现走马灯效果(无缝衔接)

需要注意的是,scrollLeft属性只有当他内部元素超出父级元素时才有效,否则将一直为0,
可以将scrollLeft想象成有横向的滚动条,
scrollLeft++则相当于将滚动条向右拖动,当拖动到展示内容实际宽度后(需要另一个与展示内容相同的区域,否则一轮左移完成后会出现留白),需要恢复为0

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>game1</title>
    <style type="text/css">
    .tt {
    width: 145px;
    height: 106px;
    margin-left: 16px;
    margin-right: 16px;
    margin-top: 10px;
    display: block;
    float: 
    }

    </style>
</head>
<body>

    <div id="colee_left" style="width: 1050px;height: 150px;border:1px solid #e8e8e8;margin-top: 10px;overflow: hidden;background-color:yellow;">
        <table cellpadding="0">
            <tbody>
                <tr>
                    <td id="colee_left1" valign="top">
                        <table>
                            <tbody>
                                <tr align="center">
                                    <td>
                                        <a href="#">
                                            <img class="tt" src="1.jpg"/>
                                        </a>
                                    </td>
                                    <td>
                                        <a href="#">
                                            <img class="tt" src="1.jpg"/>
                                        </a>
                                    </td>
                                    <td>
                                        <a href="#">
                                            <img class="tt" src="1.jpg"/>
                                        </a>
                                    </td>
                                    <td>
                                        <a href="#">
                                            <img class="tt" src="1.jpg"/>
                                        </a>
                                    </td>
                                    <td>
                                        <a href="#">
                                            <img class="tt" src="1.jpg"/>
                                        </a>
                                    </td>
                                    <td>
                                        <a href="#">
                                            <img class="tt" src="1.jpg"/>
                                        </a>
                                    </td>
                                    <td>
                                        <a href="#">
                                            <img class="tt" src="1.jpg"/>
                                        </a>
                                    </td>

                                </tr>
                            </tbody>
                        </table>
                    </td>
                    <td id="colee_left2" valign="top">
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
</body>
<script type="text/javascript">
    var speed = 30;
    //速度数值越大速度越慢
    var colee_left2 = document.getElementById("colee_left2");
    var colee_left1 = document.getElementById("colee_left1");
    var colee_left = document.getElementById("colee_left");
    colee_left2.innerHTML = colee_left1.innerHTML;
    function Marquee3() {
            if (colee_left2.offsetWidth - colee_left.scrollLeft <= 0){//offsetWidth 是对象的可见宽度
                    colee_left.scrollLeft -= colee_left1.offsetWidth//scrollWidth 是对象的实际内容的宽,不包边线宽度
        }
        else {
            colee_left.scrollLeft++;
        }

    }
    var MyMar3 = setInterval(Marquee3, speed);
</script>
</html>
实现Qt QlineEdit的走马灯效果,可以通过以下步骤实现: 1. 创建一个QTimer对象,用于定时器事件,设定一个间隔时间。 2. 实现QLineEdit的paintEvent()事件,获取输入框的文本,并且在paintEvent()进行绘制。 3. 在定时器事件,更新文本的位置,然后调用update()函数,触发paintEvent()事件进行重绘。 以下是一个简单的示例代码: ```python class MarqueeLineEdit(QLineEdit): def __init__(self, parent=None): super(MarqueeLineEdit, self).__init__(parent) self._text = '' self._timer = QTimer(self) self._timer.setInterval(100) # 设置间隔时间 self._timer.timeout.connect(self.updateTextPosition) self._timer.start() def paintEvent(self, event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) # 绘制文本 font = self.font() font_metrics = QFontMetrics(font) text_width = font_metrics.horizontalAdvance(self._text) # 计算文本的位置 text_pos = QPoint(self.width() - self._pos, (self.height() + font_metrics.height()) / 2) painter.setFont(font) painter.drawText(text_pos, self._text) def updateTextPosition(self): font_metrics = QFontMetrics(self.font()) text_width = font_metrics.horizontalAdvance(self.text()) # 如果文本的宽度小于文本框的宽度,不需要滚动 if text_width <= self.width(): self._text = self.text() self._pos = 0 return # 滚动文本 self._text = self.text() + ' ' if self._pos <= -text_width: self._pos = self.width() else: self._pos -= 1 self.update() ``` 在这个示例代码,我们创建了一个新的类MarqueeLineEdit,它继承自QLineEdit。在构造函数,我们创建了一个QTimer对象,并设置了一个间隔时间。我们还重写了paintEvent()事件和updateTextPosition()函数来实现文本的绘制和滚动。 在paintEvent()事件,我们获取了输入框的文本,并且根据文本的位置和大小进行了绘制。 在updateTextPosition()函数,我们首先计算文本的宽度。如果文本的宽度小于文本框的宽度,我们不需要滚动文本,直接显示原来的文本。如果文本的宽度大于文本框的宽度,我们就滚动文本,并且在每次滚动时调用update()函数触发paintEvent()事件进行重绘。 最后,我们就可以使用MarqueeLineEdit来实现走马灯效果了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值